共用方式為


處理註冊區塊的IRP_MN_REGINFO和IRP_MN_REGINFO_EX

在 Windows 98 和 Windows 2000 上,系統會將 IRP_MN_REGINFO 要求傳送至驅動程式,以允許驅動程式註冊其 WMI 類別。 在 Windows XP 和更新版本上,系統會改為傳送 IRP_MN_REGINFO_EX 要求。 大部分驅動程式都可以使用 WmiSystemControl 來提供回呼常式來處理這些要求。 如需詳細資訊 ,請參閱使用 WMI 程式庫來註冊區塊

驅動程式必須處理 IRP_MN_REGINFOIRP_MN_REGINFO_EX 要求,以註冊使用動態實例名稱的區塊,或使用驅動程式定義的靜態實例名稱清單;它無法呼叫 WmiSystemControl 來註冊這類區塊。 驅動程式可以選擇性地處理此要求,以根據 PDO 或驅動程式定義的基底名稱字串來註冊使用靜態實例名稱的區塊。

在此情況下,驅動程式:

  1. Parameters.WMI.Buffer填入WMIREGINFO結構,指定:

    • 驅動程式提供之所有註冊資料的位元組數目,包括代表另一個驅動程式提供的資料。

    • 驅動程式的登錄路徑。

    • 驅動程式 MOF 資源的名稱。

    • 要註冊的區塊數目。

    • WMIREGGUID結構的陣列,每個區塊各一個。

  2. 針對每個區塊,驅動程式會填入指定下列專案的 WMIREGGUID 結構:

    • 表示區塊的 GUID。

    • 提供實例名稱和區塊其他特性相關資訊的旗標,例如區塊是否昂貴而無法收集。 如需詳細資訊,請參閱 WMI 註冊旗標

    如果區塊正向靜態實例名稱註冊,驅動程式會設定下列其中一個成員來指定區塊的靜態實例名稱資料:

    • 如果驅動程式使用 WMIREG_FLAG_INSTANCE_LIST 設定 Flags ,它會將 InstanceNameList 設定為靜態實例名稱字串清單的位移。 WMI 會依索引指定後續要求中的實例到此清單中。

    • 如果驅動程式使用 WMIREG_FLAG_INSTANCE_BASENAME 設定 Flags ,它會將 BaseNameOffset 設定為基底名稱字串的位移。 WMI 會使用此字串來產生 區塊的靜態實例名稱。

    • 如果驅動程式使用 WMIREG_FLAG_INSTANCE_PDO 設定 Flags ,它會將 Pdo 設定為傳遞至驅動程式 的 AddDevice 常式的 PDO。 WMI 會使用 PDO 的裝置實例路徑來產生區塊的靜態實例名稱。 處理IRP_MN_REGINFO_EX要求時,驅動程式必須在Pdo中傳遞的實體裝置物件上呼叫ObReferenceObject常式。 (系統會自動呼叫 ObDereferenceObject 來取值物件;驅動程式不得這麼做。)

    驅動程式會在 InstanceNameListBaseName所指示的位移中,分別寫入實例名稱字串或基底名稱字串。

  3. 如果驅動程式代表另一個驅動程式註冊區塊, (為類別驅動程式,可能代表迷你類別驅動程式) ,則驅動程式會填入另一個 WMIREGINFO 結構和WMIREGGUID結構清單,其中含有另一個驅動程式區塊的註冊資訊,並將第一個WMIREGINFO中的NextWmiRegInfo設定為第一個WMIREGINFO開頭的位元組位移,設定為第二個WMIREGINFO結構的開頭。