다음을 통해 공유


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 함수를 사용하여 SECURITY_DESCRIPTOR를 생성하고, 이를 pVoid가 가리키게 합니다.

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

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

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

설정 Process-Wide 보안