使用 CoInitializeSecurity 設定全進程安全性

CoInitializeSecurity 函式可讓您透過程式設計方式設定應用程式的安全性來控制複雜的安全性案例。 本主題描述使用 CoInitializeSecurity 的案例,並提供使用方式的一些詳細數據。

您可能想要使用 CoInitializeSecurity 在程式中設定全進程安全性的原因有很多。 例如,雖然您可以使用 dcomcnfg.exe 來設定應用程式的驗證層級和訪問許可權,但計算機的預設模擬層級可能不是您想要的程式。 變更程序此設定的唯一方法是呼叫 CoInitializeSecurity

如果您想要使用安全通道安全性提供者,您必須在呼叫 CoInitializeSecurity 時將其指定為驗證服務。

另一個以程式設計方式設定全進程安全性的常見案例是,當您想要為整個進程設定預設安全性,但該進程內有一或多個對象公開具有特殊安全性需求的介面。 在此情況下,您可以呼叫 CoInitializeSecurity 來設定程式的安全性,讓 COM 能夠處理大部分的安全性檢查,而且您可以呼叫其他方法來為具有特殊安全性需求的對象設定安全性。 在介面 Proxy 層級設定安全性中會說明呼叫這些方法和函式。

如果您的應用程式具有非常特殊的安全性需求,例如允許特定群組根據一天的時間存取不同的物件,您可能想要以程式設計方式處理所有安全性,確保 COM 完全不會自動檢查您。 若要這樣做,您必須呼叫 CoInitializeSecurity、將 dwAuthnLevel 參數設定為 none,並將 pVoid 參數設定為 NULL 如果您有自己的安全性套件,您也需要在 pAuthnSvc 參數中註冊它。 然後,您可以透過呼叫介面 Proxy 層級設定安全性中所述的 Proxy 層級介面和函式,以程式設計方式處理您自己的所有安全性。

CoInitializeSecurity 提供一組豐富的功能。 如果您呼叫 CoInitializeSecurity,則會忽略登錄值,並改用您傳入呼叫的安全性初始化值。 視您想要的結果而定,第一個參數 pVoid 可以指向三種不同類型的值:SECURITY_DESCRIPTORIAccessControl 物件或 AppID 的指標。 在大部分情況下,您將使用 Windows 函式來建立 pVoid 指向的SECURITY_DESCRIPTOR

不過,pVoid 也可以指向 IAccessControl 物件。

若要向 CoInitializeSecurity 指出您要將 IAccessControl 物件傳遞pVoid,您必須將EOAC_ACCESS_CONTROL值傳遞至 dwCapabilities 參數。 由於 CoInitializeSecurity 會快取存取檢查的結果,因此在呼叫 CoInitializeSecurity 之後,不得變更訪問控制清單。

您可以傳遞至 pVoid 參數的另一種值類型是 GUID 的指標,也就是應用程式的 AppID。 如果 pVoid 是 AppID 的指標,您必須在 pCapabilities 參數中指定EOAC_APPID,讓函式知道 pVoid預期的值。 如果 pVoid 指向 AppID,CoInitializeSecurity 只會使用登錄進行驗證值,並忽略 CoInitializeSecurity 的所有其他參數。

設定全進程安全性