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 DN (nome diferenciado). Esse parâmetro deve ser não NULL.

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 incluirá 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 deu uma indicação 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.

Retornar valor

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.

Comentários

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.

Nota Esse formato é usado por serviços baseados em host.
 

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

  1. Defina o parâmetro ServiceName como 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 como 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>
    
Nota Esse formato é usado por serviços replicáveis.
 

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

  1. Defina o parâmetro InstanceName como o nome DNS do computador host para a instância de serviço. Esse é o componente host.
  2. Defina o parâmetro ServiceName como 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 como 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 Referrer será usado somente se o parâmetro ServiceName especificar o endereço IP do computador host do serviço. Nesse caso, o Referenciador especifica o nome DNS do computador que deu o endereço IP como uma indicação. 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 for 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.

Observação

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 de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Plataforma de Destino Windows
Cabeçalho dsparse.h (inclua Ntdsapi.h)
Biblioteca Ntdsapi.lib
DLL Ntdsapi.dll

Confira também

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

Initializesecuritycontext