共用方式為


撰寫重新初始化常式

任何需要在階段中初始化本身的驅動程式,都可以包含 重新初始化 常式。 在DriverEntry常式傳回控制項,而其他驅動程式已自行初始化之後,就會呼叫重新初始化常式。 一般而言, 重新初始化 常式會執行必須在另一個驅動程式啟動之後完成的工作。

例如,系統的鍵盤類別驅動程式 kbdclass同時支援 PnP 和舊版鍵盤埠。 如果系統包含一或多個無法偵測到 PnP 管理員的舊版埠,鍵盤類別驅動程式仍必須為每個埠建立裝置物件,並在埠的較低層級驅動程式上分層。 因此,類別驅動程式在其DriverEntryAddDevice常式被呼叫,且已載入其他驅動程式之後,就會呼叫重新初始化常式。 重新初始化常式會偵測埠、為其建立裝置物件,並將驅動程式分層至裝置的其他較低層級驅動程式。

驅動程式的 DriverEntry 常式會呼叫 IoRegisterDriverReinitialization ,將 重新初始化 常式排入佇列以供執行。 Reinitialize常式也可以呼叫IoRegisterDriverReinitialization本身,這會導致重新佇列常式。 要重新初始化的其中一個參數表示已呼叫的次數。

IoRegisterDriverReinitialization 的呼叫可以包含驅動程式定義內容資料的指標,系統提供作為 重新初始化的輸入。 如果重新初始化常式使用登錄,內容資料應該包含傳遞至DriverEntry常式的RegistryPath指標,因為此指標不是重新初始化常式的輸入參數。

如果DriverEntry未傳回STATUS_SUCCESS,則不會呼叫Reinitialize常式。

通常,具有 重新初始化 常式的驅動程式是控制 PnP 和舊版裝置的高階驅動程式。 除了為 PnP 管理員偵測到 (的裝置建立裝置物件,以及 PnP 管理員呼叫驅動程式的 AddDevice 常式) ,驅動程式也必須為 PnP 管理員未列舉的舊版裝置建立裝置物件。 重新初始化常式會建立這些裝置物件,並將驅動程式分層至基礎裝置的下一個較低驅動程式。

如果驅動程式有 重新初始化 常式,它會在 撰寫 DriverEntry 例程中所述的相同基本步驟中初始化,而且它也有與其 DriverEntry 常式相同的基本需求。