Функция WSAProviderConfigChange (winsock2.h)

Функция WSAProviderConfigChange уведомляет приложение об изменении конфигурации поставщика.

Синтаксис

INT WSAAPI WSAProviderConfigChange(
  [in, out] LPHANDLE                           lpNotificationHandle,
  [in]      LPWSAOVERLAPPED                    lpOverlapped,
  [in]      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);

Параметры

[in, out] lpNotificationHandle

Указатель на дескриптор уведомления. Если дескриптор уведомления имеет значение NULL (значение дескриптора, а не сам указатель), эта функция возвращает дескриптор уведомления в расположении, на которое указывает lpNotificationHandle.

[in] lpOverlapped

Указатель на структуру WSAOVERLAPPED .

[in] lpCompletionRoutine

Тип: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

Указатель на подпрограмму завершения, вызываемую при получении уведомления об изменении поставщика.

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

Если ошибка не возникает , WSAProviderConfigChange возвращает значение 0. В противном случае возвращается значение SOCKET_ERROR и определенный код ошибки может быть получен путем вызова WSAGetLastError. Код ошибки WSA_IO_PENDING указывает, что перекрывающаяся операция успешно инициирована и что завершение (и, следовательно, событие изменения) будет указано позже.

Код ошибки Значение
WSANOTINITIALISED
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup .
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSA_NOT_ENOUGH_MEMORY
Недостаточно свободной памяти для завершения операции.
WSA_INVALID_HANDLE
Значение, указываемое параметром lpNotificationHandle , не является допустимым дескриптором уведомления.
WSAEOPNOTSUPP
Текущая среда операционной системы не поддерживает установку или удаление поставщика без перезапуска.

Комментарии

Функция WSAProviderConfigChange уведомляет об установке или удалении поставщика (как транспортного, так и пространства имен) в операционных средах Windows, которые поддерживают такое изменение конфигурации без необходимости перезапуска. При первом вызове (параметр lpNotificationHandle указывает на дескриптор NULL ) эта функция немедленно завершается и возвращает дескриптор уведомления в расположении, указанном lpNotificationHandle , который можно использовать в последующих вызовах для получения уведомлений об установке и удалении поставщика. Второй и все последующие вызовы завершаются только при изменении сведений о поставщике с момента выполнения вызова Ожидается (но не обязательно), что приложение использует перекрывающиеся операции ввода-вывода на секунду и последующие вызовы WSAProviderConfigChange. В этом случае вызов будет немедленно возвращен и приложение будет уведомлено об изменениях конфигурации поставщика с помощью механизма завершения, выбранного с помощью указанных перекрывающихся параметров завершения.

Дескриптор уведомления, возвращаемый WSAProviderConfigChange , похож на любой обычный дескриптор операционной системы, который должен быть закрыт (когда больше не нужен) с помощью вызова Windows CloseHandle .

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

  • Вызов WSAProviderConfigChange
  • Вызов WSAEnumProtocols и (или) WSAEnumNameSpaceProviders
  • Всякий раз, когда WSAProviderConfigChange уведомляет приложение об изменении конфигурации поставщика (путем блокировки или перекрытия операций ввода-вывода), следует повторять всю последовательность действий.
Windows 8.1 и Windows Server 2012 R2. Эта функция поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версий.

Требования

Требование Значение
Минимальная версия клиента Windows 8.1, Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header winsock2.h
Библиотека Ws2_32.lib
DLL Ws2_32.dll

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

CloseHandle

WSAEnumNameSpaceProviders

WSAEnumProtocols

Функции Winsock

Справочник по Winsock