레지스트리를 통해 Process-Wide 보안 설정

전체 프로세스에 대한 보안을 설정하려는 경우 한 가지 해결 방법은 레지스트리에서 원하는 보안 수준을 설정하는 것입니다. 애플리케이션 에서 CoInitializeSecurity 를 호출할 수 없거나 프로그래밍 방식 보안을 사용하지 않으려는 경우 좋은 옵션일 수 있습니다. 레지스트리를 사용하여 프로세스 차원의 보안을 설정하려는 경우 프로그램 COM 내에서 CoInitializeSecurity를 호출하는 경우 CoInitializeSecurity의 값을 사용하고 레지스트리 값을 무시한다는 점에 유의해야 합니다.

애플리케이션에 대한 레지스트리에서 보안을 설정하는 방법에는 두 가지가 있습니다.

  • 보안 값을 수정하기 위한 간단한 사용자 인터페이스를 제공하는 Dcomcnfg.exe 사용할 수 있습니다. 모든 COM 서버는 Dcomcnfg.exe 사용하여 구성할 수 있습니다. 자세한 내용은 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이 없는 경우 해당 애플리케이션에 대해 AccessPermissionDefaultAccessPermission 값이 무시됩니다.
  • AuthenticationLevel이 존재하지 않고 LegacyAuthenticationLevel이 없는 경우 해당 애플리케이션에 대해 AccessPermissionDefaultAccessPermission 값이 무시됩니다.

Process-Wide 보안 설정