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


Функция SetAddrInfoExA (ws2tcpip.h)

Функция SetAddrInfoEx регистрирует или отменяет регистрацию имени, имени службы и связанных адресов с определенным поставщиком пространства имен.

Синтаксис

INT WSAAPI SetAddrInfoExA(
  [in]            PCSTR                              pName,
  [in]            PCSTR                              pServiceName,
  [in, out]       SOCKET_ADDRESS                     *pAddresses,
  [in]            DWORD                              dwAddressCount,
  [in, optional]  LPBLOB                             lpBlob,
  [in]            DWORD                              dwFlags,
  [in]            DWORD                              dwNameSpace,
  [in, optional]  LPGUID                             lpNspId,
  [in, optional]  timeval                            *timeout,
  [in, optional]  LPOVERLAPPED                       lpOverlapped,
  [in, optional]  LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
  [out, optional] LPHANDLE                           lpNameHandle
);

Параметры

[in] pName

Указатель на строку NULL-terminated, содержащую имя, в котором адреса должны быть зарегистрированы или удалены. Интерпретация этого параметра, относяющегося к поставщику пространства имен.

[in] pServiceName

Указатель на необязательную строку NULL-terminated, содержащую имя службы, связанное с зарегистрированным именем. Интерпретация этого параметра зависит от поставщика пространства имен.

[in, out] pAddresses

Указатель на необязательный список адресов для регистрации в поставщике пространства имен.

[in] dwAddressCount

Количество адресов, переданных в параметре pAddresses. Если этот параметр равен нулю, параметр pName отменяется из поставщика пространства имен.

[in, optional] lpBlob

Необязательный указатель на данные, используемые для задания сведений о пространстве имен для конкретного поставщика, связанных с параметром pName за пределами списка адресов. Любые сведения, которые нельзя передать в параметре pAddresses, можно передать в параметре lpBlob. Формат этих сведений зависит от поставщика пространства имен.

[in] dwFlags

Набор флагов, определяющий, как pName и параметры pServiceName должны быть зарегистрированы в поставщике пространства имен. Интерпретация этих сведений зависит от поставщика пространства имен.

[in] dwNameSpace

Идентификатор пространства имен, определяющий, в каком поставщике пространств имен регистрируются эти сведения. Передача определенного идентификатора пространства имен приведет к регистрации этих сведений только в поставщиках пространств имен, поддерживающих указанное пространство имен. Указание NS_ALL приведет к регистрации сведений со всеми установленными и активными поставщиками пространств имен.

Параметры параметра dwNameSpace перечислены в файле Winsock2.h. Несколько поставщиков пространств имен включены в Windows Vista и более поздних версий. Другие поставщики пространств имен можно установить, поэтому следующие возможные значения являются доступными только теми, которые обычно доступны. Многие другие возможны.

Ценность Значение
NS_ALL
Все установленные и активные пространства имен.
NS_BTH
Пространство имен Bluetooth. Этот идентификатор пространства имен поддерживается в Windows Vista и более поздних версиях.
NS_DNS
Пространство имен системы доменных имен (DNS).
NS_EMAIL
Пространство имен электронной почты. Этот идентификатор пространства имен поддерживается в Windows Vista и более поздних версиях.
NS_NLA
Пространство имен "Осведомленность о расположении сети" (NLA). Этот идентификатор пространства имен поддерживается в Windows XP и более поздних версиях.
NS_PNRPNAME
Пространство имен однорангового узла для определенного имени однорангового узла. Этот идентификатор пространства имен поддерживается в Windows Vista и более поздних версиях.
NS_PNRPCLOUD
Пространство имен однорангового узла для коллекции одноранговых имен. Этот идентификатор пространства имен поддерживается в Windows Vista и более поздних версиях.

[in, optional] lpNspId

Указатель на необязательный GUID определенного поставщика пространства имен для регистрации этих сведений в случае, если несколько поставщиков пространств имен зарегистрированы в одном пространстве имен, например NS_DNS. Передача GUID для определенного поставщика пространства имен приведет к регистрации сведений только с указанным поставщиком пространства имен. Функцию WSAEnumNameSpaceProviders можно вызвать для получения GUID поставщика пространства имен.

[in, optional] timeout

Необязательный параметр, указывающий время в миллисекундах, чтобы ждать ответа от поставщика пространства имен перед прерыванием вызова. Этот параметр в настоящее время зарезервирован и должен иметь значение NULL, так как параметр времени ожидания не поддерживается.

[in, optional] lpOverlapped

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

[in, optional] lpCompletionRoutine

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

[out, optional] lpNameHandle

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

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

При успешном выполнении SetAddrInfoEx возвращает NO_ERROR (0). Сбой возвращает код ошибки ненулевого сокета Windows, как показано в коде ошибок сокетов Windows.

Код ошибки Значение
WSANOTINITIALISED
Перед использованием этой функции необходимо выполнить успешный вызов WSAStartup.
WSATRY_AGAIN
Произошел временный сбой в разрешении имен.
WSAEINVAL
Указан недопустимый параметр. Эта ошибка возвращается, если какой-либо из зарезервированных параметров не null.
WSAENOBUFS
Недостаточно места в буфере.
WSANO_RECOVERY
Произошел неустранимый сбой в разрешении имен.
WSA_NOT_ENOUGH_MEMORY
Произошел сбой выделения памяти.

Замечания

Функция SetAddrInfoEx предоставляет независимый от протокола метод регистрации или отмены регистрации имени и одного или нескольких адресов с поставщиком пространства имен. Поставщик пространства имен NS_EMAIL в Windows Vista и более поздних версий поддерживает регистрацию и отмену регистрации адресов. Поставщики пространств имен по умолчанию NS_DNS, NS_PNRPNAME и NS_PNRPNAME не поддерживают регистрацию имен.

Если функция SetAddrInfoEx вызывается NS_ALL в качестве параметра dwNameSpace и параметра lpNspId, SetAddrInfoEx попытается зарегистрировать или отменить регистрацию имени и связанных адресов со всеми установленными и активными пространствами имен. Функция SetAddrInfoEx вернет успешное выполнение, если любой из поставщиков пространств имен успешно зарегистрировано или дерегистрировано имя, но не будет никаких указаний, какой поставщик пространства имен успешно выполнен или какой из них завершился сбоем запроса.

Если определен ЮНИКОД или _UNICODE, SetAddrInfoEx определяется как SetAddrInfoExW, версия Юникода этой функции. Строковые параметры определяются для типа данных PWSTR.

Если ЮНИКОД или _UNICODE не определен, SetAddrInfoEx определяется как SetAddrInfoExA, версия ANSI этой функции. Строковые параметры относятся к типу данных PCSTR.

Сведения, зарегистрированные в поставщике пространства имен, можно возвращать путем вызова функций GetAddrInfoEx, getaddrinfoили функций GetAddrInfo W. Функция GetAddrInfoEx — это расширенная версия getaddrinfo и функции GetAddrInfoW.

В Windows Vista и более поздних версиях, когда SetAddrInfoEx вызывается из службы, если операция является результатом пользовательского процесса вызова службы, то служба должна олицетворить пользователя. Это позволяет правильно применять секции безопасности и маршрутизации.

Windows 8.1 и Windows Server 2012 R2: функция SetAddrInfoExW поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версий.

Заметка

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 8.1, Windows Vista [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008 [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка ws2tcpip.h
библиотеки Ws2_32.lib
DLL Ws2_32.dll

См. также

GetAddrInfoEx

GetAddrInfoW

WSAEnumNameSpaceProviders

WSAGetLastError

коды ошибок сокетов Windows

getaddrinfo