Функция WSASetServiceA (winsock2.h)
Функция WSASetService регистрирует или удаляет из реестра экземпляр службы в одном или нескольких пространствах имен.
Синтаксис
INT WSAAPI WSASetServiceA(
[in] LPWSAQUERYSETA lpqsRegInfo,
[in] WSAESETSERVICEOP essoperation,
[in] DWORD dwControlFlags
);
Параметры
[in] lpqsRegInfo
Указатель на сведения о службе для регистрации или отмены регистрации.
[in] essoperation
Значение , определяющее запрошенную операцию. Этот параметр может быть одним из значений типа перечисления WSAESETSERVICEOP, определенного в файле заголовка Winsock2.h .
Значение | Значение |
---|---|
|
Зарегистрируйте службу. Для SAP это означает отправку периодической трансляции. Это nop для пространства имен DNS. Для постоянных хранилищ данных это означает обновление сведений об адресе. |
|
Удалите службу из реестра. Для SAP это означает прекращение отправки периодической трансляции. Это nop для пространства имен DNS. Для постоянных хранилищ данных это означает удаление сведений об адресе. |
|
Удалите службу из динамического имени и постоянных пространств. Для служб, представленных несколькими CSADDR_INFO структурами (с использованием флага SERVICE_MULTIPLE), будет удален только указанный адрес, который должен точно соответствовать соответствующей структуре CSADDR_INFO , указанной при регистрации службы. |
[in] dwControlFlags
Значение флагов установки службы, которое дополнительно управляет операцией, выполняемой функцией WSASetService . Возможные значения для этого параметра определяются в файле заголовка Winsock2.h .
Возвращаемое значение
Возвращаемое значение WSASetService равно нулю, если операция была успешной. В противном случае возвращается значение SOCKET_ERROR, а определенный номер ошибки можно получить, вызвав WSAGetLastError.
Код ошибки | Значение |
---|---|
Вызывающая подпрограмма не имеет достаточных привилегий для установки службы. | |
Один или несколько обязательных параметров были недопустимыми или отсутствуют. | |
Ws2_32.dll не инициализирована. Приложение должно сначала вызвать WSAStartup , прежде чем вызывать функции Сокетов Windows. | |
Недостаточно памяти для выполнения операции. |
Комментарии
Функция WSASetService может использоваться для воздействия на определенного поставщика пространства имен, всех поставщиков, связанных с определенным пространством имен, или всех поставщиков во всех пространствах имен.
Доступные значения для essOperation и dwControlFlags объединяются для управления функцией WSASetService , как показано в следующей таблице.
Операция | Флаги | Служба уже существует | Служба не существует |
---|---|---|---|
RNRSERVICE_REGISTER | None | Перезаписывает объект . Использует только указанные адреса. Объект зарегистрирован. | Создает новый объект. Использует только указанные адреса. Объект зарегистрирован. |
RNRSERVICE_REGISTER | SERVICE_MULTIPLE | Обновляет объект. Добавляет новые адреса в существующий набор. Объект зарегистрирован. | Создает новый объект. Использует все указанные адреса. Объект зарегистрирован. |
RNRSERVICE_DEREGISTER | None | Удаляет все адреса, но не удаляет объект из пространства имен. Объект удаляется из реестра. | WSASERVICE_NOT_FOUND |
RNRSERVICE_DEREGISTER | SERVICE_MULTIPLE | Обновляет объект. Удаляет только указанные адреса. Если нет адресов, объект помечается как ОТМЕНА РЕГИСТРАЦИИ. Не удаляет объект из пространства имен. | WSASERVICE_NOT_FOUND |
RNRSERVICE_DELETE | None | Удаляет объект из пространства имен. | WSASERVICE_NOT_FOUND |
RNRSERVICE_DELETE | SERVICE_MULTIPLE | Удаляет только указанные адреса. Удаляет объект из пространства имен только в том случае, если адресов не остается. | WSASERVICE_NOT_FOUND |
Публикация служб в каталогах, таких как службы Active Directory, ограничена на основе списков управления доступом (ACL). Дополнительные сведения см. в разделе Проблемы безопасности для публикации службы.
Если параметру dwControlFlags присвоено значение SERVICE_MULTIPLE, приложение может управлять своими адресами независимо. Это полезно, если приложение хочет управлять своими протоколами по отдельности или если служба находится на нескольких компьютерах. Например, если служба использует несколько протоколов, она может обнаружить, что один прослушивающий сокет прерывается, а другие остаются в рабочем состоянии. В этом случае служба может удалить прерванный адрес из реестра, не затрагивая другие адреса.
Если параметру dwControlFlags присвоено значение SERVICE_MULTIPLE, приложение не должно позволить устаревшим адресам оставаться в объекте . Это может произойти, если приложение прерывается без отправки запроса DEREGISTER. Когда служба регистрируется, она должна хранить свои адреса. При следующем вызове служба должна явно удалить эти старые устаревшие адреса из реестра перед регистрацией новых адресов.
Свойства службы
В следующей таблице описано, как данные свойств службы представлены в структуре WSAQUERYSET . Поля с меткой (необязательно) могут содержать пустой указатель.Член WSAQUERYSET | Описание свойства службы |
---|---|
dwSize | Для параметра должно быть задано значение sizeof (WSAQUERYSET). Это механизм управления версиями. |
dwOutputFlags | Неприменимо и игнорируется. |
lpszServiceInstanceName | Строка, на который указывает ссылка, содержит имя экземпляра службы. |
lpServiceClassId | Идентификатор GUID, соответствующий этому классу службы. |
lpVersion | (Необязательно) Предоставляет номер версии экземпляра службы. |
lpszComment | (Необязательно) Необязательная строка комментария. |
dwNameSpace | См. таблицу ниже. |
lpNSProviderId | См. таблицу ниже. |
lpszContext | (Необязательно) Указывает начальную точку запроса в иерархическом пространстве имен. |
dwNumberOfProtocols | Не обрабатывается. |
lpafpProtocols | Не обрабатывается. |
lpszQueryString | Не обрабатывается. |
dwNumberOfCsAddrs | Количество элементов в массиве CSADDR_INFO структур, на которые ссылается lpcsaBuffer. |
lpcsaBuffer | Указатель на массив CSADDR_INFO структур, содержащих адреса, прослушиваемые службой. |
lpBlob | (Необязательно) Это указатель на сущность конкретного поставщика. |
Как показано ниже, сочетание элементов dwNameSpace и lpNSProviderId определяет, что эта функция влияет на поставщиков пространств имен.
dwNameSpace | lpNSProviderId | Область влияния |
---|---|---|
Не учитывается | Отличное от NULL | Указанный поставщик пространства имен. |
Допустимый идентификатор пространства имени | Null | Все поставщики пространства имен, поддерживающие указанное пространство имен. |
NS_ALL | Null | Все поставщики пространства имен. |
Windows Phone 8. Функция WSASetServiceW поддерживается для приложений Магазина Windows Phone на Windows Phone 8 и более поздних версий.
Windows 8.1 и Windows Server 2012 R2. Функция WSASetServiceW поддерживается для приложений Магазина Windows на Windows 8.1, Windows Server 2012 R2 и более поздних версий.
Примечание
Заголовок winsock2.h определяет WSASetService в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8.1, Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winsock2.h |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |