Compartilhar via


Função CoSetProxyBlanket (combaseapi.h)

Define as informações de autenticação que serão usadas para fazer chamadas no proxy especificado. Essa é uma função auxiliar para IClientSecurity::SetBlanket.

Sintaxe

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

O proxy a ser definido.

[in] dwAuthnSvc

O serviço de autenticação a ser usado. Para obter uma lista de valores possíveis, consulte Constantes de serviço de autenticação. Use RPC_C_AUTHN_NONE se nenhuma autenticação for necessária. Se RPC_C_AUTHN_DEFAULT for especificado, o DCOM 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 a ser usado. Para obter uma lista de valores possíveis, consulte Constantes de autorização. Se RPC_C_AUTHZ_DEFAULT for especificado, o DCOM escolherá um serviço de autorização seguindo seu algoritmo normal de negociação de cobertor de segurança. RPC_C_AUTHZ_NONE deve ser usado como o serviço de autorização se NTLMSSP, Kerberos ou Schannel for usado como o serviço de autenticação.

[in, optional] pServerPrincName

O nome da entidade de segurança do servidor a ser usado com o serviço de autenticação. 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 valor não deverá ser NULL. Ele deve 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 a ser usado. Para obter uma lista de valores possíveis, consulte Constantes de nível de autenticação. Se RPC_C_AUTHN_LEVEL_DEFAULT for especificado, o DCOM escolherá um nível de autenticação seguindo seu algoritmo normal de negociação de cobertor de segurança. Se esse valor for nenhum, o serviço de autenticação também deverá ser nenhum.

[in] dwImpLevel

O nível de representação a ser usado. Para obter uma lista de valores possíveis, consulte Constantes de nível de representação. Se RPC_C_IMP_LEVEL_DEFAULT for especificado, o DCOM escolherá um nível de representação seguindo seu algoritmo normal de negociação de cobertor de segurança. Se NTLMSSP for o serviço de autenticação, esse valor deverá ser RPC_C_IMP_LEVEL_IMPERSONATE ou RPC_C_IMP_LEVEL_IDENTIFY. O NTLMSSP também dá suporte à representação no nível do delegado (RPC_C_IMP_LEVEL_DELEGATE) no mesmo computador. Se Schannel for o serviço de autenticação, esse parâmetro deverá ser RPC_C_IMP_LEVEL_IMPERSONATE.

[in, optional] pAuthInfo

Um ponteiro para um valor RPC_AUTH_IDENTITY_HANDLE que estabelece a identidade do cliente. O formato da estrutura referenciada pelo identificador depende do provedor do serviço de autenticação.

Para chamadas no mesmo computador, o RPC faz logon no usuário com as credenciais fornecidas e usa o token resultante para a chamada de método.

Para NTLMSSP ou Kerberos, a estrutura é uma estrutura SEC_WINNT_AUTH_IDENTITY ou SEC_WINNT_AUTH_IDENTITY_EX . O cliente pode descartar pAuthInfo depois de chamar a API. O RPC não mantém uma cópia do ponteiro pAuthInfo e o cliente não pode recuperá-lo posteriormente no método CoQueryProxyBlanket .

Se esse parâmetro for NULL, o DCOM 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 para esse parâmetro, o DCOM escolherá as informações de autenticação seguindo seu algoritmo normal de negociação de cobertor de segurança.

CoSetProxyBlanket falhará se pAuthInfo estiver definido e um dos sinalizadores de camuflagem estiver definido no parâmetro dwCapabilities .

[in] dwCapabilities

Os recursos desse proxy. Para obter uma lista de valores possíveis, consulte a enumeração EOLE_AUTHENTICATION_CAPABILITIES . Os únicos sinalizadores que podem ser definidos por meio dessa função 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 estiver definido, CoSetProxyBlanket falhará.

Retornar valor

Essa função pode retornar os valores a seguir.

Código de retorno Descrição
S_OK
A função foi bem-sucedida.
E_INVALIDARG
Um ou mais argumentos são inválidos.

Comentários

CoSetProxyBlanket define as informações de autenticação que serão usadas para fazer chamadas no proxy especificado. Essa função encapsula a seguinte sequência de chamadas comuns (tratamento de erro excluído).

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

Essa sequência chama QueryInterface no proxy para obter um ponteiro para IClientSecurity e, com o ponteiro resultante, chama IClientSecurity::SetBlanket e libera o ponteiro.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho combaseapi.h (inclua Objbase.h)
Biblioteca Ole32.lib
DLL Ole32.dll

Confira também

CoQueryProxyBlanket

IClientSecurity::SetBlanket

Segurança no COM

Definindo a segurança no nível do proxy de interface