Menulis Rutinitas Reinisialisasi

Setiap driver yang perlu menginisialisasi dirinya sendiri secara bertahap dapat berisi rutinitas Reinitialize . Rutinitas Reinitialisasi dipanggil setelah rutinitas DriverEntry mengembalikan kontrol dan driver lain telah menginisialisasi diri mereka sendiri. Biasanya, rutinisasi ulang melakukan tugas yang harus dilakukan setelah driver lain dimulai.

Misalnya, driver kelas keyboard sistem, kbdclass, mendukung port keyboard PnP dan warisan. Jika sistem menyertakan satu atau beberapa port warisan yang tidak dapat dideteksi oleh manajer PnP, driver kelas keyboard tetap harus membuat objek perangkat untuk setiap port dan melapisinya sendiri melalui driver tingkat bawah untuk port. Akibatnya, driver kelas memiliki rutinitas Reinitialize yang akan dipanggil setelah rutinitas DriverEntry dan AddDevice telah dipanggil dan driver lain telah dimuat. Rutinisasi ulang mendeteksi port, membuat objek perangkat untuk itu, dan melapisi driver melalui driver tingkat bawah lainnya untuk perangkat.

Rutinitas DriverEntry driver memanggil IoRegisterDriverReinitialization untuk mengantrekan rutinitas Reinitialize untuk eksekusi. Rutinitas Reinitialize juga dapat memanggil IoRegisterDriverReinitialization itu sendiri, yang menyebabkan rutinitas diantrekan kembali. Salah satu parameter untuk menginisialisasi ulang menunjukkan berapa kali parameter tersebut telah dipanggil.

Panggilan ke IoRegisterDriverReinitialization dapat menyertakan penunjuk ke data konteks yang ditentukan driver, yang disediakan sistem sebagai input untuk Menginisialisasi Ulang. Jika rutinitas Reinitialisasi menggunakan registri, data konteks harus menyertakan penunjuk RegistryPath yang diteruskan ke rutinitas DriverEntry karena pointer ini bukan parameter input untuk rutinitas Menginisialisasi ulang .

Rutinisasi Ulang tidak akan dipanggil jika DriverEntry tidak mengembalikan STATUS_SUCCESS.

Biasanya, driver dengan rutinitas Reinitialize adalah driver tingkat lebih tinggi yang mengontrol perangkat PnP dan warisan. Selain membuat objek perangkat untuk perangkat yang dideteksi manajer PnP (dan di mana manajer PnP memanggil rutinitas AddDevice driver), driver juga harus membuat objek perangkat untuk perangkat lama yang tidak dijumlahkan oleh manajer PnP. Rutinisasi ulang membuat objek perangkat tersebut dan melapisi driver di atas driver berikutnya yang lebih rendah untuk perangkat yang mendasar.

Jika driver memiliki rutinitas Reinitialize , ia menginisialisasi dalam langkah-langkah dasar yang sama yang dijelaskan dalam Menulis Rutinitas DriverEntry, dan juga memiliki persyaratan dasar yang sama dengan rutinitas DriverEntry-nya .