Bagikan melalui


Menginisialisasi Ulang Rutinitas

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

Misalnya, driver kelas papan ketik sistem, kbdclass, mendukung port papan ketik PnP dan lama. Jika sistem menyertakan satu atau beberapa port lama yang tidak dapat dideteksi oleh pengelola PnP, driver kelas keyboard harus tetap membuat objek perangkat untuk setiap port dan menyesuaikan diri di atas driver tingkat bawah untuk port tersebut. Akibatnya, driver kelas memiliki rutinitas Reinitialisasi untuk dipanggil setelah rutinitas DriverEntry dan AddDevice telah dipanggil dan driver lain telah dimuat. Rutinitas Reinisialisasi mendeteksi port, membuat objek perangkat untuknya, dan mengatur driver di atas driver tingkat bawah lainnya untuk perangkat.

Rutinitas DriverEntry driver memanggil IoRegisterDriverReinitialization untuk mengantrekan rutinitas Reinitialize untuk eksekusi. Rutinitas Reinitialize juga dapat memanggil IoRegisterDriverReinitialization secara mandiri, yang menyebabkan rutinitas diantrikan 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 penunjuk ini bukan parameter input untuk rutinitas Reinitialize .

Rutinitas Reinitialize tidak akan dipanggil jika DriverEntry tidak mengembalikan STATUS_SUCCESS.

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

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