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


Функция обратного вызова LPNSPSETSERVICE (ws2spi.h)

Функция NSPSetService регистрирует или отменяет регистрацию экземпляра службы в пространстве имен.

Синтаксис

LPNSPSETSERVICE Lpnspsetservice;

INT Lpnspsetservice(
  [in] LPGUID lpProviderId,
  [in] LPWSASERVICECLASSINFOW lpServiceClassInfo,
  [in] LPWSAQUERYSETW lpqsRegInfo,
  [in] WSAESETSERVICEOP essOperation,
  [in] DWORD dwControlFlags
)
{...}

Параметры

[in] lpProviderId

Указатель на GUID конкретного поставщика пространства имен, в котором зарегистрирована служба.

[in] lpServiceClassInfo

Сведения о схеме класса службы.

[in] lpqsRegInfo

Сведения о свойстве, обновляемые после регистрации.

[in] essOperation

Тип запрошенной операции.

Этот параметр может быть одним из значений типа перечисления WSAESETSERVICEOP , определенного в файле заголовка Winsock2.h .

Значение Значение
RNRSERVICE_REGISTER
0
Зарегистрируйте службу. Для пространства имен SAP, используемого в среде NetWare, это означает отправку периодической широковещательной рассылки. Это nop для пространства имен DNS. Для постоянных хранилищ данных это означает обновление сведений об адресе.
RNRSERVICE_DEREGISTER
1
Отмените регистрацию службы. Для пространства имен SAP это означает прекращение отправки периодической широковещательной рассылки. Это nop для пространства имен DNS. Для постоянных хранилищ данных это означает удаление сведений об адресе.
RNRSERVICE_DELETE
2
Удалите службу из динамических имен и постоянных пробелов. Для служб, представленных несколькими структурами CSADDR_INFO (с использованием флага SERVICE_MULTIPLE), будет удален только указанный адрес, который должен точно соответствовать соответствующей структуре **CSADDR_INFO**, предоставленной при регистрации службы.

[in] dwControlFlags

Набор флагов, управляющий запрошенной операцией службы.

Возможные значения для этого параметра определяются в файле заголовка Winsock2.h .

Значение Значение
SERVICE_MULTIPLE
0x00000001
Управление область операции.

Если это значение задано, действие выполняется только в заданном наборе адресов. Операция регистрации не делает недействительными существующие адреса, а отмена регистрации делает недействительными только указанный набор адресов.

Если это значение отсутствует, адреса служб управляются как группа. Регистрация или отмена регистрации делает недействительными все существующие адреса перед добавлением заданного набора адресов.

Возвращаемое значение

Функция должна возвращать NO_ERROR (ноль), если подпрограмма завершается успешно. Он должен вернуть SOCKET_ERROR (–1), если подпрограмма завершается сбоем, и она должна задать соответствующий код ошибки с помощью WSASetLastError.

Код ошибки Значение
WSAEACCES
Вызывающая подпрограмма не имеет достаточных привилегий для установки службы.
WSA_NOT_ENOUGH_MEMORY
Недостаточно памяти для выполнения этой операции.
WSAEINVAL
Один или несколько параметров были недопустимыми или отсутствуют для этого поставщика.
WSAEOPNOTSUPP
Операция не поддерживается. Эта ошибка возвращается, если поставщик пространства имен не реализует эту функцию.
WSASERVICE_NOT_FOUND
Служба неизвестна. Служба не найдена в указанном пространстве имен.

Комментарии

В следующей таблице перечислены доступные значения для essOperation и dwControlFlags.

Операция Флаги Служба уже существует Служба не существует
**RNRSERVICE_REGISTER** None Перезаписывает объект . Использует только указанные адреса. Объект имеет значение REGISTERED. Создает новый объект. Использует только указанные адреса. Объект имеет значение REGISTERED.
**RNRSERVICE_REGISTER** **SERVICE_MULTIPLE** объект Обновления. Добавляет новые адреса в существующий набор. Объект имеет значение REGISTERED. Создает новый объект. Использует все указанные адреса. Объект имеет значение REGISTERED.
**RNRSERVICE_DEREGISTER** None Удаляет все адреса, но не удаляет объект из пространства имен. Объект дерегистрирован. WSASERVICE_NOT_FOUND
**RNRSERVICE_DEREGISTER** **SERVICE_MULTIPLE** объект Обновления. Удаляет только указанные адреса. Пометьте объект как DEREGISTERED только в том случае, если нет адресов. Не удаляется из пространства имен. WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** None Удаляет объект из пространства имен. WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** **SERVICE_MULTIPLE** Удаляет только указанные адреса. Удаляет объект из пространства имен, только если адресов не осталось. WSASERVICE_NOT_FOUND
 

Если параметру dwControlFlags присвоено значение SERVICE_MULTIPLE, это позволяет приложению управлять своими адресами независимо. Это полезно, если приложение должно управлять своими протоколами по отдельности или если служба находится на нескольких компьютерах. Например, если служба использует несколько протоколов, один сокет прослушивания может прерваться, но другие сокеты остаются в рабочем состоянии. В этом примере служба может отменить регистрацию прерванного адреса, не затрагивая другие адреса.

При использовании SERVICE_MULTIPLE приложение не должно позволять старым адресам оставаться в объекте . Это может произойти, если приложение прерывается без выполнения запроса RNRSERVICE_DEREGISTER . Когда служба регистрируется, она должна хранить свои адреса. При следующем вызове служба должна явно отменить регистрацию этих старых адресов перед регистрацией новых адресов.

Свойства службы

В следующей таблице перечислены имена членов WSAQUERYSET и описано, как представляются данные свойств службы. Члены, помеченные как (необязательно), могут быть предоставлены с пустым указателем.
Имя члена WSAQUERYSET Описание свойства службы
**dwSize** Задайте для параметра sizeof(WSAQUERYSET). Это механизм управления версиями.
**lpszServiceInstanceName** Указанная строка содержит имя экземпляра службы.
**lpServiceClassId** Идентификатор GUID, соответствующий этому классу службы.
**lpVersion** Необязательный элемент. Предоставляет номер версии экземпляра службы.
**lpszComment** Необязательный элемент. Необязательная строка комментария.
**dwNameSpace** Игнорируется для этой операции.
**lpNSProviderId** Игнорируется для этой операции. Идентификатор поставщика содержится в параметре lpProviderId .
**lpszContext** Необязательный элемент. Начальная точка запроса в иерархическом пространстве имен.
**dwNumberOfProtocols** Игнорируется для этой операции.
**lpafpProtocols** Игнорируется для этой операции.
**pszQueryString** Игнорируется для этой операции.
**dwNumberOfCsAddrs** Количество элементов в массиве CSADDR_INFO структур, на которые ссылается lpcsaBuffer.
**lpcsaBuffer** Указатель на массив CSADDR_INFO структур, содержащих адрес или адреса, которые прослушивается службой.
**dwOutputFlags** Игнорируется для этой операции.
**lpBlob** Необязательный элемент. Указатель на сущность конкретного поставщика.
 
**Примечание** Член **iProtocol** структуры CSADDR_INFO допустимо содержать константу манифеста **IPROTOCOL_ANY**, указывающую на подстановочное значение. Поставщик пространства имен должен заменить приемлемое значение для заданного семейства адресов и типа сокета.
 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header ws2spi.h

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

CSADDR_INFO

WSAQUERYSET

WSASetLastError