Функция DsGetSpnW (ntdsapi.h)

Функция DsGetSpn создает массив из одного или нескольких имен субъектов-служб (SPN). Каждое имя в массиве определяет экземпляр службы. Эти spNs могут быть зарегистрированы в службе каталогов (DS) с помощью функции DsWriteAccountSpn.

Синтаксис

NTDSAPI DWORD DsGetSpnW(
  [in]           DS_SPN_NAME_TYPE ServiceType,
  [in]           LPCWSTR          ServiceClass,
  [in, optional] LPCWSTR          ServiceName,
  [in]           USHORT           InstancePort,
  [in]           USHORT           cInstanceNames,
  [in, optional] LPCWSTR          *pInstanceNames,
  [in, optional] const USHORT     *pInstancePorts,
  [out]          DWORD            *pcSpn,
  [out]          LPWSTR           **prpszSpn
);

Параметры

[in] ServiceType

Определяет формат субъектов-служб для создания. Параметр ServiceType может иметь одно из следующих значений.

DS_SPN_DNS_HOST, DS_SPN_DN_HOST, DS_SPN_NB_HOST

Имена субъектов-служб имеют следующий формат.

ServiceClass/ InstanceName: InstancePort

Параметр ServiceName должен быть NULL. Это формат имени субъекта-службы для службы на основе узла, которая предоставляет службы, определенные с его узлом компьютера. Компонент InstancePort необязателен.

DS_SPN_DOMAIN, DS_SPN_NB_DOMAIN

Имена субъектов-служб имеют следующий формат.

ServiceClass/ InstanceName: InstancePort/ ServiceName

Параметр serviceName должен быть DNS-именем или DN домена. Этот формат используется для реплицируемой службы, которая предоставляет службы указанному домену.

DS_SPN_SERVICE

Имена субъектов-служб имеют следующий формат.

ServiceClass/ InstanceName: InstancePort/ ServiceName

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

[in] ServiceClass

Указатель на строку с константой, завершаемой значением NULL, которая указывает класс службы; например, http. Как правило, это может быть любая строка, уникальная для службы.

[in, optional] ServiceName

Указатель на строку, завершающуюся значением NULL, которая указывает DNS-имя или различающееся имя службы. ServiceName не требуется для службы на основе узла. Дополнительные сведения см. в описании параметра ServiceType для возможных значений ServiceName.

[in] InstancePort

Указывает номер порта экземпляра службы. Если это значение равно нулю, имя субъекта-службы не включает номер порта.

[in] cInstanceNames

Указывает количество элементов в массивах pInstanceNames и pInstancePorts. Если это значение равно нулю, pInstanceNames должны указывать на массив строк cInstanceNames, а pInstancePorts можно либо NULL, либо указатель на массив номеров портов cInstanceNames. Если это значение равно нулю, DsGetSpn возвращает только одну имя субъекта-службы в массив е prpszSpn и pInstanceNames и pInstancePorts игнорируются.

[in, optional] pInstanceNames

Указатель на массив строк, завершающих значение NULL, которые указывают дополнительные имена экземпляров (не используются для имен узлов). Этот параметр игнорируется, если cInstanceNames равно нулю. В этом случае компонент имени экземпляра по умолчанию имеет полное DNS-имя локального компьютера или имя NetBIOS, если указано DS_SPN_NB_HOST или DS_SPN_NB_DOMAIN.

[in, optional] pInstancePorts

Указатель на массив дополнительных портов экземпляра. Если это значение не являетсяNULL, он должен указывать на массив cInstanceNames номеров портов. Если это значение равно null, имена субъектов-служб не включают номер порта. Этот параметр игнорируется, если cInstanceNames равно нулю.

[out] pcSpn

Указатель на переменную, которая получает число субъектов-служб, содержащихся в prpszSpn.

[out] prpszSpn

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

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

Если функция возвращает массив субъектов-служб, возвращаемое значение ERROR_SUCCESS.

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

Замечания

Создание имен субъектов-служб для нескольких экземпляров реплицированной службы, работающей на нескольких хост-компьютерах

  1. Задайте cInstanceNames число экземпляров.
  2. Укажите имена ведущих компьютеров в массиве pInstanceNames.

Создание имен субъектов-служб для нескольких экземпляров службы, работающей на одном компьютере узла

  1. Задайте cInstanceNames число экземпляров.
  2. Задайте для каждой записи в массиве pInstanceNames DNS-имя хост-компьютера.
  3. Используйте параметр pInstancePorts, чтобы указать массив уникальных номеров портов для каждого экземпляра, чтобы отсоединить имена субъектов-служб.
Строковые параметры не могут включать косую черту вперед (/), которая используется для разделения компонентов имени субъекта-службы.

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

Заметка

Заголовок ntdsapi.h определяет DsGetSpn как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista
минимальный поддерживаемый сервер Windows Server 2008
целевая платформа Виндоус
заголовка ntdsapi.h
библиотеки Ntdsapi.lib
DLL Ntdsapi.dll

См. также

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

DsFreeSpnArray

DsWriteAccountSpn