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


Функция 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, содержащую имя, под которым следует регистрировать или отменять регистрацию адресов. Интерпретация этого параметра, относяскогося к поставщику пространства имен.

[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