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


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

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

Синтаксис

INT WSAAPI SetAddrInfoExW(
  [in]            PCWSTR                             pName,
  [in]            PCWSTR                             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, содержащую имя, под которым следует регистрировать или отменять регистрацию адресов. Интерпретация этого параметра, относяскогося к поставщику пространства имен.

[in] pServiceName

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

[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 или GetAddrInfoW . Функция 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]
Целевая платформа Windows
Header ws2tcpip.h
Библиотека Ws2_32.lib
DLL Ws2_32.dll

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

GetAddrInfoEx

GetAddrInfoW

WSAEnumNameSpaceProviders

WSAGetLastError

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

getaddrinfo