使用 CoInitializeSecurity 設定 Process-Wide 安全性
CoInitializeSecurity 函式可讓您透過程式設計方式設定應用程式的安全性來控制複雜的安全性案例。 本主題描述您可能使用 CoInitializeSecurity 的案例,並提供一些使用方式的詳細數據。
您可能想要使用 CoInitializeSecurity 在程式中設定全進程安全性的原因有很多。 例如,雖然您可以使用 dcomcnfg.exe來設定應用程式的驗證層級和存取權限,但電腦的預設模擬層次可能不是您所需的程序。 變更此程式設定的唯一方法是呼叫 CoInitializeSecurity。
如果您想要使用 Schannel 安全性提供者,您必須在呼叫 CoInitializeSecurity時將其指定為驗證服務。
另一個以程式設計方式設定全進程安全性的常見案例是,當您想要為整個進程設定預設安全性,但該進程內有一或多個對象公開具有特殊安全性需求的介面。 在此情況下,您可以呼叫 CoInitializeSecurity 來設定程式的安全性,讓 COM 能夠處理大部分的安全性檢查,而且您可以呼叫其他方法來設定具有特殊安全性需求的物件安全性。 在介面 Proxy 層級 設定安全性描述呼叫這些方法和函式。
如果您的應用程式具有非常特殊的安全性需求,例如允許特定群組根據一天的時間存取不同的物件,您可能想要以程式設計方式處理所有安全性,確保 COM 完全不會自動檢查您。 若要這樣做,您必須呼叫 CoInitializeSecurity、將 dwAuthnLevel 參數設定為 none,並將 pVoid 參數設定為 NULL。 如果您有自己的安全性套件,您也必須在 pAuthnSvc 參數中註冊您的安全性套件。 然後,您可以透過調用代理層級的介面和介面代理層級設定安全性中所述的函式,以程式化方式管理所有的安全性。
CoInitializeSecurity 提供一組豐富的功能。 如果您呼叫 CoInitializeSecurity,則會忽略登錄值,並改用您傳入呼叫的安全性初始化值。 視您想要的結果而定,第一個參數 pVoid可以指向三種不同類型的值:SECURITY_DESCRIPTOR、IAccessControl 物件或 AppID 的指標。 在大多數情況下,您將使用 Windows 函式來建立 SECURITY_DESCRIPTOR,而該描述符由 pVoid 指向。
不過,pVoid 也可以指向 IAccessControl 物件。
若要指出您要將 IAccessControl對象傳遞給 pVoidCoInitializeSecurity,您必須將EOAC_ACCESS_CONTROL值傳遞至 dwCapabilities 參數。 由於 CoInitializeSecurity 快取存取檢查的結果,因此在呼叫 CoInitializeSecurity 之後,不得變更訪問控制清單。
您可以傳遞至 pVoid 參數的另一種值類型是 GUID 的指標,這是應用程式的 AppID。 如果 pVoid 是 AppID 的指標,您必須在 pCapabilities 參數中指定EOAC_APPID,讓函式知道 pVoid 中預期的值。 如果 pVoid 指向 AppID,CoInitializeSecurity 只會使用登錄檔中的驗證值,並忽略 CoInitializeSecurity的所有其他參數。
相關主題