將資料提供給 WMI

WMI 可透過 WMI 提供者提供 Windows 可管理物件的相關資料。 提供者會從系統元件擷取資料,例如進程或檢測的應用程式,例如 SNMP 或 IIS,並透過 WMI 將該資料傳遞至管理應用程式。 例如,當應用程式或腳本要求使用 WMI Win32_Process 類別處理資訊時,資料會透過預先安裝的提供者動態取得。

本主題將討論下列各節:

建立可管理物件的模型

開發提供者之前,請先建立資料模型,以代表要透過 WMI 公開的可管理物件。 您可以規劃提供者將公開哪些資料物件。 例如,如果您打算管理桌面背景的螢幕解析度,您必須決定如何以 Managed 物件格式建立桌面的模型 , (MOF) 檔案。

若要建立有用的模型:

  • 判斷客戶可能想要讀取和更新資訊的實際案例和模型 (,例如,變更每個可管理物件的背景影像) 。 這些是您的類別屬性。
  • 判斷客戶可能想要對每個可管理物件執行的動作類型。 這些是您的方法。

實作可管理物件的模型

若要實作可管理物件的模型,請建立包含代表每個物件的 WMI 類別的 MOF 檔案。 如需建立 MOF 檔案以定義 WMI 類別的詳細資訊,請參閱 設計 Managed 物件格式 (MOF) 類別。 提供者及其類別的註冊通常會包含在 MOF 檔案中,雖然可以使用 COM API 來建立類別和方法。 如需詳細資訊,請參閱 開發 WMI 提供者

注意

若要確保受控物件的所有 WMI 類別定義如果 WMI 失敗並重新啟動,請使用Managed 物件格式 (MOF) 檔案中的#pragma自動復原預處理器指令還原至WMI 存放庫

 

建立 MOF 檔案之後,請使用 Mofcomp.exe 工具來編譯它。 這會通知您 MOF 檔案中的錯誤,並將 MOF 檔案中定義的 WMI 類別新增至 WMI 存放庫 ,以便提供者可以使用類別。

判斷要實作的提供者類型

WMI 支援特定數目的提供者類型,可決定提供者所提供的資訊和作業的本質。

提供者類型如下:

大部分的提供者都是執行個體提供者和方法提供者。 執行個體提供者是最常見的提供者,並提供指定類別的實例。 方法提供者會實作一或多個類別的方法。 如需提供者類型的詳細資訊,請參閱 開發 WMI 提供者

判斷提供者的裝載 (實作) 模型

WMI 提供者是實作為 COM 物件的二進位檔。 這表示每個提供者都有一個 DLL 檔案,可在特定進程和安全性內容內執行。 這是 WMI 稱為 裝載模型的內容。 WMI 提供各種方式來裝載提供者,但最常見的方法是使用在 NetworkServiceHost 安全性內容中的 WMI 程式下執行的結合提供者模型 () 。 WMI 提供者可以分類為結合或 分離

結合或分離提供者一詞會決定提供者在哪個主機進程下,會根據提供的 WMI 提供WMIPRVSE.EXE進程來執行。 最佳做法是判斷提供者所公開的管理資料及其依賴的 API 或應用程式是否一律可在系統中使用。 如果提供者依賴的 API 或應用程式一律可在系統) 上執行 (使用,則提供者應該是結合的提供者,否則必須是分離的提供者。 如需裝載模型的詳細資訊,請參閱 提供者裝載和安全性

如需建立結合提供者的詳細資訊,請參閱 撰寫提供者提供資料給 WMI,以及有關在應用程式中納入分離提供者的詳細資訊,請參閱 在應用程式中納入提供者

結合的提供者可以描述為同進程內 () 或跨進程 (跨進程) 。 當結合的提供者是同進程提供者時,它會在共用WMIPRVSE.EXE WMI 主控進程下執行,並實作為 COM 內部伺服器 (.dll) 。 當提供者是跨進程提供者時,它會在用戶端或事件的要求時由 WMI 啟動,但會以個別進程的形式執行,並實作為可執行檔 (.exe) 。

實作提供者

提供者可以透過下列方式實作:

  • 在 Visual Studio 中使用 ATL 精靈。

    ATL 精靈會產生實作結合提供者的提供者程式碼。 使用 ATL 精靈時,您可以指定您想要建立 in-proc (.dll) 或跨進程 (.exe) 提供者執行時間模型。

  • 定義要包含提供者的 COM 物件。

    提供者程式碼是以 C++ 撰寫。 如需詳細資訊,請參閱 藉由撰寫提供者將資料提供給 WMI

  • 在 .NET Framework 中使用Microsoft.Management.Infrastructure命名空間中的類別,以使用 Managed 程式碼建立提供者。 (不再支援 System.Management.Instrumentation 命名空間。)

    此程式會建立分離的提供者。

向 WMI 和系統註冊提供者

使用取用者的提供者之前,請務必向 WMI 系統和 Windows COM 子系統註冊它。

MOF 檔案可以包含相同類別的多個提供者類型。 相同的提供者名稱會註冊為 實例或方法提供者。 如需詳細資訊,請參閱 註冊提供者

測試提供者

註冊提供者程式碼時,請務必使用來自不同取用 (者的提供者來正確測試提供者,例如腳本、.NET Managed 程式碼和 C++ 取用者) 。

執行下列工作來測試您的提供者:

  • 請追蹤 MSFT_WmiProvider_OperationEvent 事件通知,確定您的提供者已正確載入。 這些事件會通知您任何提供者載入失敗。 其他可能有説明的疑難排解類別是 Win32_ProcessStartTraceWin32_ProcessStopTrace。 如需疑難排解提供者的詳細資訊,請參閱偵錯 提供者提供者組態和疑難排解類別
  • 如果提供者是實例或方法提供者,請務必逐一測試每個提供者功能,以避免在遵循程式碼邏輯時混淆。
  • 針對執行個體提供者,建立用戶端應用程式或腳本,以叫用提供者的每個介面, (列舉、取得、放置和刪除) 。 即使提供者不應該實作任何專案,它也應該傳回「不支援」訊息。 您可以在 WMI 傳回碼中找到已定義的傳回值。
  • 若要確保所需的安全性內容如預期般運作,請從非系統管理員安全性內容叫用提供者支援的作業。 提供者必須支援模擬。 如果使用者缺少正確的安全性認證會嘗試更新資料或執行執行方法的作業,您的提供者應該拒絕存取,並顯示適當的錯誤訊息。
  • 如需提供者安全性的詳細資訊,請參閱 保護您的提供者

開發 WMI 提供者

提供者裝載和安全性

藉由撰寫提供者將資料提供給 WMI

在應用程式中納入提供者

註冊提供者

針對 WMI 用戶端應用程式進行疑難排解

保護您的提供者

在 64 位平臺上取得和提供資料