Función CoSetProxyBlanket (combaseapi.h)

Establece la información de autenticación que se usará para realizar llamadas en el proxy especificado. Se trata de una función auxiliar para IClientSecurity::SetBlanket.

Sintaxis

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
);

Parámetros

[in] pProxy

Proxy que se va a establecer.

[in] dwAuthnSvc

Servicio de autenticación que se va a usar. Para obtener una lista de los valores posibles, consulte Constantes de servicio de autenticación. Use RPC_C_AUTHN_NONE si no se requiere autenticación. Si se especifica RPC_C_AUTHN_DEFAULT, DCOM seleccionará un servicio de autenticación después de su algoritmo de negociación de manta de seguridad normal.

[in] dwAuthzSvc

Servicio de autorización que se va a usar. Para obtener una lista de los valores posibles, consulte Constantes de autorización. Si se especifica RPC_C_AUTHZ_DEFAULT, DCOM seleccionará un servicio de autorización después de su algoritmo de negociación de manta de seguridad normal. RPC_C_AUTHZ_NONE se debe usar como servicio de autorización si NTLMSSP, Kerberos o Schannel se usa como servicio de autenticación.

[in, optional] pServerPrincName

Nombre principal del servidor que se va a usar con el servicio de autenticación. Si se especifica COLE_DEFAULT_PRINCIPAL, DCOM elegirá un nombre principal mediante su algoritmo de negociación de manta de seguridad. Si Kerberos se usa como servicio de autenticación, este valor no debe ser NULL. Debe ser el nombre principal correcto del servidor o se producirá un error en la llamada.

Si Schannel se usa como servicio de autenticación, este valor debe ser uno de los formularios msstd o fullsic descritos en Nombres principales o NULL si no desea autenticación mutua.

Por lo general, especificar NULL no restablecerá el nombre principal del servidor en el proxy; en su lugar, se conservará la configuración anterior. Debe tener cuidado al usar NULL como pServerPrincName al seleccionar un servicio de autenticación diferente para el proxy, ya que no hay ninguna garantía de que el nombre principal establecido anteriormente sea válido para el servicio de autenticación recién seleccionado.

[in] dwAuthnLevel

Nivel de autenticación que se va a usar. Para obtener una lista de los valores posibles, consulte Constantes de nivel de autenticación. Si se especifica RPC_C_AUTHN_LEVEL_DEFAULT, DCOM elegirá un nivel de autenticación después de su algoritmo de negociación de manta de seguridad normal. Si este valor no es ninguno, el servicio de autenticación también debe ser ninguno.

[in] dwImpLevel

Nivel de suplantación que se va a usar. Para obtener una lista de los valores posibles, vea Constantes de nivel de suplantación. Si se especifica RPC_C_IMP_LEVEL_DEFAULT, DCOM elegirá un nivel de suplantación después de su algoritmo de negociación de manta de seguridad normal. Si NTLMSSP es el servicio de autenticación, este valor debe ser RPC_C_IMP_LEVEL_IMPERSONATE o RPC_C_IMP_LEVEL_IDENTIFY. NTLMSSP también admite la suplantación de nivel de delegado (RPC_C_IMP_LEVEL_DELEGATE) en el mismo equipo. Si Schannel es el servicio de autenticación, este parámetro debe ser RPC_C_IMP_LEVEL_IMPERSONATE.

[in, optional] pAuthInfo

Puntero a un valor de RPC_AUTH_IDENTITY_HANDLE que establece la identidad del cliente. El formato de la estructura a la que hace referencia el identificador depende del proveedor del servicio de autenticación.

Para las llamadas en el mismo equipo, RPC inicia sesión en el usuario con las credenciales proporcionadas y usa el token resultante para la llamada al método.

Para NTLMSSP o Kerberos, la estructura es una estructura SEC_WINNT_AUTH_IDENTITY o SEC_WINNT_AUTH_IDENTITY_EX . El cliente puede descartar pAuthInfo después de llamar a la API. RPC no mantiene una copia del puntero pAuthInfo y el cliente no puede recuperarlo más adelante en el método CoQueryProxyBlanket .

Si este parámetro es NULL, DCOM usa la identidad del proxy actual (que es el token de proceso o el token de suplantación). Si el identificador hace referencia a una estructura, se usa esa identidad.

Para Schannel, este parámetro debe ser un puntero a una estructura de CERT_CONTEXT que contiene el certificado X.509 del cliente o es NULL si el cliente desea establecer una conexión anónima con el servidor. Si se especifica un certificado, el autor de la llamada no debe liberarlo siempre que exista ningún proxy para el objeto en el apartamento actual.

Para Snego, este miembro es NULL, apunta a una estructura de SEC_WINNT_AUTH_IDENTITY o apunta a una estructura SEC_WINNT_AUTH_IDENTITY_EX . Si es NULL, Snego seleccionará una lista de servicios de autenticación basados en los disponibles en el equipo cliente. Si apunta a una estructura de SEC_WINNT_AUTH_IDENTITY_EX , el miembro PackageList de la estructura debe apuntar a una cadena que contenga una lista separada por comas de nombres de servicio de autenticación y el miembro PackageListLength debe proporcionar el número de bytes en la cadena PackageList . Si PackageList es NULL, se producirá un error en todas las llamadas que usan Snego.

Si se especifica COLE_DEFAULT_AUTHINFO para este parámetro, DCOM seleccionará la información de autenticación después de su algoritmo de negociación de manta de seguridad normal.

CoSetProxyBlanket producirá un error si se establece pAuthInfo y se establece una de las marcas de ocultación en el parámetro dwCapabilities .

[in] dwCapabilities

Funcionalidades de este proxy. Para obtener una lista de los valores posibles, consulte la enumeración EOLE_AUTHENTICATION_CAPABILITIES . Las únicas marcas que se pueden establecer a través de esta función son EOAC_MUTUAL_AUTH, EOAC_STATIC_CLOAKING, EOAC_DYNAMIC_CLOAKING, EOAC_ANY_AUTHORITY (esta marca está en desuso), EOAC_MAKE_FULLSIC y EOAC_DEFAULT. Se pueden establecer EOAC_STATIC_CLOAKING o EOAC_DYNAMIC_CLOAKING si pAuthInfo no está establecido y Schannel no es el servicio de autenticación. (Consulte Cloaking para obtener más información). Si se establecen marcas de funcionalidad distintas de las mencionadas aquí, Se producirá un error en CoSetProxyBlanket .

Valor devuelto

Esta función puede devolver los siguientes valores.

Código devuelto Descripción
S_OK
La función se realizó correctamente.
E_INVALIDARG
Uno o varios argumentos no son válidos.

Comentarios

CoSetProxyBlanket establece la información de autenticación que se usará para realizar llamadas en el proxy especificado. Esta función encapsula la siguiente secuencia de llamadas comunes (se excluye el control de errores).

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

Esta secuencia llama a QueryInterface en el proxy para obtener un puntero a IClientSecurity y, con el puntero resultante, llama a IClientSecurity::SetBlanket y, a continuación, libera el puntero.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado combaseapi.h (incluya Objbase.h)
Library Ole32.lib
Archivo DLL Ole32.dll

Consulte también

CoQueryProxyBlanket

IClientSecurity::SetBlanket

Seguridad en COM

Establecer la seguridad en el nivel de proxy de interfaz