Compartilhar via


Função DsMakeSpnA (dsparse.h)

A função DsMakeSpn constrói um SPN (nome da entidade de serviço) que identifica uma instância de serviço.

Um aplicativo cliente usa essa função para compor um SPN, que ele usa para autenticar a instância de serviço. Por exemplo, o cliente pode passar um SPN no parâmetro pszTargetName da função InitializeSecurityContext.

Sintaxe

DSPARSE DWORD DsMakeSpnA(
  [in]           LPCSTR ServiceClass,
  [in]           LPCSTR ServiceName,
  [in, optional] LPCSTR InstanceName,
  [in]           USHORT InstancePort,
  [in, optional] LPCSTR Referrer,
  [in, out]      DWORD  *pcSpnLength,
  [out]          LPSTR  pszSpn
);

Parâmetros

[in] ServiceClass

Ponteiro para uma cadeia de caracteres terminada em nulo constante que especifica a classe do serviço. Esse parâmetro pode ser qualquer cadeia de caracteres exclusiva para esse serviço; O nome do protocolo, por exemplo, ldap ou a forma de cadeia de caracteres de um GUID são aceitáveis.

[in] ServiceName

Ponteiro para uma cadeia de caracteres terminada em nulo constante que especifica o nome DNS, o nome NetBIOS ou o nome diferenciado (DN). Esse parâmetro deve serNULL não.

Para obter mais informações sobre como os parâmetros ServiceName, InstanceName e InstancePort são usados para compor um SPN, consulte a seção Comentários a seguir.

[in, optional] InstanceName

Ponteiro para uma cadeia de caracteres terminada em nulo constante que especifica o nome DNS ou o endereço IP do host para uma instância do serviço.

Se ServiceName especificar o nome DNS ou NetBIOS do computador host de serviço, o parâmetro InstanceName deverá ser NULL.

Se ServiceName especificar um nome de domínio DNS, o nome de um registro SRV DNS ou um nome diferenciado, como o DN de um ponto de conexão de serviço, o parâmetro InstanceName deverá especificar o nome DNS ou NetBIOS do computador host de serviço.

[in] InstancePort

Número da porta para uma instância do serviço. Use 0 para a porta padrão. Se esse parâmetro for zero, o SPN não inclui um número de porta.

[in, optional] Referrer

Ponteiro para uma cadeia de caracteres terminada em nulo constante que especifica o nome DNS do host que forneceu uma referência de endereço IP. Esse parâmetro é ignorado, a menos que o parâmetro ServiceName especifique um endereço IP.

[in, out] pcSpnLength

Ponteiro para uma variável que contém o comprimento, em caracteres, do buffer que receberá o novo SPN construído. Esse valor pode ser 0 para solicitar o tamanho final do buffer com antecedência.

O parâmetro pcSpnLength também recebe o comprimento real do SPN criado, incluindo o caractere nulo de terminação.

[out] pszSpn

Ponteiro para uma cadeia de caracteres terminada em nulo que recebe o SPN construído. Esse buffer deve ser o comprimento especificado por pcSpnLength. O parâmetro pszSpn pode ser NULL para solicitar o tamanho final do buffer com antecedência.

Valor de retorno

Se a função retornar um SPN, o valor retornado será ERROR_SUCCESS. Se a função falhar, o valor retornado poderá ser um dos seguintes códigos de erro.

Observações

O formato do SPN produzido pela função DsMakeSpn depende dos parâmetros de entrada. Há dois formatos básicos. Ambos os formatos começam com a cadeia de caracteres ServiceClass seguida por um nome de computador host e um componente InstancePort opcional.

Observação Esse formato é usado por serviços baseados em host.
 

Para produzir um SPN com o formato ">do<ServiceClass/<host>"

  1. Defina o parâmetro ServiceName com o nome DNS do computador host para a instância de serviço. Esse é o componente host do SPN.
  2. Defina os parâmetros InstanceName e Referrer para NULL.
  3. Defina o parâmetro InstancePort como zero. Se InstancePort não for zero, o SPN terá o seguinte formato:
    <service class>/<host>:<instance port>/<referrer>
    
Observação Esse formato é usado por serviços replicáveis.
 

Para produzir um SPN com o>de host "<ServiceClass>/<: formato<InstancePort>"

  1. Defina o parâmetro InstanceName com o nome DNS do computador host da instância de serviço. Esse é o componente do host.
  2. Defina o parâmetro ServiceName para uma cadeia de caracteres que identifica uma instância do serviço. Por exemplo, pode ser o nome diferenciado do ponto de conexão de serviço para essa instância de serviço.
  3. Defina o parâmetro referenciador de para NULL.
  4. Defina o parâmetro InstancePort como zero. Se InstancePort não for zero, o SPN terá o seguinte formato:
    <service class>/<host>:<instance port>/<service name>
    
O parâmetro referenciador de será usado somente se o parâmetro ServiceName especificar o endereço IP do computador host do serviço. Nesse caso, Referenciador especifica o nome DNS do computador que forneceu o endereço IP como uma referência. O SPN tem o seguinte formato:
<service class>/<host>:<instance port>/<referrer>

em que o componente host é a cadeia de caracteres InstanceName ou a cadeia de caracteres ServiceName se InstanceName estiver NULL e o componente instancePort for opcional.

Os parâmetros de cadeia de caracteres não podem incluir o caractere de barra (/), pois ele é usado para separar os componentes do SPN.

Nota

O cabeçalho dsparse.h define DsMakeSpn como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows Vista
servidor com suporte mínimo Windows Server 2008
da Plataforma de Destino Windows
cabeçalho dsparse.h (inclua Ntdsapi.h)
biblioteca Ntdsapi.lib
de DLL Ntdsapi.dll

Consulte também

Funções de gerenciamento de replicação e controlador de domínio

InitializeSecurityContext