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 開發是以三個簡單的步驟完成:
- 擴充提供者MOF。
- 產生提供者基本架構(或存根)。
- 實作存根。
擴充提供者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 都是選擇性的。
為了簡化開發和測試程式,建議的實作順序如下:
- EnumerateInstances:支援必要類別 StorageProvider、StorageSubSystem、VirtualDisk 的基本查詢。
- GetInstance:許多 WMI 作業都需要 GetInstance,包括方法調用。
- 建立*/DeleteObject:針對提供者支援的物件實作所有建立和刪除方法。
- 對象關聯:關聯可讓您在數位物件之間快速且輕鬆地周遊。 實作需要 AssociatorsOf 和 associatorsOf 類別上的 EnumerateInstances、AssociatorsOf 和 ReferencesOf。 不需要關聯子上的 GetInstance,但來源和目的地物件的 GetInstance 為 。
- 指示:指示可讓您的提供者通知管理應用程式變更。
- 方法的其餘部分。
提供者註冊
啟動命令提示字元。 使用下列命令註冊您的提供者:
Register-CimProvider.exe
–Namespace root\Microsoft\Windows\Storage\Providers
–ProviderName <name of your provider>
–Path <path to your provider’s dll file>