提供者裝載和安全性

__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類別會定義兩個值的值,這些值結合以建立__Win32ProviderHostingModel屬性。 在範例中,「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 (__Win32ProviderLocalSystemHost不再是預設裝載模型。未指定 HostingModel屬性) 。 如需詳細資訊,請參閱 裝載模型的安全性
LocalSystemHostOrSelfHost 提供者會自我裝載或載入本機 系統 帳戶下執行的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 如果實作為同進程,提供者會載入本機 服務 帳戶下執行的Wmiprvse.exe進程。 這是服務的建議裝載模型,因為 LocalService 具有有限的許可權。

分離提供者的 HostingModel 值

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

Decoupled:Com

提供者是裝載于個別進程中的分離提供者,這是 WMI 的用戶端。

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

Decoupled:Com:FoldIdentity(FALSE)

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

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

Decoupled:Com

Decoupled:Noncom

僅供內部使用。 不支援。

裝載模型的安全性

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

HostingModel=LocalSystemHost

選擇正確的註冊

存取 WMI 命名空間

保護 WMI 命名空間

提供者組態和疑難排解類別

MSFT_Providers

維護 WMI 安全性