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
指向通过 WskCaptureProviderNPI 函数的 WskProviderNpi 参数返回的 WSK_CLIENT 结构的指针。
[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 子系统是否会将网络 I/O 转移到 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,但以下所有内容均为 true 时除外:
- Irp 参数 NULL。
- 所执行的作返回 OutputBuffer 参数指向的缓冲区中的输出数据。
- 所执行的作返回的输出数据的字节数未知。
[in, out] Irp
指向 WSK 子系统用于异步完成控制作的调用方分配的 IRP 的指针。 有关将 IRP 与 WSK 函数配合使用的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用。
此参数是必需的,是可选的,或者必须 NULL,具体取决于正在执行的特定客户端控制作。 有关每个受支持的客户端控制作此参数的要求的详细信息,请参阅 WSK 客户端控制作。
返回值
WskControlClient 返回以下 NTSTATUS 代码之一:
返回代码 | 描述 |
---|---|
STATUS_SUCCESS | 控制作已成功完成。 如果 WSK 应用程序在 Irp 参数中指定了指向 IRP 的指针,则 IRP 将以成功状态完成。 |
STATUS_PENDING | WSK 子系统无法立即完成控制作。 完成控制作后,WSK 子系统将完成 IRP。 控制作的状态将在 IRP 的 IoStatus.Status 字段中返回。 |
STATUS_BUFFER_OVERFLOW | 输出缓冲区不够大,无法包含返回的数据。 OutputSizeReturned 参数指向的变量包含所需的缓冲区大小。 |
其他状态代码 | 发生错误。 IRP 将以失败状态完成。 |
言论
若要详细了解输入和输出缓冲区如何用于每个客户端控制作,请参阅 WSK 客户端控制作。
如果 WskControlClient 函数返回STATUS_PENDING,则 InputBuffer 参数指向的任何缓冲区或 OutputBuffer 参数必须保持有效,直到 IRP 完成。 如果 WSK 应用程序使用 ExAllocateXxx 函数之一分配了缓冲区,则在 IRP 完成后,它才能使用相应的 ExFreeXxx 函数释放内存。 如果 WSK 应用程序在堆栈上分配了缓冲区,则它无法从调用 WskControlClient 函数的函数返回,直到 IRP 完成后。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 普遍 |
标头 | wsk.h (包括 Wsk.h) |
IRQL | <= DISPATCH_LEVEL |