레지스트리를 통해 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 키 아래에 있다는 점에 유의하세요.
AuthenticationLevel 및 AccessPermission 값은 독립적으로 설정되며 별도의 기본값을 가집니다. AuthenticationLevel 값이 없으면 LegacyAuthenticationLevel 값이 기본값으로 사용됩니다. 마찬가지로 AccessPermission 값이 없으면 DefaultAccessPermission 값이 기본값으로 사용됩니다. 그러나 AuthenticationLevel 및 AccessPermission 값은 다음과 같은 방식으로 상호 관련됩니다.
- AuthenticationLevel이 없는 경우 해당 애플리케이션에 대해 AccessPermission 및 DefaultAccessPermission 값이 무시됩니다.
- AuthenticationLevel이 존재하지 않고 LegacyAuthenticationLevel이 없는 경우 해당 애플리케이션에 대해 AccessPermission 및 DefaultAccessPermission 값이 무시됩니다.
관련 항목