다음을 통해 공유


CoInitializeSecurity를 사용하여 Process-Wide 보안 설정

CoInitializeSecurity 함수를 사용하면 프로그래밍 방식으로 애플리케이션에 대한 보안을 설정하여 복잡한 보안 시나리오를 제어할 수 있습니다. 이 항목에서는 CoInitializeSecurity 를 사용할 수 있는 시나리오에 대해 설명하고 사용 방법에 대한 몇 가지 세부 정보를 제공합니다.

CoInitializeSecurity를 사용하여 프로그램 내에서 프로세스 전체 보안을 설정할 수 있는 몇 가지 이유가 있습니다. 예를 들어 dcomcnfg.exe 사용하여 애플리케이션에 대한 인증 수준 및 액세스 권한을 설정할 수 있지만 컴퓨터의 기본 가장 수준은 프로세스에 원하는 수준이 아닐 수 있습니다. 프로세스에 대해 이 설정을 변경하는 유일한 방법은 CoInitializeSecurity를 호출하는 것입니다.

Schannel 보안 공급자를 사용하려면 CoInitializeSecurity 호출에서 인증 서비스로 지정해야 합니다.

프로그래밍 방식으로 프로세스 전체 보안을 설정할 수 있는 또 다른 일반적인 시나리오는 전체 프로세스에 대한 기본 보안을 설정하려고 하지만 해당 프로세스 내에 특수 보안 요구 사항이 있는 인터페이스를 노출하는 하나 이상의 개체가 있는 경우입니다. 이 경우 CoInitializeSecurity 를 호출하여 프로세스에 대한 보안을 설정하여 COM이 대부분의 보안 검사를 처리할 수 있도록 하고, 다른 메서드를 호출하여 특별한 보안 요구 사항이 있는 개체에 대한 보안을 설정할 수 있습니다. 이러한 메서드 및 함수 호출은 인터페이스 프록시 수준에서 보안 설정에 설명되어 있습니다.

특정 그룹이 시간에 따라 다른 개체에 액세스할 수 있도록 허용하는 등 애플리케이션에 매우 특수한 보안 요구 사항이 있는 경우 모든 보안을 프로그래밍 방식으로 처리하여 COM에서 자동으로 확인하지 않도록 하는 것이 좋습니다. 이렇게 하려면 CoInitializeSecurity를 호출하고 dwAuthnLevel 매개 변수를 none으로 설정하고 pVoid 매개 변수를 NULL로 설정해야 합니다. 고유한 보안 패키지가 있는 경우 pAuthnSvc 매개 변수에도 등록해야 합니다. 그런 다음 인터페이스 프록시 수준에서 보안 설정에 설명된 프록시 수준 인터페이스 및 함수에 대한 호출을 통해 프로그래밍 방식으로 모든 자체 보안을 처리할 수 있습니다.

CoInitializeSecurity 는 다양한 기능 집합을 제공합니다. CoInitializeSecurity를 호출하면 레지스트리 값이 무시되고 호출에 전달하는 보안 초기화 값이 대신 사용됩니다. 원하는 결과에 따라 첫 번째 매개 변수 인 pVoid는 세 가지 유형의 값, 즉 SECURITY_DESCRIPTOR , IAccessControl 개체 또는 AppID에 대한 포인터를 가리킬 수 있습니다. 대부분의 경우 Windows 함수를 사용하여 pVoid가 가리키는 SECURITY_DESCRIPTOR 만듭니다.

그러나 pVoidIAccessControl 개체를 가리킬 수도 있습니다.

IAccessControl 개체를 pVoid에 전달하고 있음을 CoInitializeSecurity에 나타내려면 dwCapabilities 매개 변수에 EOAC_ACCESS_CONTROL 값을 전달해야 합니다. CoInitializeSecurity는 액세스 검사 결과를 캐시하므로 CoInitializeSecurity를 호출한 후 액세스 제어 목록을 변경하면 안 됩니다.

pVoid 매개 변수에 전달할 수 있는 또 다른 형식의 값은 애플리케이션의 AppID인 GUID에 대한 포인터입니다. pVoid가 AppID에 대한 포인터인 경우 pVoid에서 예상되는 값을 함수가 알 수 있도록 pCapabilities 매개 변수에 EOAC_APPID 지정해야 합니다. pVoid가 AppID를 가리키는 경우 CoInitializeSecurity는 인증 값에 레지스트리만 사용하고 CoInitializeSecurity에 대한 다른 모든 매개 변수를 무시합니다.

Process-Wide 보안 설정