Поделиться через


Функция DsMakeSpnA (dsparse.h)

Функция DsMakeSpn создает имя субъекта-службы (SPN), которое идентифицирует экземпляр службы.

Клиентское приложение использует эту функцию для создания имени субъекта-службы, которое оно использует для проверки подлинности экземпляра службы. Например, клиент может передать имя субъекта-службы в параметре pszTargetName функции InitializeSecurityContext .

Синтаксис

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
);

Параметры

[in] ServiceClass

Указатель на константную строку, завершающуюся значением NULL, которая указывает класс службы. Этот параметр может быть любой строкой, уникальной для этой службы; Допустимы либо имя протокола, например ldap, либо строковая форма GUID.

[in] ServiceName

Указатель на константную строку, завершающуюся null, которая указывает DNS-имя, NetBIOS-имя или различающееся имя (DN). Этот параметр должен иметь значение, отличное от NULL.

Дополнительные сведения о том, как параметры ServiceName, InstanceName и InstancePort используются для создания имени субъекта-службы, см. в следующем разделе Примечания.

[in, optional] InstanceName

Указатель на константную строку со значением NULL, которая указывает DNS-имя или IP-адрес узла для экземпляра службы.

Если ServiceName указывает DNS или NetBIOS-имя главного компьютера службы, параметр InstanceName должен иметь значение NULL.

Если ServiceName указывает доменное имя DNS, имя записи SRV DNS или различающееся имя, например DN точки подключения службы, параметр InstanceName должен указывать DNS или NetBIOS-имя главного компьютера службы.

[in] InstancePort

Номер порта для экземпляра службы. Используйте 0 для порта по умолчанию. Если этот параметр равен нулю, имя субъекта-службы не содержит номер порта.

[in, optional] Referrer

Указатель на константную строку, завершающуюся null, которая указывает DNS-имя узла, который дал ссылку на IP-адрес. Этот параметр игнорируется, если только параметр ServiceName не указывает IP-адрес.

[in, out] pcSpnLength

Указатель на переменную, содержащую длину (в символах) буфера, который получит новое созданное имя субъекта-службы. Это значение может быть равно 0, чтобы запросить окончательный размер буфера заранее.

Параметр pcSpnLength также получает фактическую длину созданного имени субъекта-службы, включая завершающий символ NULL.

[out] pszSpn

Указатель на строку, завершающуюся значением NULL, которая получает созданное имя субъекта-службы. Длина этого буфера должна быть задана параметром pcSpnLength. Параметр pszSpn может иметь значение NULL , чтобы заранее запросить окончательный размер буфера.

Возвращаемое значение

Если функция возвращает имя субъекта-службы, возвращаемое значение будет ERROR_SUCCESS. Если функция завершается ошибкой, возвращаемое значение может быть одним из следующих кодов ошибок.

Комментарии

Формат имени субъекта-службы, созданного функцией DsMakeSpn, зависит от входных параметров. Существует два основных формата. Оба формата начинаются со строки ServiceClass , за которой следует имя главного компьютера и необязательный компонент InstancePort .

Примечание Этот формат используется службами на основе узла.
 

Создание имени субъекта-службы в формате ServiceClass<>/<host>

  1. Задайте для параметра ServiceName DNS-имя главного компьютера для экземпляра службы. Это компонент узла имени субъекта-службы.
  2. Задайте для параметров InstanceName и Referrerзначение NULL.
  3. Задайте для параметра InstancePort нулевое значение. Если аргумент InstancePort не является нулевым, имя субъекта-службы имеет следующий формат:
    <service class>/<host>:<instance port>/<referrer>
    
Примечание Этот формат используется в реплицируемых службах.
 

Создание имени субъекта-службы в формате ServiceClass<>/<host>:<InstancePort>

  1. Задайте для параметра InstanceName DNS-имя главного компьютера для экземпляра службы. Это главный компонент.
  2. Задайте для параметра ServiceName строку, определяющую экземпляр службы. Например, это может быть различающееся имя точки подключения службы для данного экземпляра службы.
  3. Задайте для параметра Referrerзначение NULL.
  4. Задайте для параметра InstancePort нулевое значение. Если аргумент InstancePort не является нулевым, имя субъекта-службы имеет следующий формат:
    <service class>/<host>:<instance port>/<service name>
    
Параметр Referrer используется только в том случае, если параметр ServiceName указывает IP-адрес главного компьютера службы. В этом случае referrer указывает DNS-имя компьютера, который дал IP-адрес в качестве реферала. Имя субъекта-службы имеет следующий формат:
<service class>/<host>:<instance port>/<referrer>

где компонент узла — это строка InstanceName или строка ServiceName , если InstanceName имеет значение NULL, а компонент InstancePort необязателен.

Строковые параметры не могут содержать символ косой черты (/), так как он используется для разделения компонентов имени субъекта-службы.

Примечание

Заголовок dsparse.h определяет DsMakeSpn как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header dsparse.h (включая Ntdsapi.h)
Библиотека Ntdsapi.lib
DLL Ntdsapi.dll

См. также раздел

Функции управления контроллером домена и репликацией

InitializeSecurityContext