共用方式為


SMP 開發

WMI 提供者

記憶體管理提供者 (SMP) 介面是以 WMI 為基礎。 雖然您可以使用 WMI v1 撰寫 SMP,但我們強烈建議您使用 C/C++ 撰寫 WMI v2 提供者。 不建議使用 .NET Framework 進行 SMP 開發,因為某些重要的功能可能無法透過 .NET 平臺使用。 此外:

  • WMI v1 對 COM 具有繁重的相依性,這在學習方面可能很困難且耗時。
  • WMI v2 與 WMI v1 更符合業界標準;WMI v2 使用 WS-Management,而不是 DCOM。
  • 提供者可以在 WMI v2 中使用更好的錯誤/事件。
  • 提供者可以使用 WMI v2 中的 PowerShell 延伸模組和整合。

開發資源檢查清單

項目 Location 注意
基類MOF檔案:Storagewmi_provider.mof和檔名中開頭為 “msft_” 的所有MOF檔案。 Windows Software Development Kit (SDK) 在 %SDK_Installed_Location%\Windows Kits\x.x\Include\um 下
其他必要的MOF檔案:qualifiers.mof和 CIM_Error.mof 分散式管理工作組: http://dmtf.org/standards/cim 這些檔案不是Microsoft定義的。
頭檔:mi.h Windows SDK 在 %SDK_Installed_Location%\Windows Kits\x.x\Include\um 下
提供者基本架構產生工具和.dll檔案:Convert-MofToProvider.exe Windows SDK 在 %SDK_Installed_Location%\Windows Kits\x.x\bin\x64\ 或 ...\bin\x86 下
提供者註冊工具:Register-CimProvider.exe %OS_Install_Path%\Windows\System32\

MOF 定義

初始 SMP 開發是以三個簡單的步驟完成:

  1. 擴充提供者MOF。
  2. 產生提供者基本架構(或存根)。
  3. 實作存根。

擴充提供者MOF

SMP MOF 位於 Windows SDK include 資料夾中。 它們前面會加上 MSFT_*。 將這些檔案複製到您的開發目錄,以及 CIM_Error.mof 和 qualifiers.mof。 每個MOF都會定義一或多個抽象類,以形成SMP的基礎。

類似於其他語言,無法直接實作抽象類。 它必須衍生並在個別的實作類別中實作。 建立您自己的MOF,並包含所有相關提供者MOF。 然後,為提供者將實作的每個基類建立衍生類別。 請務必為您的類別挑選唯一的前置詞。 例如,名為 “Contoso Storage Inc.” 的公司。 可以在其類別前面加上 CONTOSO_* 或 CSI_*。 例如,針對 MSFT_StorageProvider,“CONTOSO_” 前置詞會產生CONTOSO_StorageProvider。 類別的外觀現在應該如下所示:

    class CONTOSO_StorageProvider : MSFT_StorageProvider
    {
        ...
    }

建立這些基本架構類別之後,您必須複製您計劃實作之方法的所有方法宣告。 所有未複製的方法(不論是否實作)都會傳回MI_RESULT_NOT_SUPPORTED。 您不需要複製類別屬性。 若要將MOF編譯錯誤降到最低,請保留方法和參數的所有限定符。

最後,請務必在MOF開頭包含這幾行:

    #pragma include("storagewmi_provider.mof")
    #pragma include("msft_qualifiers.mof")

當您完成步驟 1 時,現在已準備好使用 Convert-MofToProvider.exe 產生提供者存根。 提供此命令的輸入時,請務必只指定衍生類別。 基類的標頭會以隱含方式產生。

請參閱 SMP 範例 MOF

提供者基本架構產生

SMP 開發人員可以使用 WMI SDK 中的Convert-MofToProvider.exe工具來產生提供者基本架構專案。 此專案包含預先填入 WMI 提供者方法的標頭和 C 原始程式檔清單。 藉由提供這些方法的實作,開發人員可以提供其存儲設備硬體的支援。

將所有MOF從 [開發資源檢查清單] 區段和您建立的MOF放在一個資料夾中。 接下來,在命令提示字元中使用下列命令來產生提供者基本架構(請參閱大部分更新至日期選項的說明文字):

    Convert-MofToProvider.exe
        -MofFile <path to your provider mof>
        -ClassList <list of ALL classes listed in your mof, space separated>
        -IncludePath <path to qualifiers.mof and CIM_Error.mof>
        -SkipQualifiers
        -SkipLocalize

最後,將 mi.h 頭檔包含在您的開發專案中。

StorageProvider、StorageSubSystem 和 VirtualDisk 是必要類別。 視記憶體陣列的功能而定,StoragePool、ResiliencSetting、PhysicalDisk、MaskingSet、InitiatorId、TargetPort、TargetPortal、OffloadDataTransferSetting 和 StorageJob 都是選擇性的。

為了簡化開發和測試程式,建議的實作順序如下:

  1. EnumerateInstances:支援必要類別 StorageProvider、StorageSubSystem、VirtualDisk 的基本查詢。
  2. GetInstance:許多 WMI 作業都需要 GetInstance,包括方法調用。
  3. 建立*/DeleteObject:針對提供者支援的物件實作所有建立和刪除方法。
  4. 對象關聯:關聯可讓您在數位物件之間快速且輕鬆地周遊。 實作需要 AssociatorsOf 和 associatorsOf 類別上的 EnumerateInstances、AssociatorsOf 和 ReferencesOf。 不需要關聯子上的 GetInstance,但來源和目的地物件的 GetInstance 為 。
  5. 指示:指示可讓您的提供者通知管理應用程式變更。
  6. 方法的其餘部分。

提供者註冊

啟動命令提示字元。 使用下列命令註冊您的提供者:

    Register-CimProvider.exe 
    –Namespace root\Microsoft\Windows\Storage\Providers
    –ProviderName <name of your provider>
    –Path <path to your provider’s dll file>