다음을 통해 공유


CoSetProxyBlanket 함수(combaseapi.h)

지정된 프록시에서 호출하는 데 사용할 인증 정보를 설정합니다. IClientSecurity::SetBlanket에 대한 도우미 함수입니다.

구문

HRESULT CoSetProxyBlanket(
  [in]           IUnknown                 *pProxy,
  [in]           DWORD                    dwAuthnSvc,
  [in]           DWORD                    dwAuthzSvc,
  [in, optional] OLECHAR                  *pServerPrincName,
  [in]           DWORD                    dwAuthnLevel,
  [in]           DWORD                    dwImpLevel,
  [in, optional] RPC_AUTH_IDENTITY_HANDLE pAuthInfo,
  [in]           DWORD                    dwCapabilities
);

매개 변수

[in] pProxy

설정할 프록시입니다.

[in] dwAuthnSvc

사용할 인증 서비스입니다. 가능한 값 목록은 인증 서비스 상수를 참조하세요. 인증이 필요하지 않은 경우 RPC_C_AUTHN_NONE 사용합니다. RPC_C_AUTHN_DEFAULT 지정되면 DCOM은 일반적인 보안 담요 협상 알고리즘에 따라 인증 서비스를 선택합니다.

[in] dwAuthzSvc

사용할 권한 부여 서비스입니다. 가능한 값 목록은 권한 부여 상수를 참조하세요. RPC_C_AUTHZ_DEFAULT 지정되면 DCOM은 일반적인 보안 일괄 협상 알고리즘에 따라 권한 부여 서비스를 선택합니다. NTLMSSP, Kerberos 또는 Schannel이 인증 서비스로 사용되는 경우 RPC_C_AUTHZ_NONE 권한 부여 서비스로 사용해야 합니다.

[in, optional] pServerPrincName

인증 서비스와 함께 사용할 서버 보안 주체 이름입니다. COLE_DEFAULT_PRINCIPAL 지정된 경우 DCOM은 보안 담요 협상 알고리즘을 사용하여 보안 주체 이름을 선택합니다. Kerberos가 인증 서비스로 사용되는 경우 이 값은 NULL이 아니어야 합니다. 서버의 올바른 보안 주체 이름이어야 합니다. 그렇지 않으면 호출이 실패합니다.

Schannel을 인증 서비스로 사용하는 경우 이 값은 보안 주체 이름에 설명된 msstd 또는 fullsic 양식 중 하나이거나 상호 인증을 원하지 않는 경우 NULL 이어야 합니다.

일반적으로 NULL 을 지정해도 프록시의 서버 보안 주체 이름은 다시 설정되지 않습니다. 오히려 이전 설정은 유지됩니다. 이전에 설정한 보안 주체 이름이 새로 선택한 인증 서비스에 유효할 것이라는 보장은 없으므로 프록시에 대해 다른 인증 서비스를 선택할 때 NULLpServerPrincName 으로 사용할 때는 주의해야 합니다.

[in] dwAuthnLevel

사용할 인증 수준입니다. 가능한 값 목록은 인증 수준 상수를 참조하세요. RPC_C_AUTHN_LEVEL_DEFAULT 지정된 경우 DCOM은 일반적인 보안 일괄 협상 알고리즘에 따라 인증 수준을 선택합니다. 이 값이 없으면 인증 서비스도 없음이어야 합니다.

[in] dwImpLevel

사용할 가장 수준입니다. 가능한 값 목록은 가장 수준 상수를 참조하세요. RPC_C_IMP_LEVEL_DEFAULT 지정하면 DCOM은 일반적인 보안 담요 협상 알고리즘에 따라 가장 수준을 선택합니다. NTLMSSP가 인증 서비스인 경우 이 값은 RPC_C_IMP_LEVEL_IMPERSONATE 또는 RPC_C_IMP_LEVEL_IDENTIFY 합니다. NTLMSSP는 동일한 컴퓨터에서 RPC_C_IMP_LEVEL_DELEGATE(대리자 수준 가장)도 지원합니다. Schannel이 인증 서비스인 경우 이 매개 변수는 RPC_C_IMP_LEVEL_IMPERSONATE 합니다.

[in, optional] pAuthInfo

클라이언트의 ID를 설정하는 RPC_AUTH_IDENTITY_HANDLE 값에 대한 포인터입니다. 핸들에서 참조하는 구조체의 형식은 인증 서비스의 공급자에 따라 달라집니다.

동일한 컴퓨터에서 호출의 경우 RPC는 제공된 자격 증명을 사용하여 사용자를 로그하고 메서드 호출에 결과 토큰을 사용합니다.

NTLMSSP 또는 Kerberos의 경우 구조체는 SEC_WINNT_AUTH_IDENTITY 또는 SEC_WINNT_AUTH_IDENTITY_EX 구조체입니다. 클라이언트는 API를 호출한 후 pAuthInfo 를 삭제할 수 있습니다. RPC는 pAuthInfo 포인터의 복사본을 유지하지 않으며 클라이언트는 나중에 CoQueryProxyBlanket 메서드에서 검색할 수 없습니다.

이 매개 변수가 NULL인 경우 DCOM은 현재 프록시 ID(프로세스 토큰 또는 가장 토큰)를 사용합니다. 핸들이 구조를 참조하는 경우 해당 ID가 사용됩니다.

Schannel의 경우 이 매개 변수는 클라이언트의 X.509 인증서를 포함하는 CERT_CONTEXT 구조체에 대한 포인터이거나 클라이언트가 서버에 익명으로 연결하려는 경우 NULL 이어야 합니다. 인증서가 지정된 경우 호출자는 개체에 대한 프록시가 현재 아파트에 있는 한 인증서를 해제해서는 안 됩니다.

Snego의 경우 이 멤버는 NULL이거나 , SEC_WINNT_AUTH_IDENTITY 구조를 가리키거나, SEC_WINNT_AUTH_IDENTITY_EX 구조를 가리킵니다. NULL인 경우 Snego는 클라이언트 컴퓨터에서 사용할 수 있는 인증 서비스 목록을 선택합니다. SEC_WINNT_AUTH_IDENTITY_EX 구조를 가리키는 경우 구조체의 PackageList 멤버는 쉼표로 구분된 인증 서비스 이름 목록이 포함된 문자열을 가리킨 다음 PackageListLength 멤버가 PackageList 문자열의 바이트 수를 제공해야 합니다. PackageListNULL이면 Snego를 사용하는 모든 호출이 실패합니다.

이 매개 변수에 대해 COLE_DEFAULT_AUTHINFO 지정한 경우 DCOM은 일반적인 보안 일괄 협상 알고리즘에 따라 인증 정보를 선택합니다.

pAuthInfo가 설정되고 은폐 플래그 중 하나가 dwCapabilities 매개 변수에 설정된 경우 CoSetProxyBlanket이 실패합니다.

[in] dwCapabilities

이 프록시의 기능입니다. 가능한 값 목록은 EOLE_AUTHENTICATION_CAPABILITIES 열거형을 참조하세요. 이 함수를 통해 설정할 수 있는 유일한 플래그는 EOAC_MUTUAL_AUTH, EOAC_STATIC_CLOAKING, EOAC_DYNAMIC_CLOAKING, EOAC_ANY_AUTHORITY(이 플래그는 사용되지 않음), EOAC_MAKE_FULLSIC 및 EOAC_DEFAULT. pAuthInfo가 설정되지 않고 Schannel이 인증 서비스가 아닌 경우 EOAC_STATIC_CLOAKING 또는 EOAC_DYNAMIC_CLOAKING 설정할 수 있습니다. 자세한 내용은 은폐를 참조하세요. 여기에 언급된 기능 플래그 이외의 기능 플래그가 설정되면 CoSetProxyBlanket 이 실패합니다.

반환 값

이 함수는 다음 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
함수가 성공했습니다.
E_INVALIDARG
하나 이상의 인수가 잘못되었습니다.

설명

CoSetProxyBlanket 은 지정된 프록시에서 호출하는 데 사용할 인증 정보를 설정합니다. 이 함수는 다음과 같은 일반적인 호출 시퀀스를 캡슐화합니다(오류 처리 제외).

    pProxy->QueryInterface(IID_IClientSecurity, (void**)&pcs);
    pcs->SetBlanket(pProxy, dwAuthnSvc, dwAuthzSvc, pServerPrincName, 
        dwAuthnLevel, dwImpLevel, pAuthInfo, dwCapabilities);
    pcs->Release();

이 시퀀스는 프록시 에서 QueryInterface 를 호출하여 IClientSecurity에 대한 포인터를 가져와서 결과 포인터를 사용하여 IClientSecurity::SetBlanket 을 호출한 다음 포인터를 해제합니다.

요구 사항

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

추가 정보

CoQueryProxyBlanket

IClientSecurity::SetBlanket

COM의 보안

인터페이스 프록시 수준에서 보안 설정