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


функция обратного вызова PFN_WSK_CONTROL_CLIENT (wsk.h)

Функция WskControlClient выполняет управляющие операции с клиентским объектом WSK.

Синтаксис

PFN_WSK_CONTROL_CLIENT PfnWskControlClient;

NTSTATUS PfnWskControlClient(
  [in]            PWSK_CLIENT Client,
  [in]            ULONG ControlCode,
  [in]            SIZE_T InputSize,
  [in, optional]  PVOID InputBuffer,
  [in]            SIZE_T OutputSize,
  [out, optional] PVOID OutputBuffer,
  [out, optional] SIZE_T *OutputSizeReturned,
  [in, out]       PIRP Irp
)
{...}

Параметры

[in] Client

Указатель на структуру WSK_CLIENT , возвращенную с помощью параметра WskProviderNpi функции WskCaptureProviderNPI .

[in] ControlCode

Выполняемая операция управления. Приложение WSK может указать один из следующих кодов управления:

WSK_TRANSPORT_LIST_QUERY

Получение списка доступных сетевых транспортов.

WSK_TRANSPORT_LIST_CHANGE

Получение уведомления об изменении списка доступных сетевых транспортных средств.

WSK_CACHE_SD

Получите кэшированную копию дескриптора безопасности.

WSK_RELEASE_SD

Освободить кэшированную копию дескриптора безопасности.

WSK_SET_STATIC_EVENT_CALLBACKS

Автоматически включите указанные функции обратного вызова событий на всех сокетах.

WSK_TDI_DEVICENAME_MAPPING

Сопоставление сочетаний семейства адресов, типа сокета и протокола с именами устройств транспортов TDI .

WSK_TDI_BEHAVIOR

Управление перенаправлением подсистемы WSK сетевых операций ввода-вывода в транспортЫ TDI .

[in] InputSize

Количество байтов данных в буфере, на которое указывает параметр InputBuffer .

[in, optional] InputBuffer

Буфер, выделенный вызывающим объектом, который предоставляет все входные данные, необходимые для выполнения указанной операции управления. Если для указанной операции управления не требуются входные данные, приложение WSK должно задать для этого параметра значение NULL , а для параметра InputSize — нулевое значение.

[in] OutputSize

Размер (в байтах) буфера, на который указывает параметр OutputBuffer .

[out, optional] OutputBuffer

Буфер, выделенный вызывающим объектом, который получает все выходные данные, возвращаемые указанной операцией управления. Если указанная операция управления не возвращает выходные данные, приложение WSK должно задать для этого параметра значение NULL , а для параметра OutputSize — нулевое значение.

[out, optional] OutputSizeReturned

Указатель на переменную типа ULONG, которая получает количество байтов данных, возвращаемых в буфере, на который указывает параметр OutputBuffer . Приложение WSK должно задать для этого указателя значение NULL , за исключением случаев, когда выполняются все перечисленные ниже условия.

  • Параметр Irp имеет значение NULL.
  • Выполняемая операция возвращает выходные данные в буфере, на который указывает параметр OutputBuffer .
  • Число байтов выходных данных, возвращаемых выполняемой операцией, неизвестно.

[in, out] Irp

Указатель на выделенный вызывающим объектом IRP, который подсистема WSK использует для асинхронного выполнения операции управления. Дополнительные сведения об использовании IRP с функциями WSK см. в разделе Использование IRP с функциями ядра Winsock.

Этот параметр является обязательным, необязательным или должен иметь значение NULL в зависимости от выполняемой операции клиентского управления. Дополнительные сведения о требованиях к этому параметру для каждой поддерживаемой клиентской операции управления см. в разделе Операции клиентского управления WSK.

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

WskControlClient возвращает один из следующих кодов NTSTATUS:

Код возврата Описание
STATUS_SUCCESS Операция управления успешно завершена. Если приложение WSK указало указатель на IRP в параметре Irp , IRP будет завершена с состоянием успешного выполнения.
STATUS_PENDING Подсистеме WSK не удалось немедленно завершить операцию управления. Подсистема WSK завершит IRP после завершения операции управления. Состояние операции управления будет возвращено в поле IoStatus.Status IRP.
STATUS_BUFFER_OVERFLOW Выходной буфер недостаточно велик, чтобы содержать возвращаемые данные. Переменная, на которую указывает параметр OutputSizeReturned , содержит требуемый размер буфера.
Другие коды состояния Произошла ошибка. IRP будет завершен с состоянием сбоя.

Комментарии

Дополнительные сведения об использовании входных и выходных буферов для каждой клиентской операции управления см. в разделе Операции клиентского управления WSK.

Если функция WskControlClient возвращает STATUS_PENDING, все буферы, на которые указывает параметр InputBuffer или OutputBuffer , должны оставаться действительными до завершения IRP. Если приложение WSK выделило буферы с помощью одной из функций ExAllocateXxx , оно не сможет освободить память с помощью соответствующей функции ExFreeXxx до завершения IRP. Если приложение WSK выделило буферы в стеке, оно не может вернуться из функции, вызывающей функцию WskControlClient , до завершения IRP.

Примечание TDI не будет поддерживаться в версиях Microsoft Windows после Windows Vista. Вместо этого используйте платформу фильтрации Windows или ядро Winsock .
 

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Универсальное
Верхняя часть wsk.h (включая Wsk.h)
IRQL <= DISPATCH_LEVEL

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

Операции управления клиентом WSK

WSK_CLIENT

WSK_PROVIDER_DISPATCH

WSK_PROVIDER_NPI

WSK_TRANSPORT

WskCaptureProviderNPI