Функция 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 и более поздних версий. Можно установить и другие поставщики пространств имен, поэтому следующие возможные значения являются доступными только те, которые являются общедоступными. Многие другие возможны.
[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.
Код ошибки | Значение |
---|---|
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup . | |
Произошла временная ошибка разрешения имен. | |
Указан недопустимый параметр. Эта ошибка возвращается, если какой-либо из зарезервированных параметров не имеет значения NULL. | |
Недостаточно места в буфере. | |
Произошел неустранимый сбой при разрешении имен. | |
Произошел сбой выделения памяти. |
Комментарии
Функция 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 |