共用方式為


透過登錄設定全進程安全性

如果您想要設定整個程式的安全性,一個解決方案是在登錄中設定您想要的安全性層級。 如果您的應用程式無法呼叫 CoInitializeSecurity ,或者如果您不想使用程式設計安全性,這可能是一個很好的選項。 如果您決定使用登錄來設定全進程安全性,您應該注意,如果您在程式 COM 內呼叫 CoInitializeSecurity 將會使用 CoInitializeSecurity 中的值,並忽略登錄值。

在應用程式的登入設定安全性有兩種方式:

  • 您可以使用 Dcomcnfg.exe,提供簡單的使用者介面來修改安全性值。 所有 COM 伺服器都可以使用 Dcomcnfg.exe進行設定。 如需詳細資訊,請參閱 使用 DCOMCNFG 設定全進程安全性。 不過,除非用戶端建立 GUID 並在登錄中輸入 GUID,否則用戶端應用程式通常不會出現在Dcomcnfg.exe中。
  • 您可以在應用程式的 AppID 金鑰下設定安全性值。 本主題的其餘部分說明如何使用AppID機碼在登錄中設定安全性。

AppID 是 GUID,代表一或多個類別的伺服器進程。 每個類別都與完全相同的一個 AppID 相關聯,而且只能將 AppID 指派給 EXE。 DLL 不會取得 AppID,除非它們是在 Surrogate 中執行,否則它是具有 AppID 的代理程式。 如果多個 DLL 載入代理,則每個代理只有一個 AppID。

對於某些 COM 伺服器,註冊程式代碼會產生 AppID,並將專案放在登錄中,將 AppID 對應至可執行文件的名稱。 但某些 COM 伺服器不提供這項功能。 不過,如果伺服器的註冊碼在執行dcomcnfg.exe時新增 HKCR\CLSID{ServerCLSID}\LocalServer32 的專案,它會自動新增 CLSID 的 AppID。

對於不是伺服器的 COM 用戶端,不會建立此對應,因為永遠不會註冊用戶端。 因此,若要使用AppID機碼設定安全性,客戶端必須使用登錄函式或使用 regedit,以程式設計方式建立必要的登錄專案。

如果您決定在 AppID 機碼下的登錄中設定全進程安全性,請注意,您可以在 AppID 機碼下設定兩個具名值,而不需要系統管理員許可權:

AuthenticationLevelAccessPermission 值會獨立設定,且具有個別的預設值。 如果 AuthenticationLevel 值不存在,則 LegacyAuthenticationLevel 值會當做預設值使用。 同樣地,如果 AccessPermission 值不存在, 則 DefaultAccessPermission 值會當做預設值使用。 不過, AuthenticationLevelAccessPermission 值會以下列方式相互關聯:

  • 如果 AuthenticationLevel 為 none,則會忽略該應用程式的 AccessPermissionDefaultAccessPermission 值。
  • 如果 AuthenticationLevel 不存在且 LegacyAuthenticationLevel 為 none,則會忽略該應用程式的 AccessPermission 和 DefaultAccessPermission 值。

設定全進程安全性