IOCTL_SERIAL_PURGE 请求取消指定的请求,并从指定的缓冲区中删除数据。 清除请求可用于取消所有读取请求和写入请求,以及从接收缓冲区和传输缓冲区中删除所有数据。
清除请求的完成并不指示清除请求取消的请求已完成。 客户端必须在客户端释放或重复使用相应的 IRP 之前验证清除的请求是否已完成。
主要代码
输入缓冲区
AssociatedIrp.SystemBuffer 成员指向客户端分配的 ULONG,该 ULONG 用于输入 清除掩码。 客户端将清除掩码设置为以下一个或多个清除标志的按位 OR:
SERIAL_PURGE_RXABORT
-
清除所有读取(IRP_MJ_READ)请求。
SERIAL_PURGE_RXCLEAR
-
清除接收缓冲区(如果存在)。
SERIAL_PURGE_TXABORT
-
清除所有写入(IRP_MJ_WRITE)请求。
SERIAL_PURGE_TXCLEAR
-
清除传输缓冲区(如果存在)。
输入缓冲区长度
Parameters.DeviceIoControl.InputBufferLength 成员设置为 ULONG 的大小(以字节为单位)。
输出缓冲区
没有。
输出缓冲区长度
没有。
状态块
如果请求成功,则 信息 成员设置为 ULONG 的大小(以字节为单位)。 否则,信息 成员设置为零。
状态 成员设置为串行设备控制请求 泛型状态值之一。 STATUS_INVALID_PARAMETER的状态指示清除掩码无效。
言论
Serial.sys 和 SerCx 允许 IOCTL_SERIAL_PURGE 请求指定一个或多个SERIAL_PURGE_XXX 标志的任意组合。 但是,SerCx2 更严格。
SerCx2 要求清除接收缓冲区时清除所有读取请求。 因此,如果在 IOCTL_SERIAL_PURGE 请求中设置了SERIAL_PURGE_RXCLEAR标志,则 SerCx2 I/O 请求队列不得包含任何读取请求,或者必须设置SERIAL_PURGE_RXABORT标志。 否则,IOCTL_SERIAL_PURGE 请求会失败并显示STATUS_INVALID_DEVICE_STATE状态代码。
同样,SerCx2 要求清除传输缓冲区时清除所有写入请求。 因此,如果在 IOCTL_SERIAL_PURGE 请求中设置了SERIAL_PURGE_TXCLEAR标志,则 SerCx2 I/O 请求队列不得包含任何写入请求,或者必须设置SERIAL_PURGE_TXABORT标志。 否则,IOCTL_SERIAL_PURGE 请求会失败并显示STATUS_INVALID_DEVICE_STATE状态代码。
有关 SerCx2、SerCx 和 Serial.sys的详细信息,请参阅 串行控制器驱动程序概述。
要求
| 要求 | 价值 |
|---|---|
| 标头 | ntddser.h (包括 Ntddser.h) |