共用方式為


將數據提供給 WMI

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

本主題將討論下列各節:

建立可管理物件的模型

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

若要建立有用的模型:

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

實作可管理物件的模型

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

注意

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

 

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

判斷要實作的提供者類型

WMI 支援特定數目的提供者類型,可決定提供者所傳遞的信息和作業的性質。

提供者類型如下:

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

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

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

"結合或分離提供者這個術語決定了提供者是在哪個主機進程下運行,特別是相對於WMI提供的WMIPRVSE.EXE進程的情況下。" 最佳做法是判斷提供者所公開的管理數據,以及它所依賴的 API 或應用程式是否一律可在系統中使用。 如果提供者所依賴的 API 或應用程式一律可供使用(在系統上執行),則提供者應該是結合的提供者,如果不是,它必須是分離的提供者。 如需有關託管模式的詳細資訊,請參閱 提供者裝載和安全性

如需建立結合提供者的詳細資訊,請參閱 撰寫提供者提供數據給WMI,如需在應用程式中合併分離提供者的詳細資訊,請參閱 在應用程式中併入提供者。

結合的提供者可以被描述為內部進程(in-proc)或外部進程(out-of-proc)。 當結合的提供者是內部提供者時,它會在共用WMIPRVSE.EXE WMI 主控進程下執行,並實作為 COM 內部伺服器 (.dll)。 當提供者是進程外提供者時,應客戶端或事件要求由WMI啟動,但它作為獨立進程運行,並實作為可執行檔(.exe)。

實作提供者

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

  • 在 Visual Studio 中使用 ATL 精靈。

    ATL 精靈會產生實作耦合的提供者的提供程式碼。 在使用 ATL 精靈時,您可以指定要建立進程內(.dll)或進程外(.exe)的提供者執行時模型。

  • 定義一個 COM 物件來容納您的提供者。

    提供者程序代碼是以 C++撰寫。 如需詳細資訊,請參閱撰寫提供者將數據提供給 WMI。

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

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

向 WMI 和系統註冊提供者

在從消費者使用提供者之前,請務必向 WMI 系統和 Windows COM 子系統註冊它。

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

測試提供者

當註冊提供者代碼時,請務必透過不同消費端(例如,腳本、.NET Managed 程式代碼,以及C++ 消費端)來正確測試提供者。

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

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

開發 WMI 提供者

供應商託管和安全性

藉由撰寫提供者 將數據提供給WMI

在應用程式 中併入提供者

註冊提供者

WMI 客戶端應用程式疑難排解

保護您的提供者

在64位平臺上取得和提供數據