Функция 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 указывает, что перекрывающаяся операция успешно инициирована и что завершение (и, следовательно, событие изменения) будет указано позже.
Код ошибки | Значение |
---|---|
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup . | |
Произошел сбой сетевой подсистемы. | |
Недостаточно свободной памяти для завершения операции. | |
Значение, указываемое параметром lpNotificationHandle , не является допустимым дескриптором уведомления. | |
Текущая среда операционной системы не поддерживает установку или удаление поставщика без перезапуска. |
Комментарии
Функция WSAProviderConfigChange уведомляет об установке или удалении поставщика (как транспортного, так и пространства имен) в операционных средах Windows, которые поддерживают такое изменение конфигурации без необходимости перезапуска. При первом вызове (параметр lpNotificationHandle указывает на дескриптор NULL ) эта функция немедленно завершается и возвращает дескриптор уведомления в расположении, указанном lpNotificationHandle , который можно использовать в последующих вызовах для получения уведомлений об установке и удалении поставщика. Второй и все последующие вызовы завершаются только при изменении сведений о поставщике с момента выполнения вызова Ожидается (но не обязательно), что приложение использует перекрывающиеся операции ввода-вывода на секунду и последующие вызовы WSAProviderConfigChange. В этом случае вызов будет немедленно возвращен и приложение будет уведомлено об изменениях конфигурации поставщика с помощью механизма завершения, выбранного с помощью указанных перекрывающихся параметров завершения.
Дескриптор уведомления, возвращаемый WSAProviderConfigChange , похож на любой обычный дескриптор операционной системы, который должен быть закрыт (когда больше не нужен) с помощью вызова Windows CloseHandle .
Чтобы гарантировать, что приложение всегда будет иметь текущие сведения о конфигурации протокола, можно использовать следующую последовательность действий:
- Вызов WSAProviderConfigChange
- Вызов WSAEnumProtocols и (или) WSAEnumNameSpaceProviders
- Всякий раз, когда WSAProviderConfigChange уведомляет приложение об изменении конфигурации поставщика (путем блокировки или перекрытия операций ввода-вывода), следует повторять всю последовательность действий.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8.1, Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winsock2.h |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |