共用方式為


定義 WMI 實例名稱

WMI 區塊的 實例 包含特定實體裝置或軟體元件所提供的數據。 就像區塊的 GUID 唯一識別區塊一樣,實例的名稱會唯一識別該區塊的實例。 WMI 用戶端應用程式會使用實例名稱,將數據區塊中傳回的資訊與提供資料的裝置或元件產生關聯。 WMI 會使用實例名稱來判斷應該傳送要求給哪個裝置。 強烈建議驅動程式在定義實例名稱時使用其 PDO。

驅動程式可以使用兩種方式之一來定義區塊的實例名稱:

  • 驅動程式會在註冊 區塊時,將 靜態實例名稱 的清單傳遞給WMI。

    註冊區塊之後,驅動程式和WMI都會在此清單中依其索引指定實例名稱。 靜態實例名稱可以根據驅動程式 PDO 的 裝置實例識別碼 或驅動程式定義的基底名稱;或驅動程式可以定義實例名稱字串的清單。 靜態實例名稱會持續存在,直到驅動程式藉由重新註冊區塊來明確變更它們為止。

  • 驅動程式會在建立實例時產生 動態實例名稱

    驅動程式指出,它會在註冊區塊時產生區塊的動態實例名稱。 註冊區塊之後,驅動程式和WMI都會在 Parameters.WMI.Buffer的緩衝區中以字串的形式傳遞動態實例名稱。

只有當數據區塊的實例數目或實例名稱經常在運行時間變更時,驅動程式才會產生動態實例名稱。 例如,驅動程式可能會使用進程標識碼或 TCP/IP 連線的 IP 位址作為實例名稱。 這類實例名稱應該是動態的;如果它們是靜態的,驅動程式會產生相當大的額外負荷,因為每次發生變更時,都必須呼叫 IoWMIRegistrationControl 來更新實例的數目和名稱。

在大部分情況下,靜態實例名稱優於動態實例名稱,原因如下:

  • 靜態實例名稱可改善驅動程式的效能,因為驅動程式不需要傳回實例名稱字串來回應 WMI 要求,如同它必須為動態實例名稱所做的。

  • WMI 可以在註冊時偵測靜態實例名稱衝突,並在必要時自動修改實例名稱,因此不論有多少驅動程式註冊區塊,指定區塊的所有實例名稱都是唯一的。

    WMI 無法偵測動態實例名稱的實例名稱衝突,因此驅動程式會負責使用 IoWMIAllocateInstanceIds產生唯一名稱。

  • 驅動程式可以使用 WMI 連結庫例程來處理使用靜態實例名稱之區塊的 IRP,只要名稱是以驅動程式的 PDO 或驅動程式定義的基底名稱為基礎。

    驅動程式無法使用 WMI 連結庫例程來處理使用動態實例名稱之數據區塊的 IRP。

驅動程式會藉由設定或清除 WMIREGGUIDWMIGUIDREGINFO 結構中的 WMIREG_FLAG_XXX,來指出區塊是否使用靜態或動態實例名稱,以及靜態實例名稱的類型。 如需詳細資訊,請參閱 註冊為 WMI 資料提供者