Yeniden Başlatma Rutinini Yazma

Kendisini aşamalar halinde başlatması gereken tüm sürücülerde Reinitialize yordamı bulunabilir. DriverEntry yordamı denetimi döndürdükten ve diğer sürücüler kendilerini başlattıktan sonra Reinitialize yordamı çağrılır. Reinitialize yordamı genellikle başka bir sürücü başlatıldıktan sonra yapılması gereken görevleri gerçekleştirir.

Örneğin, sistemin klavye sınıfı sürücüsü kbdclass hem PnP hem de eski klavye bağlantı noktalarını destekler. Bir sistem PnP yöneticisinin algılayamayacağı bir veya daha fazla eski bağlantı noktası içeriyorsa, klavye sınıfı sürücüsünün yine de her bağlantı noktası için bir cihaz nesnesi oluşturması ve bağlantı noktası için alt düzey sürücüler üzerinde katman oluşturması gerekir. Sonuç olarak, sınıf sürücüsünün DriverEntry ve AddDevice yordamları çağrıldıktan ve diğer sürücüler yüklendikten sonra çağrılmak üzere bir Reinitialize yordamı vardır. Reinitialize rutini bağlantı noktasını algılar, bağlantı noktası için bir cihaz nesnesi oluşturur ve sürücüyü cihaz için diğer alt düzey sürücüler üzerine katmanlar.

Bir sürücünün DriverEntry yordamı, yürütme için Reinitialize yordamını kuyruğa almak üzere IoRegisterDriverReinitialization'ı çağırır. Reinitialize yordamı ioRegisterDriverReinitialization'ı da çağırabilir ve bu da yordamın yeniden sorgulanmasına neden olur. Yeniden Başlatma parametrelerinden biri, çağrılma sayısını gösterir.

IoRegisterDriverReinitialization çağrısı, sistemin Yeniden Başlatma için giriş olarak sağladığı sürücü tanımlı bağlam verilerine yönelik bir işaretçi içerebilir. Reinitialize yordamı kayıt defterini kullanıyorsa, bağlam verileri DriverEntry yordamına geçirilen RegistryPath işaretçisini içermelidir çünkü bu işaretçi Reinitialize yordamının giriş parametresi değildir.

DriverEntry STATUS_SUCCESS döndürmezse Reinitialize yordamı çağrılmaz.

Genellikle Reinitialize yordamına sahip bir sürücü, hem PnP hem de eski cihazları denetleen daha üst düzey bir sürücüdür. PnP yöneticisinin algıladığı (ve PnP yöneticisinin sürücünün AddDevice yordamını çağırdığı) cihazlar için cihaz nesneleri oluşturmaya ek olarak, sürücü de PnP yöneticisinin listelemediği eski cihazlar için cihaz nesneleri oluşturmalıdır. Reinitialize rutini bu cihaz nesnelerini oluşturur ve sürücüyü temel cihazın altındaki sürücünün üzerine katmanlar.

Bir sürücünün Reinitialize yordamı varsa, DriverEntry Yordamı Yazma bölümünde açıklanan temel adımlarla başlatılır ve ayrıca DriverEntry yordamıyla aynı temel gereksinimlere sahiptir.