Compartilhar via


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

Define as informações de autenticação (o cobertor de segurança) que serão usadas para fazer chamadas no proxy especificado.

Essa configuração substitui as configurações padrão do processo para o proxy especificado. Chamar esse método altera os valores de segurança para todos os outros usuários do proxy especificado.

Sintaxe

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

Um ponteiro para o proxy.

[in] dwAuthnSvc

O serviço de autenticação. Esse será um único valor obtido da lista de constantes de serviço de autenticação. Se nenhuma autenticação for necessária, use RPC_C_AUTHN_NONE. Se RPC_C_AUTHN_DEFAULT for especificado, o COM escolherá um serviço de autenticação seguindo seu algoritmo normal de negociação de cobertor de segurança.

[in] dwAuthzSvc

O serviço de autorização. Esse será um único valor obtido da lista de constantes de autorização. Se RPC_C_AUTHZ_DEFAULT for especificado, o COM escolherá um serviço de autorização seguindo seu algoritmo normal de negociação de cobertor de segurança. Se NTLMSSP, Kerberos ou Schannel for usado como o serviço de autenticação, RPC_C_AUTHZ_NONE deverá ser usado como o serviço de autorização.

[in] pServerPrincName

O nome da entidade de segurança do servidor. Se COLE_DEFAULT_PRINCIPAL for especificado, o DCOM escolherá um nome principal usando seu algoritmo de negociação de cobertor de segurança. Se Kerberos for usado como o serviço de autenticação, esse parâmetro deverá ser o nome principal correto do servidor ou a chamada falhará.

Se schannel for usado como o serviço de autenticação, esse valor deverá ser um dos formulários msstd ou fullsic descritos em Nomes de Entidade de Segurança ou NULL se você não quiser autenticação mútua.

Em geral, especificar NULL não redefinirá o nome da entidade de segurança do servidor no proxy, em vez disso, a configuração anterior será mantida. Você deve ter cuidado ao usar NULL como pServerPrincName ao selecionar um serviço de autenticação diferente para o proxy, pois não há garantia de que o nome da entidade de segurança definido anteriormente seria válido para o serviço de autenticação recém-selecionado.

[in] dwAuthnLevel

O nível de autenticação. Esse será um único valor obtido da lista de constantes de nível de autenticação. Se RPC_C_AUTHN_LEVEL_DEFAULT for especificado, o COM escolherá um nível de autenticação seguindo seu algoritmo normal de negociação de cobertor de segurança. Se esse valor for definido como RPC_C_AUTHN_LEVEL_NONE, o serviço de autenticação deverá ser RPC_C_AUTHN_NONE. Cada serviço de autenticação pode optar por usar um nível de autenticação de segurança mais alto do que o especificado.

[in] dwImpLevel

O nível de representação. Esse será um único valor obtido da lista de constantes de nível de representação. Se RPC_C_IMP_LEVEL_DEFAULT for especificado, COM escolherá um nível de representação seguindo seu algoritmo normal de negociação de cobertor de segurança. Se você estiver usando o NTLMSSP remotamente, esse valor deverá ser RPC_C_IMP_LEVEL_IMPERSONATE ou RPC_C_IMP_LEVEL_IDENTIFY. Ao usar o NTLMSSP no mesmo computador, também há suporte para RPC_C_IMP_LEVEL_DELEGATE. Para Kerberos, esse valor pode ser RPC_C_IMP_LEVEL_IDENTIFY, RPC_C_IMP_LEVEL_IMPERSONATE ou RPC_C_IMP_LEVEL_DELEGATE. Para Schannel, esse valor deve ser RPC_C_IMP_LEVEL_IMPERSONATE.

[in] pAuthInfo

Um valor RPC_AUTH_IDENTITY_HANDLE que indica a identidade do cliente. Esse parâmetro não é usado para chamadas no mesmo computador. Se pAuthInfo for NULL, COM usará a identidade de proxy atual, que é o token de processo, o token de representação ou a identidade de autenticação da função CoInitializeSecurity . Se o identificador não for NULL, essa identidade será usada. O formato da estrutura referenciada pelo identificador depende do provedor do serviço de autenticação.

Para NTLMSSP ou Kerberos, a estrutura é uma estrutura SEC_WINNT_AUTH_IDENTITY ou SEC_WINNT_AUTH_IDENTITY_EX . Se o cliente obtiver as credenciais definidas no proxy chamando CoQueryProxyBlanket, ele deverá garantir que a memória permaneça válida e inalterada até que uma identidade diferente seja definida no proxy ou todos os proxies no objeto sejam liberados.

Se esse parâmetro for NULL, COM usará a identidade de proxy atual (que é o token de processo ou o token de representação). Se o identificador se referir a uma estrutura, essa identidade será usada.

Para schannel, esse parâmetro deve ser um ponteiro para uma estrutura CERT_CONTEXT que contém o certificado X.509 do cliente ou NULL se o cliente quiser fazer uma conexão anônima com o servidor. Se um certificado for especificado, o chamador não deverá liberá-lo desde que exista qualquer proxy para o objeto no apartment atual.

Para Snego, esse membro é NULL, aponta para uma estrutura SEC_WINNT_AUTH_IDENTITY ou aponta para uma estrutura SEC_WINNT_AUTH_IDENTITY_EX . Se for NULL, o Snego escolherá uma lista de serviços de autenticação com base naqueles disponíveis no computador cliente. Se apontar para uma estrutura SEC_WINNT_AUTH_IDENTITY_EX , o membro PackageList da estrutura deverá apontar para uma cadeia de caracteres que contenha uma lista separada por vírgulas de nomes de serviço de autenticação e o membro PackageListLength deverá fornecer o número de bytes na cadeia de caracteres PackageList . Se PackageList for NULL, todas as chamadas que usam o Snego falharão.

Se COLE_DEFAULT_AUTHINFO for especificado, o COM escolherá as informações de autenticação seguindo seu algoritmo normal de negociação de cobertor de segurança.

SetBlanket retornará um erro se pAuthInfo estiver definido e um dos sinalizadores de camuflagem estiver definido em dwCapabilities.

[in] dwCapabilities

Os recursos desse proxy. Os sinalizadores de funcionalidade são definidos na enumeração EOLE_AUTHENTICATION_CAPABILITIES . Os únicos sinalizadores que podem ser definidos por meio desse método são EOAC_MUTUAL_AUTH, EOAC_STATIC_CLOAKING, EOAC_DYNAMIC_CLOAKING, EOAC_ANY_AUTHORITY (esse sinalizador foi preterido), EOAC_MAKE_FULLSIC e EOAC_DEFAULT. O EOAC_STATIC_CLOAKING ou EOAC_DYNAMIC_CLOAKING poderá ser definido se pAuthInfo não estiver definido e Schannel não for o serviço de autenticação. (Consulte Camuflagem para obter mais informações.) Se algum sinalizador de funcionalidade diferente dos mencionados aqui for indicado, SetBlanket retornará um erro.

Retornar valor

Esse método pode retornar os valores a seguir.

Código de retorno Descrição
S_OK
O método foi concluído com sucesso.
E_INVALIDARG
Um ou mais argumentos não são válidos.

Comentários

SetBlanket define as informações de autenticação que serão usadas para fazer chamadas no proxy de interface especificado. Os valores especificados aqui substituem os valores escolhidos pela segurança automática. Chamar esse método altera os valores de segurança para todos os outros usuários do proxy especificado. Se você quiser que as alterações se apliquem somente a uma instância específica de um proxy, chame IClientSecurity::CopyProxy para fazer uma cópia privada do proxy e, em seguida, chame SetBlanket na cópia.

Sempre que esse método for chamado, o DCOM definirá a identidade no proxy e chamadas futuras feitas usando esse proxy usarão essa identidade. Chamadas em andamento quando SetBlanket é chamado usarão as informações de autenticação no proxy no momento em que a chamada foi iniciada. Se pAuthInfo for NULL, a identidade de proxy usará como padrão o token de processo atual (a menos que uma identidade de autenticação tenha sido especificada em uma chamada para CoInitializeSecurity). Consulte Camuflagem para saber como os sinalizadores de camuflagem afetam o proxy quando pAuthInfo é NULL.

Por padrão, o COM escolherá o primeiro serviço de autenticação e o serviço de autorização disponíveis nos computadores cliente e servidor e o nome principal que o servidor registrou para esse serviço de autenticação. Atualmente, o COM não tentará outro serviço de autenticação se o primeiro falhar.

Quando a constante padrão para dwImpLevel é especificada em SetBlanket, o parâmetro usa como padrão o valor especificado para CoInitializeSecurity. Se CoInitializeSecurity não for chamado, o padrão será RPC_C_IMP_LEVEL_IDENTIFY.

O valor inicial de dwAuthnLevel em um proxy será o maior do valor definido na chamada do cliente para CoInitializeSecurity e a chamada do servidor para CoInitializeSecurity. Para qualquer processo que não chamou CoInitializeSecurity, o nível de autenticação padrão é RPC_C_AUTHN_CONNECT.

O nível de autenticação e representação padrão para processos que não chamam CoInitializeSecurity pode ser definido com DCOMCNFG.

Se EOAC_DEFAULT for especificado para dwCapabilities, os recursos válidos do CoInitializeSecurity serão usados. Se CoInitializeSecurity não tiver sido chamado, EOAC_NONE será usado para o sinalizador de recursos.

Se SetBlanket for chamado simultaneamente em dois threads no mesmo proxy, apenas um conjunto de alterações será aplicado. Se SetBlanket e CRpcOptions::Set forem chamados simultaneamente em dois threads no mesmo proxy, ambas as alterações poderão ser aplicadas ou apenas uma poderá ser aplicada.

As informações de segurança não podem ser definidas em interfaces locais, como a interface IClientSecurity . No entanto, como essa interface só tem suporte localmente, não há necessidade de segurança. IUnknown e IMultiQI são casos especiais. A implementação do local faz chamadas remotas para dar suporte a essas interfaces. SetBlanket pode ser usado para IUnknown. O IMultiQI usará as configurações de segurança no IUnknown.

Para alterar um parâmetro SetBlanket sem precisar lidar com os outros, é possível especificar as constantes padrão para os outros parâmetros. Os aplicativos podem alterar um parâmetro (como o nível de autenticação) e ignorar os outros parâmetros, incluindo o serviço de autenticação, definindo todos os outros parâmetros para as constantes padrão.

Observe que é importante definir todos os parâmetros não utilizados para as constantes padrão porque o valor padrão geralmente não é óbvio. Em particular, se você definir o serviço de autenticação como o padrão, deverá definir as informações de autenticação e o nome da entidade de segurança como o padrão. Os motivos para isso são duplos: primeiro, o tipo das informações de autenticação depende do serviço de autenticação escolhido pelo DCOM. Segundo, como o DCOM precisa passar algumas informações de autenticação complexas para determinados serviços de autenticação, se você definir o serviço de autenticação como padrão e as informações de autenticação como NULL, você poderá obter uma configuração de segurança que não funcionará.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho objidl.h (inclua ObjIdl.h)

Confira também

CoQueryProxyBlanket

CoSetProxyBlanket

Iclientsecurity