Función DsMakeSpnA (dsparse.h)

La función DsMakeSpn construye un nombre de entidad de seguridad de servicio (SPN) que identifica una instancia de servicio.

Una aplicación cliente usa esta función para crear un SPN, que usa para autenticar la instancia de servicio. Por ejemplo, el cliente puede pasar un SPN en el parámetro pszTargetName de la función InitializeSecurityContext .

Sintaxis

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

Puntero a una cadena terminada en null constante que especifica la clase del servicio. Este parámetro puede ser cualquier cadena única para ese servicio; El nombre del protocolo, por ejemplo, ldap o la forma de cadena de un GUID son aceptables.

[in] ServiceName

Puntero a una cadena terminada en null constante que especifica el nombre DNS, el nombre NetBIOS o el nombre distintivo (DN). Este parámetro debe ser distinto de NULL.

Para obtener más información sobre cómo se usan los parámetros ServiceName, InstanceName e InstancePort para crear un SPN, consulte la sección Comentarios siguientes.

[in, optional] InstanceName

Puntero a una cadena terminada en null constante que especifica el nombre DNS o la dirección IP del host para una instancia del servicio.

Si ServiceName especifica el nombre DNS o NetBIOS del equipo host del servicio, el parámetro InstanceName debe ser NULL.

Si ServiceName especifica un nombre de dominio DNS, el nombre de un registro SRV dns o un nombre distintivo, como el DN de un punto de conexión de servicio, el parámetro InstanceName debe especificar el nombre DNS o NetBIOS del equipo host del servicio.

[in] InstancePort

Número de puerto para una instancia del servicio. Use 0 para el puerto predeterminado. Si este parámetro es cero, el SPN no incluye un número de puerto.

[in, optional] Referrer

Puntero a una cadena terminada en null constante que especifica el nombre DNS del host que proporcionó una referencia de dirección IP. Este parámetro se omite a menos que el parámetro ServiceName especifique una dirección IP.

[in, out] pcSpnLength

Puntero a una variable que contiene la longitud, en caracteres, del búfer que recibirá el nuevo SPN construido. Este valor puede ser 0 para solicitar el tamaño final del búfer de antemano.

El parámetro pcSpnLength también recibe la longitud real del SPN creado, incluido el carácter nulo de terminación.

[out] pszSpn

Puntero a una cadena terminada en null que recibe el SPN construido. Este búfer debe ser la longitud especificada por pcSpnLength. El parámetro pszSpn puede ser NULL para solicitar el tamaño final del búfer de antemano.

Valor devuelto

Si la función devuelve un SPN, el valor devuelto se ERROR_SUCCESS. Si se produce un error en la función, el valor devuelto puede ser uno de los siguientes códigos de error.

Comentarios

El formato del SPN generado por la función DsMakeSpn depende de los parámetros de entrada. Hay dos formatos básicos. Ambos formatos comienzan con la cadena ServiceClass seguida de un nombre de equipo host y un componente InstancePort opcional.

Nota Los servicios basados en host usan este formato.
 

Para generar un SPN con el formato "<ServiceClass>/<host>"

  1. Establezca el parámetro ServiceName en el nombre DNS del equipo host para la instancia de servicio. Este es el componente host del SPN.
  2. Establezca los parámetros InstanceName y Referer en NULL.
  3. Establezca el parámetro InstancePort en cero. Si InstancePort es distinto de cero, el SPN tiene el formato siguiente:
    <service class>/<host>:<instance port>/<referrer>
    
Nota Los servicios replicables usan este formato.
 

Para generar un SPN con el formato "<ServiceClass>/<host>:<InstancePort>"

  1. Establezca el parámetro InstanceName en el nombre DNS del equipo host para la instancia de servicio. Este es el componente host.
  2. Establezca el parámetro ServiceName en una cadena que identifique una instancia del servicio. Por ejemplo, podría ser el nombre distintivo del punto de conexión de servicio para esta instancia de servicio.
  3. Establezca el parámetro Referer en NULL.
  4. Establezca el parámetro InstancePort en cero. Si InstancePort es distinto de cero, el SPN tiene el formato siguiente:
    <service class>/<host>:<instance port>/<service name>
    
El parámetro Referer solo se usa si el parámetro ServiceName especifica la dirección IP del equipo host del servicio. En este caso, El remitente especifica el nombre DNS del equipo que proporcionó la dirección IP como referencia. El SPN tiene el formato siguiente:
<service class>/<host>:<instance port>/<referrer>

donde el componente host es la cadena InstanceName o la cadena ServiceName si InstanceName es NULL y el componente InstancePort es opcional.

Los parámetros de cadena no pueden incluir el carácter de barra diagonal (/), ya que se usa para separar los componentes del SPN.

Nota

El encabezado dsparse.h define DsMakeSpn como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado dsparse.h (incluya Ntdsapi.h)
Library Ntdsapi.lib
Archivo DLL Ntdsapi.dll

Consulte también

Funciones de administración de replicación y controlador de dominio

InitializeSecurityContext