Функция 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
[in] dwNameSpace
Идентификатор пространства имен, определяющий, в каком поставщике пространств имен регистрируются эти сведения. Передача определенного идентификатора пространства имен приведет к регистрации этих сведений только в поставщиках пространств имен, поддерживающих указанное пространство имен. Указание NS_ALL приведет к регистрации сведений со всеми установленными и активными поставщиками пространств имен.
Параметры параметра dwNameSpace перечислены в файле Winsock2.h. Несколько поставщиков пространств имен включены в Windows Vista и более поздних версий. Другие поставщики пространств имен можно установить, поэтому следующие возможные значения являются доступными только теми, которые обычно доступны. Многие другие возможны.
[in, optional] lpNspId
Указатель на необязательный GUID определенного поставщика пространства имен для регистрации этих сведений в случае, если несколько поставщиков пространств имен зарегистрированы в одном пространстве имен, например NS_DNS. Передача GUID для определенного поставщика пространства имен приведет к регистрации сведений только с указанным поставщиком пространства имен. Функцию WSAEnumNameSpaceProviders можно вызвать для получения GUID поставщика пространства имен.
[in, optional] timeout
Необязательный параметр, указывающий время в миллисекундах, чтобы ждать ответа от поставщика пространства имен перед прерыванием вызова. Этот параметр в настоящее время зарезервирован и должен иметь значение
[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или функций GetAddrInfo W. Функция GetAddrInfoEx
В 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 |