CoInitializeSecurity 함수(combaseapi.h)

보안을 등록하고 프로세스의 기본 보안 값을 설정합니다.

구문

HRESULT CoInitializeSecurity(
  [in, optional] PSECURITY_DESCRIPTOR        pSecDesc,
  [in]           LONG                        cAuthSvc,
  [in, optional] SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
  [in, optional] void                        *pReserved1,
  [in]           DWORD                       dwAuthnLevel,
  [in]           DWORD                       dwImpLevel,
  [in, optional] void                        *pAuthList,
  [in]           DWORD                       dwCapabilities,
  [in, optional] void                        *pReserved3
);

매개 변수

[in, optional] pSecDesc

서버가 호출을 수신하는 데 사용할 액세스 권한입니다. 이 매개 변수는 서버가 CoInitializeSecurity를 호출하는 경우에만 COM에서 사용됩니다. 해당 값은 AppID, IAccessControl 개체 또는 절대 형식의 SECURITY_DESCRIPTOR 세 가지 형식 중 하나에 대한 포인터입니다. 자세한 내용은 설명 부분을 참조하세요.

[in] cAuthSvc

asAuthSvc 매개 변수의 항목 수입니다. 이 매개 변수는 서버가 CoInitializeSecurity를 호출하는 경우에만 COM에서 사용됩니다. 이 매개 변수가 0이면 인증 서비스가 등록되지 않으며 서버에서 보안 호출을 받을 수 없습니다. 값 -1은 COM에 등록할 인증 서비스를 선택하도록 지시하고, 이 경우 asAuthSvc 매개 변수는 NULL이어야 합니다. 그러나 이 매개 변수가 -1인 경우 Schannel은 서버에서 인증 서비스로 선택되지 않습니다.

[in, optional] asAuthSvc

서버가 통화를 수신하는 데 사용할 인증 서비스의 배열입니다. 이 매개 변수는 서버가 CoInitializeSecurity를 호출하는 경우에만 COM에서 사용됩니다. 자세한 내용은 SOLE_AUTHENTICATION_SERVICE 참조하세요.

[in, optional] pReserved1

이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

[in] dwAuthnLevel

프로세스의 기본 인증 수준입니다. 서버와 클라이언트는 모두 CoInitializeSecurity를 호출할 때 이 매개 변수를 사용합니다. COM은 더 낮은 인증 수준으로 도착하는 호출에 실패합니다. 기본적으로 모든 프록시는 적어도 이 인증 수준을 사용합니다. 이 값에는 인증 수준 상수 중 하나가 포함되어야 합니다. 기본적으로 IUnknown 에 대한 모든 호출은 이 수준에서 수행됩니다.

[in] dwImpLevel

프록시의 기본 가장 수준입니다. 이 매개 변수의 값은 프로세스가 클라이언트인 경우에만 사용됩니다. CoInitializeSecurity에 사용되지 않는 RPC_C_IMP_LEVEL_DEFAULT 제외하면 가장 수준 상수의 값이어야 합니다.

클라이언트에서 나가는 호출은 항상 지정된 대로 가장 수준을 사용합니다. (협상되지 않습니다.) 클라이언트에 대한 수신 호출은 모든 가장 수준에 있을 수 있습니다. 기본적으로 모든 IUnknown 호출은 이 가장 수준으로 수행되므로 보안 인식 애플리케이션도 이 수준을 신중하게 설정해야 합니다. 각 인증 서비스에서 지원하는 가장 수준을 확인하려면 COM 및 보안 패키지의 인증 서비스에 대한 설명을 참조하세요. 가장 수준에 대한 자세한 내용은 가장을 참조 하세요.

[in, optional] pAuthList

SOLE_AUTHENTICATION_INFO 구조체의 배열인 SOLE_AUTHENTICATION_LIST 대한 포인터입니다. 이 목록은 클라이언트가 서버를 호출하는 데 사용할 수 있는 각 인증 서비스에 대한 정보를 나타냅니다. 이 매개 변수는 클라이언트가 CoInitializeSecurity를 호출하는 경우에만 COM에서 사용됩니다.

[in] dwCapabilities

하나 이상의 EOLE_AUTHENTICATION_CAPABILITIES 값을 설정하여 지정된 클라이언트 또는 서버의 추가 기능입니다. 이러한 값 중 일부는 동시에 사용할 수 없으며 일부 값은 특정 인증 서비스를 사용할 때 설정할 수 없습니다. 이러한 플래그에 대한 자세한 내용은 설명 섹션을 참조하세요.

[in, optional] pReserved3

이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

반환 값

이 함수는 E_INVALIDARG 표준 반환 값과 다음 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
성공을 나타냅니다.
RPC_E_TOO_LATE

CoInitializeSecurity 가 이미 호출되었습니다.

RPC_E_NO_GOOD_SECURITY_PACKAGES
asAuthSvc 매개 변수가 NULL이 아니고 목록에 있는 인증 서비스를 등록할 수 없습니다. 인증 서비스별 오류 코드에 대해 asAuthSvc 에 저장된 결과를 확인합니다.
E_OUT_OF_MEMORY
메모리가 부족합니다.

설명

CoInitializeSecurity 함수는 보안 계층을 초기화하고 지정된 값을 보안 기본값으로 설정합니다. 프로세스가 CoInitializeSecurity를 호출하지 않는 경우 COM은 인터페이스가 마샬링되거나 마샬링되지 않을 때 자동으로 호출하여 시스템 기본 보안을 등록합니다. 그때까지는 기본 보안 패키지가 등록되지 않습니다.

이 함수는 명시적으로 또는 암시적으로 프로세스당 정확히 한 번 호출됩니다. 클라이언트, 서버 또는 둘 다에서 호출할 수 있습니다. CoInitializeSecurity를 명시적으로 호출하지 않는 레거시 애플리케이션 및 기타 애플리케이션의 경우 COM은 레지스트리의 값으로 이 함수를 암시적으로 호출합니다. 레지스트리를 사용하여 프로세스 전체 보안을 설정한 다음 CoInitializeSecurity를 호출하면 AppID 레지스트리 값이 무시되고 CoInitializeSecurity 값이 사용됩니다.

CoInitializeSecurity 는 컴퓨터 전체 액세스 권한과 애플리케이션별 액세스 권한을 모두 재정의하는 데 사용할 수 있지만 컴퓨터 전체 제한 정책을 재정의하는 데는 사용할 수 없습니다.

pSecDesc가 AppID를 가리키는 경우 EOAC_APPID 플래그는 dwCapabilities로 설정해야 하며, EOAC_APPID 플래그가 설정되면 CoInitializeSecurity에 대한 다른 모든 매개 변수는 무시됩니다. CoInitializeSecurity 는 레지스트리의 AppID 키 아래에 있는 인증 수준을 찾고 이를 사용하여 기본 보안을 결정합니다. AppID 키를 사용하여 보안을 설정하는 방법에 대한 자세한 내용은 레지스트리를 통해 Process-Wide 보안 설정을 참조하세요.

pSecDescIAccessControl 개체에 대한 포인터인 경우 EOAC_ACCESS_CONTROL 플래그를 설정해야 하며 dwAuthnLevel은 아무 것도 될 수 없습니다. IAccessControl 개체는 프로세스를 호출할 수 있는 사용자를 결정하는 데 사용됩니다. DCOM은 IAccessControl추가하며 CoUninitialize가 호출될 때 릴리스합니다. IAccessControl 개체의 상태는 변경되지 않아야 합니다.

pSecDescSECURITY_DESCRIPTOR 대한 포인터인 경우 dwCapabilities에서 EOAC_APPID 또는 EOAC_ACCESS_CONTROL 플래그를 설정할 수 없습니다. SECURITY_DESCRIPTOR 소유자와 그룹을 설정해야 하며 DCOM에서 감사를 지원할 때까지 시스템 ACL은 NULL이어야 합니다. SECURITY_DESCRIPTOR DACL(임의 ACL)의 ACE (액세스 제어 항목)는 프로세스의 개체에 연결할 수 있는 호출자를 찾는 데 사용됩니다. API가 없는 DACL은 액세스를 허용하지 않지만 NULL DACL은 모든 사람의 호출을 허용합니다. ACL 및 ACL에 대한 자세한 내용은 Access Control 모델을 참조하세요. 애플리케이션은 AccessCheck(IsValidSecurityDescriptor 아님)를 호출하여 CoInitializeSecurity를 호출하기 전에 SECURITY_DESCRIPTOR 올바르게 구성되었는지 확인해야 합니다.

pSecDesc를NULL로 전달하는 것은 권장되지 않습니다. 적절한 대안은 모든 사용자를 허용하는 SECURITY_DESCRIPTOR 사용하는 것입니다. pSecDescNULL인 경우 dwCapabilities의 플래그는 다음과 같이 CoInitializeSecurity가 서버에서 사용할 액세스 권한을 정의하는 방법을 결정합니다.

  • EOAC_APPID 플래그가 설정된 경우 CoInitializeSecurity 는 레지스트리에서 애플리케이션의 .exe 이름을 조회하고 거기에 저장된 AppID를 사용합니다.
  • EOAC_ACCESS_CONTROL 플래그가 설정되면 CoInitializeSecurity 에서 오류를 반환합니다.
  • EOAC_APPID 플래그나 EOAC_ACCESS_CONTROL 플래그가 설정되지 않은 경우 CoInitializeSecurity 는 로컬 및 원격 익명 사용자를 포함한 모든 호출자를 허용합니다.
coInitializeSecurity 함수는 EOAC_APPID 플래그와 EOAC_ACCESS_CONTROL 플래그가 모두 dwCapabilities로 설정된 경우 오류를 반환합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 combaseapi.h(Objbase.h 포함)
라이브러리 Ole32.lib
DLL Ole32.dll

추가 정보

CoSetProxyBlanket

COM의 보안