Membedakan Startup Cepat dari Wake-from-Hibernation

Ada tiga mode startup di Windows:

  • Dingin (tradisional)
  • Bangun dari hibernasi
  • Cepat (menggabungkan dua pertama, diperkenalkan dalam Windows 8)

Untuk membedakan startup cepat dari wake-from-hibernation, driver perangkat mode kernel dapat memeriksa runtime integrasi daya sistem.

Selama startup dingin, boot loader membuat gambar memori kernel dengan memuat bagian file kernel Windows ke dalam memori dan menautkannya. Selanjutnya, kernel mengonfigurasi fungsi sistem inti, menghitung perangkat yang terpasang pada komputer, dan memuat driver untuknya.

Sebaliknya, startup cepat hanya memuat file hibernasi (Hiberfil.sys) ke dalam memori. Startup cepat cenderung membutuhkan waktu yang jauh lebih sedikit daripada startup dingin.

Untuk membedakan startup cepat dari wake-from-hibernation, driver dapat memeriksa informasi dalam IRP set-power sistem (IRP_MN_SET_POWER) yang memberi tahu driver bahwa komputer telah memasuki status S0 (bekerja). Lokasi tumpukan I/O driver di IRP ini berisi anggota Power, yang merupakan struktur yang berisi informasi terkait daya. Dimulai dengan Windows Vista, struktur anggota Power berisi anggota SystemPowerStateContext , yang merupakan struktur SYSTEM_POWER_STATE_CONTEXT yang berisi informasi tentang status daya sistem sebelumnya. Informasi ini dikodekan dalam bidang bit dalam struktur SYSTEM_POWER_STATE_CONTEXT .

Sebagian besar bidang bit dalam struktur SYSTEM_POWER_STATE_CONTEXT disediakan untuk penggunaan sistem dan buram untuk driver. Namun, struktur ini berisi dua bidang bit, TargetSystemState dan EffectiveSystemState, yang dapat dibaca oleh driver untuk menentukan apakah startup cepat atau bangun dari hibernasi terjadi.

Bidang bit TargetSystemState dan EffectiveSystemState diatur ke nilai enumerasi SYSTEM_POWER_STATE . Jika TargetSystemState = PowerSystemHibernate dan EffectiveSystemState = PowerSystemHibernate, terjadi wake-from-hibernation.

Namun, jika TargetSystemState = PowerSystemShutdown dan EffectiveSystemState = PowerSystemHibernate, startup cepat terjadi.

Bidang bit TargetSystemState menentukan transisi status daya sistem terakhir di mana driver menerima IRP daya sistem sebelum komputer dimatikan atau memasuki hibernasi. Bidang bit EffectiveSystemState menunjukkan status daya sistem perangkat sebelumnya yang efektif, seperti yang dirasakan oleh pengguna. Nilai TargetSystemState dan EffectiveSystemState mungkin tidak cocok jika, misalnya, driver menerima pemberitahuan transisi sistem yang tertunda ke status hibernasi, tetapi pematian hibrid kemudian terjadi.

Untuk informasi selengkapnya, lihat SYSTEM_POWER_STATE_CONTEXT.

Mempersiapkan startup cepat

Untuk mempersiapkan startup cepat, Windows melakukan urutan matikan penuh dan menyimpan file hibernasi.

  1. Pertama, seperti dalam pematian penuh, Windows menutup semua aplikasi dan mencatat semua sesi pengguna. Pada tahap ini, tidak ada aplikasi yang berjalan, tetapi kernel Windows dimuat dan sesi sistem sedang berjalan.
  2. Selanjutnya, manajer daya mengirim runtime integrasi daya sistem ke driver perangkat untuk memberi tahu mereka untuk menyiapkan perangkat mereka untuk memasuki hibernasi.
  3. Terakhir, Windows menyimpan gambar memori kernel (termasuk driver mode kernel yang dimuat) di Hiberfil.sys dan mematikan komputer.

Jika driver untuk perangkat mengonfigurasi perangkat secara berbeda tergantung pada apakah startup dingin atau bangun dari hibernasi terjadi, driver ini harus, setelah startup cepat, konfigurasikan perangkat seolah-olah startup dingin terjadi. Misalnya, driver NDIS yang disediakan sistem menonaktifkan kemampuan bangun miniport pada startup cepat tetapi tidak pada bangun dari hibernasi.