註冊類別提供者
若要建立 WMI 類別提供者,您必須使用 __ClassProviderRegistration 實例來註冊 代表 提供者 的 __Win32Provider實例。 身為 COM 物件,您的提供者必須向作業系統和 WMI 註冊。 下列程式假設您已經實作註冊程式,如 註冊提供者中所述。 如果您的提供者將大部分的資料儲存在 WMI 存放庫中,而且該資料只會在 WMI 初始化時更新,請將您的類別註冊為推送類別提供者。 如果您經常提供變更的資料,而且會在 WMI 的每個要求上以動態方式擷取您的程式碼,請將您的提供者註冊為提取類別提供者。
下列程式描述如何註冊推送類別提供者。
註冊推送類別提供者
將__ClassProviderRegistration實例的InteractionType屬性設定為 1。
建立 __ClassProviderRegistration 實例是註冊程式的一部分。
下列程式描述如何註冊提取類別提供者。
註冊提取類別提供者
建立描述提供者 之__Win32Provider 類別的實例。
建立描述提供者功能集 的 __ClassProviderRegistration 類別實例。
在 __ClassProviderRegistration 實例內:
除了描述類別的各種支援方法之外, __ClassProviderRegistration 類別也有三個描述一系列查詢的屬性。 一起使用時,這三個屬性會描述類別提供者所提供的整個類別範圍。 每個查詢屬性都包含一個名為「架構查詢」的 WQL SELECT 語句,以指定支援的類別類型。 架構查詢會指定名為 meta_class 的特殊類別名稱。 下表列出查詢屬性。
屬性 | 描述 |
---|---|
ResultSetQueries | 包含提供者所提供的結果集相關資訊。 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 屬性中包含至少一個查詢。 |
UnsupportedQueries | 包含類別提供者未提供的結果集相關資訊。 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的實例來註冊或刪除提供者。