提供者裝載和安全性

表示提供者之 __Win32Provider 實例中的 HostingModel 屬性會指定提供者裝載模型。 設定此屬性會導致提供者載入具有指定許可權層級的共用主機進程。

共用提供者主機進程

WMI 位於與其他數個服務的共用服務主機中。 為了避免在提供者失敗時停止所有服務,提供者會載入名為 「Wmiprvse.exe」 的個別主機進程。 可以執行具有此名稱的多個進程。 每個帳戶都可以在不同的帳戶下執行,且具有不同安全性。 請注意,從 Windows Vista 開始,請使用 winmgmt 命令,單獨使用固定埠在個別進程中執行 WMI。 如需詳細資訊,請參閱 從 Vista 遠端連線到 WMI。

共用主機可以在Wmiprvse.exe主機程式中的下列其中一個系統帳戶下執行:

提供者也可以是本機 COM 伺服器(.exe),或自我裝載,不需要 WMI 提供者主機。

設定裝載模型

由於 LocalSystem 是特殊許可權帳戶,因此建議您在提供者在Wmiprvse.exe進程中執行時,將 HostingModel 設定NetworkServiceHost。 NetworkServiceHost 帳戶適用於不需要廣泛許可權的服務,但確實需要與其他系統進行遠端通訊。

如果您未設定 HostingModel 屬性的值,WMI 會設定 NetworkServiceHostOrSelfHost預設值。 如果 HostingModel 值設定為 LocalSystemHost,WMI 會使用追蹤在 Windows 事件記錄檔中產生事件 5603 和 5604。 由於本機 LocalSystem 帳戶具有高度許可權,因此不建議使用此設定。 您可以在 事件檢視器檢視這些事件。 如需詳細資訊,請參閱 追蹤 WMI 活動

將分離提供者的 HostingModel 屬性設定為 「Decoupled:Com」。。 從 .NET Framework 中的 Microsoft.Management.Infrastructure 新增檢測類別所建立的提供者會分離提供者。 (不再支援 System.Management.Instrumentation 。)如需建立分離提供者的詳細資訊,請參閱 在應用程式中納入提供者。

主控模型是在代表您提供者之 __Win32Provider 實例的 HostingModel 屬性中指定

設定提供者的裝載模型

  1. 在定義提供者的MOF檔案中,建立 __Win32Provider實例。

  2. 將名稱指派給 Name 屬性中的提供者,並將提供者 COM 物件的類別識別碼 (CLSID) 指派給 Clsid 屬性。

    下列程式代碼範例會將名稱指派給 Name 屬性,並將提供者 COM 物件的 CSLID 指派給 Clsid 屬性。

    Instance of __Win32Provider as $NewProvider
    {
        Name = "MyProvider";
        Clsid = "{.......}";
    }
    
  3. 將適當的共享主機值指派給 HostingModel 屬性。 共用主機值,例如 「NetworkServiceHost」 定義於 MSFT_Providers 類別的 HostingSpecification 屬性中。

    下列程式代碼範例會將共用主機值指派給 HostingModel 屬性。

    HostingModel = "NetworkServiceHost";
    

下列程式代碼範例示範如何在 NetworkServiceHost 中註冊提供者。

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost";
}

如果您有多個提供者,您可以藉由註冊提供者將其分組為特定服務主機,使其位於特定實例中。

下列程式代碼範例也會在 NetworkServiceHost 中註冊提供者。 MSFT_Providers 類別會定義兩個值的值,這些值結合以建立__Win32Provider HostingModel 屬性。 在範例中,“NetworkServiceHost” 值來自MSFT_ProvidersHostingSpecification 属性,而 “LocalServiceHost” 則來自 HostingGroup 屬性。

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost:MySharedHost";
}

未分離且裝載於 Wmiprvse 程式中的提供者有特殊開發問題。 如需詳細資訊,請參閱 偵錯提供者

如果您要撰寫包含屬性或類別提供者註冊的提供者,並非所有線程模型都能運作。 如需詳細資訊,請參閱 選擇正確的註冊

In-Process 提供者的 HostingModel 值

下列清單列出在Wmiprvse.exe進程中執行的提供者,在 __Win32Provider 實例中使用的提供者模型值。

__Win32Provider.HostingModel 中的 描述
SelfHost 提供者會開始使用本地伺服器實作,而不是進程內。 提供者執行之進程的安全性內容會決定提供者安全性內容。
LocalSystemHost 提供者,如果實作為同進程,則會載入到在LocalSystem內容下執行的共用提供者主機。 從 Windows Vista 開始,如果 WMI 提供者的 HostingModel__Win32Provider,LocalSystemHost 不再是預設裝載模型。HostingModel 屬性未指定。 如需詳細資訊,請參閱 裝載模型的安全性。
LocalSystemHostOrSelfHost 提供者會自我裝載或載入至在LocalSystem帳戶下執行的Wmiprvse.exe進程。 由於 LocalSystem 是高度特殊許可權的帳戶,因此會在安全性 NT 事件記錄檔中產生專案,以通知系統管理員此信任狀態中執行的提供者。
NetworkServiceHost 提供者,如果實作為同進程,則會載入到在 NetworkService 帳戶下執行的Wmiprvse.exe進程。 從 Windows Vista 開始,如果 WMI 提供者的 HostingModel__Win32Provider,這是預設裝載模型。HostingModel 屬性未指定。 如需詳細資訊,請參閱 裝載模型的安全性。
NetworkServiceHost 具有有限的許可權,因此可降低提高許可權攻擊的可能性。 如果提供者只在本機計算機內運作,則將 HostingModel 屬性設定LocalServiceHost。
NetworkServiceHostOrSelfHost 提供者會自我裝載或載入到在 NetworkService 帳戶下執行的WmiPrvse.exe進程。 當 __Win32Provider 中的 HostingModel 屬性為 NULL,NetworkServiceHostOrSelfHost 是預設組態。 因為 NetworkServiceHostOrSelfHost 是預設值,舊版作業系統的提供者可以繼續在 Windows Vista、Windows Server 2008 和更新版本的操作系統中運作。
LocalServiceHost 提供者,如果實作為同進程,則會載入至在LocalService帳戶下執行的Wmiprvse.exe進程。 這是服務的建議裝載模型,因為 LocalService 的許可權有限。

分離提供者的 HostingModel 值

下列清單列出分離提供者的提供者裝載模型值。

分離:Com

提供者是一個分離的提供者,裝載於另一個進程,而該進程是 WMI 的用戶端。

下列範例顯示 HostingModel 屬性的 FoldIdentity 規範設定為 FALSE,這可讓提供者模擬用戶端。

Decoupled:Com:FoldIdentity(FALSE)

如果未指定 FoldIdentity,則 FoldIdentity 值預設會設定為 TRUE 。 基於安全性考慮,建議您不要指定 FoldIdentity(FALSE),因為具有委派仿真的流氓應用程式可能會影響整個網域。

下列範例示範 以建議方式設定 HostingModel 屬性,相當於設定 FoldIdentity(TRUE)。

Decoupled:Com

分離:Noncom

僅限內部使用。 不支援。

裝載模型的安全性

在大部分情況下,LocalSystem 是不必要的,而且 NetworkServiceHost 內容更合適。 大部分的 WMI 提供者都必須模擬用戶端安全性內容,才能代表 WMI 用戶端執行要求的作業。 從 Windows Vista 開始,缺少裝載模型定義的 WMI 提供者會執行,就像在 LocalSystem執行一樣,將無法正常執行。 若要更正這種情況,請變更預期的裝載模型,並藉由模擬WMI用戶端,確保WMI提供者程式代碼在用戶端安全性內容中執行作業。 LocalSystem 很少是需求。 如果您的提供者必須具有該層級的許可權,請在MOF檔案中使用下列語句指定裝載模型。

HostingModel=LocalSystemHost

選擇正確的註冊

存取 WMI 命名空間

保護 WMI 命名空間

提供者設定和疑難解答類別

MSFT_Providers

維護 WMI 安全性