共用方式為


撰寫 Interop 的關聯提供者

關聯提供者提供註冊設定檔的機制,並將它們與在不同命名空間中實作的設定檔產生關聯。

關聯提供者可用來公開標準設定檔,例如電源設定檔。 這可藉由在根/Interop 命名空間中撰寫關聯提供者,藉由實作衍生自 CIM_RegisteredProfile的類別來公開關聯實例來完成。 提供者必須同時在根/Interop 和根/ < 實 > 作命名空間中註冊,才能支援跨命名空間周遊。

每當根/Interop 命名空間中執行關聯查詢時,Windows Management Instrumentation (WMI) 載入關聯提供者。

實作 Interop 的關聯提供者

  1. 從 CIM_RegisteredProfile衍生類別 並在 root\interop 命名空間中建立這個衍生類別的靜態實例。 至少必須以有效值傳播下列屬性:

    即使InstanceID唯一定義CIM_RegisteredProfile的實例,RegisteredName、RegisteredOrganizationRegisteredVersion的組合也必須唯一識別組織範圍內的已註冊設定檔。 如需個別屬性的詳細資訊,請參閱 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」。

     

  2. 建立傳回 CIM_ElementConformsToProfile關聯實例的提供者。 此流程有兩個步驟。

    1. 在 Interop 和實作命名空間中建立衍生自 CIM_ElementConformsToProfile 的類別。 因為不同的廠商可以實作相同的設定檔,所以類別的名稱應該是唯一的。 建議的命名慣例是 「 < Organization > _ < ProductName_ < ClassName >> _ < Version > 」。 ConformantStandardManagedElement屬性必須指定包含這個類別所屬命名空間的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) 。

    2. 撰寫提供者,以傳回所建立衍生類別的實例。 如需詳細資訊,請參閱 撰寫執行個體提供者。 當您存取跨命名空間實例時,您可能必須存取用戶端的安全性層級。 如需詳細資訊,請參閱 模擬用戶端

      關聯提供者應該同時實作 IWbemServices.CreateInstanceEnumAsyncIWbemServices.GetObjectAsync 方法。 實作 IWbemServices.ExecQueryAsync 方法是選擇性的。 因為此提供者可以從 root\interop 和 root\ < 實 > 作的命名空間存取,所以不應該明確相依于提供者內的命名空間。

  3. 在 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;
    };
    
  4. CIM_ElementConformsToProfile 的架構放在實作的命名空間中。 針對 Windows 用戶端,這是位於 %systemroot%\system32\wbem 資料夾中的 interop.mof 檔案。

  5. 為您的提供者實作 IWbemProviderInit 介面。

    WMI 會使用 IWbemProviderInit 來載入和初始化提供者。 IWbemProviderInit.Initialize方法應該以允許針對兩個不同的命名空間呼叫的方法實作。 如需詳細資訊,請參閱 初始化提供者

CIM_ElementConformsToProfile

CIM_RegisteredProfile

撰寫執行個體提供者

註冊執行個體提供者