共用方式為


註冊類別提供者

若要建立 WMI 類別提供者,您必須使用 __ClassProviderRegistration實例來註冊代表提供者的 __Win32Provider 實例。 身為 COM 物件,您的提供者必須向作業系統和 WMI 註冊。 下列程序假設您已經按照 註冊提供者中所述的方法實作註冊程序。 如果您的提供者將大部分的數據儲存在WMI存放庫中,且該數據只會在WMI初始化時更新,則請將類別註冊為推送類別提供者。 如果您提供的數據經常變更,並且您的程式在每次從 WMI 請求數據時動態擷取,請將您的提供者註冊為拉取類別提供者。

下列程序說明如何註冊推送類別提供者。

若要註冊推送類別提供者

下列程序說明如何註冊提取類別提供者。

若要註冊提取類別提供者

  1. 建立描述提供者之 __Win32Provider 類別的實例。

  2. 建立描述提供者功能集的 __ClassProviderRegistration 類別實例。

    __ClassProviderRegistration 實例內:

    1. 設定 InteractionType 屬性,以指出提供者是推送或提取提供者。

    2. 使用 DynamicProvider 限定符標記 類別。

      Dynamic 限定符表示 WMI 應該使用提供者來擷取類別實例。 提供者 限定符會指定 WMI 應使用的提供者名稱。

    3. 定義 ResultSetQueriesReferencedSetQueriesUnsupportedQueries 属性。

      這些查詢屬性描述所支援類別的詳細資訊。

除了描述類別的各種支援方法之外,__ClassProviderRegistration 類別也有三個描述一系列查詢的屬性。 一起使用時,這三個屬性會描述類別提供者所提供的整個類別範圍。 每個查詢屬性都包含稱為「架構查詢」的 WQL SELECT 語句,以指定支援的類別類型。 架構查詢會指定名為 meta_class 的特殊類別名稱。 下表列出查詢屬性。

財產 描述
結果集查詢 包含供應商提供之結果集的相關資訊。 WMI 會使用資訊來判斷是否要叫用提供者,以滿足來自應用程式的查詢。 這個屬性描述提供者可以提供的所有類別集合或可用類別的超集,但絕不是子集。 WMI 要求提供者在此屬性中至少指定一個查詢。
下列範例示範當提供者提供參考 Win32_LogicalDisk 類別的關聯類別時,如何設定 ResultSetQueries
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
下列範例示範當提供者提供參考其他未知類別的類別時,如何指定一般查詢。
SELECT * FROM meta_class
下列範例示範如何在提供者只提供子類別,但未提供指定類別的父類別時,設定 ResultSetQueries
SELECT * FROM meta_class WHERE __Dynasty = "MyClass"
下列範例示範如何在提供者提供所有類別和子類別時,使用特殊__this屬性並設定 ResultSetQueries
SELECT * FROM meta_class WHERE __this ISA "MyClass"
ReferencedSetQueries 判斷是否要在要求關聯和參考的架構查詢中略過提供者。 提供關聯類別的提供者必須在其 ReferencedSetQueries 屬性中包含至少一個查詢。
不支援的查詢 包含類別提供者未提供之結果集的相關信息。 WMI 會使用這個屬性從 resultSetQueries 所隱含的類別集合減去 。 例如,類別提供者可以在 ResultSetQueries 中指定 , 支援衍生自 MyClass 的所有類別,並在 UnsupportedQueries 中指定 , 不支援一個特定衍生類別。
當提供者能夠註冊越多關於其查詢處理功能的資訊,其執行速度就會越快。 在 UnsupportedQueries 屬性中輸入一個或多個查詢是一種明確規定的方法,這在提供者依賴於其未供應的類別時顯得尤其重要。 針對 UnsupportedQueries 屬性中所列之查詢中的類別提出要求時,WMI 可以提供類別本身或叫用替代提供者來提供它。

因為 WMI 不支援 OR 子句,因此您必須為每個類別建立個別的查詢。

當類別提供者提供 MyClass1、MyClass2 和 MyClass3 時,ResultSetQueries 中指定下列查詢。

SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"

只有系統管理員可以藉由建立 __Win32Provider 實例並 __ClassProviderRegistration來註冊或刪除提供者。