撰寫 Interop 的關聯提供者
關聯提供者提供註冊設定檔的機制,並將它們與在不同命名空間中實作的設定檔產生關聯。
關聯提供者可用來公開標準設定檔,例如電源設定檔。 這可藉由在根/Interop 命名空間中撰寫關聯提供者,藉由實作衍生自 CIM_RegisteredProfile的類別來公開關聯實例來完成。 提供者必須同時在根/Interop 和根/ < 實 > 作命名空間中註冊,才能支援跨命名空間周遊。
每當根/Interop 命名空間中執行關聯查詢時,Windows Management Instrumentation (WMI) 載入關聯提供者。
實作 Interop 的關聯提供者
從 CIM_RegisteredProfile衍生類別 , 並在 root\interop 命名空間中建立這個衍生類別的靜態實例。 至少必須以有效值傳播下列屬性:
即使InstanceID唯一定義CIM_RegisteredProfile的實例,RegisteredName、RegisteredOrganization和RegisteredVersion的組合也必須唯一識別組織範圍內的已註冊設定檔。 如需個別屬性的詳細資訊,請參閱 CIM_RegisteredProfile。
下列程式碼範例描述從CIM_RegisteredProfile衍生ProcessProfile類別並填入靜態實例的語法。
class ProcessProfile : CIM_RegisteredProfile { }; instance of ProcessProfile as $PP { InstanceID = "Process"; RegisteredName = "Process"; RegisteredOrganization = "1"; // Set to "Other" OtherRegisteredOrganization = "Microsoft"; RegisteredVersion = "1.0"; };
注意
若為 Windows 用戶端, RegisteredOrganization 屬性必須設定為 1, 而 OtherRegisteredOrganization 屬性設定為 「Microsoft」。
建立傳回 CIM_ElementConformsToProfile關聯實例的提供者。 此流程有兩個步驟。
在 Interop 和實作命名空間中建立衍生自 CIM_ElementConformsToProfile 的類別。 因為不同的廠商可以實作相同的設定檔,所以類別的名稱應該是唯一的。 建議的命名慣例是 「 < Organization > _ < ProductName_ < ClassName >> _ < Version > 」。 ConformantStandard或ManagedElement屬性必須指定包含這個類別所屬命名空間的MSFT_TargetNamespace限定詞。
下列程式碼範例描述從 root\interop 命名空間中的 CIM_ElementConformsToProfile衍生Microsoft_Process_ElementConformsToProfile_v1 類別的語法。 在此範例中,Win32_Process Managed 元素會使用 MSFT_TargetNamespace 限定詞參考 root\cimv2 命名空間。
#pragma namespace("\\\\.\\root\\interop") [Provider("ProcessAssociation"),Dynamic] Class Microsoft_Process_ElementConformsToProfile_v1: CIM_ElementConformsToProfile { CIM_RegisteredProfile ref ConformantStandard = $PP; [MSFT_TargetNamespace("root\\cimv2")]Win32_process ref ManagedElement = null; };
下列程式碼範例描述從 root\cimv2 命名空間中的 CIM_ElementConformsToProfile 衍生Microsoft_Process_ElementConformsToProfile_v1 類別的語法。 在此範例中, CIM_RegisteredProfile 一致性標準會使用 MSFT_TargetNamespace 限定詞參考 root\interop 命名空間。
#pragma namespace("\\\\.\\root\\cimv2") [Provider("ProcessAssociation"),Dynamic] Class Microsoft_Process_ElementConformsToProfile_v1: CIM_ElementConformsToProfile { [MSFT_TargetNamespace("root\\interop")] CIM_RegisteredProfile ref ConformantStandard = $PP; Win32_process ref ManagedElement = null; };
如果未在參考實作命名空間的屬性上指定 MSFT_TargetNamespace 限定詞,則 「Associators of」 語句的 ResultClass 篩選將無法運作。 例如,如果未指定MSFT_TargetNamespace限定詞,下列Windows PowerShell命令列將不會傳回物件:get-wmiobject -query 「associators of {ProcessProfile.InstanceID='Process'} where resultclass='Win32_Process'」。
MSFT_TargetNamespace限定詞無法指向遠端電腦上的命名空間。 例如,不支援下列命名空間:MSFT_TargetNamespace (\\\ < RemoteMachine > \\root\\interop) 。
撰寫提供者,以傳回所建立衍生類別的實例。 如需詳細資訊,請參閱 撰寫執行個體提供者。 當您存取跨命名空間實例時,您可能必須存取用戶端的安全性層級。 如需詳細資訊,請參閱 模擬用戶端。
關聯提供者應該同時實作 IWbemServices.CreateInstanceEnumAsync 和 IWbemServices.GetObjectAsync 方法。 實作 IWbemServices.ExecQueryAsync 方法是選擇性的。 因為此提供者可以從 root\interop 和 root\ < 實 > 作的命名空間存取,所以不應該明確相依于提供者內的命名空間。
在 root\interop 和 root\ < implemented > 命名空間中註冊關聯提供者。 如需詳細資訊,請參閱 註冊執行個體提供者。
下列程式碼範例描述在 root\interop 命名空間中註冊關聯提供者的語法。
#pragma namespace("\\\\.\\root\\interop") instance of __Win32Provider as $P { Name = "ProcessAssociation" ; ClsId = "{DA13393B-A2D5-4BAC-9BD2-30B092E9EBB8}"; } ; instance of __InstanceProviderRegistration { Provider = $P; SupportsPut = false; SupportsGet = TRUE; SupportsDelete = false; SupportsEnumeration = TRUE; };
下列程式碼範例描述在 root\cimv2 命名空間中註冊關聯提供者的語法。
#pragma namespace("\\\\.\\root\\cimv2") instance of __Win32Provider as $R { Name = "ProcessAssociation" ; ClsId = "{DA13393B-A2D5-4BAC-9BD2-30B092E9EBB8}"; } ; instance of __InstanceProviderRegistration { Provider = $R; SupportsPut = false; SupportsGet = TRUE; SupportsDelete = false; SupportsEnumeration = TRUE; };
將 CIM_ElementConformsToProfile 的架構放在實作的命名空間中。 針對 Windows 用戶端,這是位於 %systemroot%\system32\wbem 資料夾中的 interop.mof 檔案。
為您的提供者實作 IWbemProviderInit 介面。
WMI 會使用 IWbemProviderInit 來載入和初始化提供者。 IWbemProviderInit.Initialize方法應該以允許針對兩個不同的命名空間呼叫的方法實作。 如需詳細資訊,請參閱 初始化提供者。
相關主題