Método IClientSecurity::SetBlanket (objidl.h)

Establece la información de autenticación (la manta de seguridad) que se usará para realizar llamadas en el proxy especificado.

Esta configuración invalida la configuración predeterminada del proceso para el proxy especificado. Al llamar a este método, se cambian los valores de seguridad de todos los demás usuarios del proxy especificado.

Sintaxis

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

Parámetros

[in] pProxy

Puntero al proxy.

[in] dwAuthnSvc

El servicio de autenticación. Se trata de un único valor tomado de la lista de constantes del servicio de autenticación. Si no se requiere autenticación, use RPC_C_AUTHN_NONE. Si se especifica RPC_C_AUTHN_DEFAULT, COM seleccionará un servicio de autenticación después de su algoritmo de negociación general de seguridad normal.

[in] dwAuthzSvc

El servicio de autorización. Se trata de un único valor tomado de la lista de constantes de autorización. Si se especifica RPC_C_AUTHZ_DEFAULT, COM seleccionará un servicio de autorización después de su algoritmo de negociación de manta de seguridad normal. Si NTLMSSP, Kerberos o Schannel se usa como servicio de autenticación, RPC_C_AUTHZ_NONE debe usarse como servicio de autorización.

[in] pServerPrincName

Nombre principal del servidor. 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 parámetro 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, si se especifica NULL , no se restablecerá el nombre principal del servidor en el proxy, sino que 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. Se trata de un único valor tomado de la lista de constantes de nivel de autenticación. Si se especifica RPC_C_AUTHN_LEVEL_DEFAULT, COM elegirá un nivel de autenticación después de su algoritmo de negociación de manta de seguridad normal. Si este valor se establece en RPC_C_AUTHN_LEVEL_NONE, el servicio de autenticación debe ser RPC_C_AUTHN_NONE. Cada servicio de autenticación puede optar por usar un nivel de autenticación de seguridad mayor que el especificado.

[in] dwImpLevel

Nivel de suplantación. Se trata de un único valor tomado de la lista de constantes de nivel de suplantación. Si se especifica RPC_C_IMP_LEVEL_DEFAULT, COM elegirá un nivel de suplantación después de su algoritmo de negociación de manta de seguridad normal. Si usa NTLMSSP de forma remota, este valor debe ser RPC_C_IMP_LEVEL_IMPERSONATE o RPC_C_IMP_LEVEL_IDENTIFY. Al usar NTLMSSP en el mismo equipo, también se admite RPC_C_IMP_LEVEL_DELEGATE. Para Kerberos, este valor puede ser RPC_C_IMP_LEVEL_IDENTIFY, RPC_C_IMP_LEVEL_IMPERSONATE o RPC_C_IMP_LEVEL_DELEGATE. Para Schannel, este valor debe ser RPC_C_IMP_LEVEL_IMPERSONATE.

[in] pAuthInfo

Valor de RPC_AUTH_IDENTITY_HANDLE que indica la identidad del cliente. Este parámetro no se usa para las llamadas en el mismo equipo. Si pAuthInfo es NULL, COM usa la identidad de proxy actual, que es el token de proceso, el token de suplantación o la identidad de autenticación de la función CoInitializeSecurity . Si el identificador no es NULL, se usa esa identidad. El formato de la estructura a la que hace referencia el identificador depende del proveedor del servicio de autenticación.

Para NTLMSSP o Kerberos, la estructura es una estructura SEC_WINNT_AUTH_IDENTITY o SEC_WINNT_AUTH_IDENTITY_EX . Si el cliente obtiene las credenciales establecidas en el proxy mediante una llamada a CoQueryProxyBlanket, debe asegurarse de que la memoria permanece válida y sin cambios hasta que se establezca una identidad diferente en el proxy o en todos los servidores proxy del objeto.

Si este parámetro es NULL, COM 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 contenga el certificado X.509 del cliente o 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, COM seleccionará la información de autenticación después de su algoritmo de negociación general de seguridad normal.

SetBlanket devolverá un error si se establece pAuthInfo y se establece una de las marcas de ocultación en dwCapabilities.

[in] dwCapabilities

Funcionalidades de este proxy. Las marcas de funcionalidad se definen en la enumeración EOLE_AUTHENTICATION_CAPABILITIES . Las únicas marcas que se pueden establecer a través de este método 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 indican marcas de funcionalidad distintas de las mencionadas aquí, SetBlanket devolverá un error.

Valor devuelto

Este método puede devolver los siguientes valores.

Código devuelto Descripción
S_OK
El método se completó correctamente.
E_INVALIDARG
Uno o varios argumentos no son válidos.

Comentarios

SetBlanket establece la información de autenticación que se usará para realizar llamadas en el proxy de interfaz especificado. Los valores especificados aquí invalidan los valores elegidos por la seguridad automática. Al llamar a este método, se cambian los valores de seguridad de todos los demás usuarios del proxy especificado. Si desea que los cambios se apliquen solo a una instancia determinada de un proxy, llame a IClientSecurity::CopyProxy para realizar una copia privada del proxy y, a continuación, llame a SetBlanket en la copia.

Cada vez que se llama a este método, DCOM establecerá la identidad en el proxy y las llamadas futuras realizadas mediante este proxy usarán esta identidad. Las llamadas en curso cuando se llama a SetBlanket usarán la información de autenticación en el proxy en el momento en que se inició la llamada. Si pAuthInfo es NULL, la identidad de proxy tiene como valor predeterminado el token de proceso actual (a menos que se haya especificado una identidad de autenticación en una llamada a CoInitializeSecurity). Consulte Ocultar para obtener información sobre cómo afectan las marcas de ocultación al proxy cuando pAuthInfo es NULL.

De forma predeterminada, COM elegirá el primer servicio de autenticación y servicio de autorización disponible en los equipos cliente y servidor y el nombre principal que el servidor registró para ese servicio de autenticación. Actualmente, COM no probará otro servicio de autenticación si se produce un error en el primero.

Cuando se especifica la constante predeterminada para dwImpLevel en SetBlanket, el parámetro tiene como valor predeterminado el valor especificado en CoInitializeSecurity. Si no se llama a CoInitializeSecurity , el valor predeterminado es RPC_C_IMP_LEVEL_IDENTIFY.

El valor inicial de dwAuthnLevel en un proxy será el mayor del valor establecido en la llamada del cliente a CoInitializeSecurity y la llamada del servidor a CoInitializeSecurity. Para cualquier proceso que no llamó a CoInitializeSecurity, el nivel de autenticación predeterminado es RPC_C_AUTHN_CONNECT.

El nivel de autenticación y suplantación predeterminados para los procesos que no llaman a CoInitializeSecurity se pueden establecer con DCOMCNFG.

Si se especifica EOAC_DEFAULT para dwCapabilities, se usarán las funcionalidades válidas de CoInitializeSecurity . Si no se llamó a CoInitializeSecurity , se usará EOAC_NONE para la marca de funcionalidades.

Si se llama a SetBlanket simultáneamente en dos subprocesos en el mismo proxy, solo se aplicará un conjunto de cambios. Si Se llama a SetBlanket y CRpcOptions::Set simultáneamente en dos subprocesos del mismo proxy, se pueden aplicar ambos cambios o solo se puede aplicar uno.

La información de seguridad no se puede establecer en interfaces locales, como la interfaz IClientSecurity . Sin embargo, dado que esa interfaz solo se admite localmente, no es necesario tener seguridad. IUnknown e IMultiQI son casos especiales. La implementación de ubicación realiza llamadas remotas para admitir estas interfaces. SetBlanket se puede usar para IUnknown. IMultiQI usará la configuración de seguridad en IUnknown.

Para cambiar un parámetro SetBlanket sin tener que tratar con los demás, puede especificar las constantes predeterminadas para los demás parámetros. Las aplicaciones pueden cambiar un parámetro (como el nivel de autenticación) y omitir los demás parámetros, incluido el servicio de autenticación, estableciendo todos los demás parámetros en las constantes predeterminadas.

Tenga en cuenta que es importante establecer todos los parámetros sin usar en las constantes predeterminadas porque el valor predeterminado a menudo no es obvio. En concreto, si establece el servicio de autenticación en el valor predeterminado, debe establecer la información de autenticación y el nombre principal en el valor predeterminado. Las razones de esto son dos veces: en primer lugar, el tipo de información de autenticación depende del servicio de autenticación que elija DCOM. En segundo lugar, dado que DCOM necesita pasar información de autenticación compleja para determinados servicios de autenticación, si establece el servicio de autenticación en predeterminado y la información de autenticación en NULL, es posible que obtenga una configuración de seguridad que no funcionará.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado objidl.h (incluir ObjIdl.h)

Consulte también

CoQueryProxyBlanket

CoSetProxyBlanket

IClientSecurity