共用方式為


透過註冊表設定 Process-Wide 安全性

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

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

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

AppID 是 GUID,代表一或多個類別的伺服器進程。 每個類別都與完全相同的一個 AppID 相關聯,而且只能將 AppID 指派給 EXE。 DLL 不會取得 AppID,除非它們是在代理程式中執行;在這種情況下,具有 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 不存在,且 舊版AuthenticationLevel 為無,則會忽略該應用程式的 AccessPermissionDefaultAccessPermission 值。

設定 Process-Wide 安全性