IOCTL_SERIAL_PURGE IOCTL (ntddser.h)
La solicitud IOCTL_SERIAL_PURGE cancela las solicitudes especificadas y elimina los datos de los búferes especificados. La solicitud de purga se puede usar para cancelar todas las solicitudes de lectura y escritura y para eliminar todos los datos del búfer de recepción y el búfer de transmisión.
La finalización de la solicitud de purga no indica que se completen las solicitudes canceladas por la solicitud de purga. Un cliente debe comprobar que las solicitudes purgadas se completan antes de que el cliente libere o reutilice los IRP correspondientes.
Código principal
Búfer de entrada
El miembro AssociatedIrp.SystemBuffer apunta a un ULONG asignado por el cliente que se usa para introducir una máscara de purga. El cliente establece la máscara de purga en un OR bit a bit de una o varias de las marcas de purga siguientes:
SERIAL_PURGE_RXABORT
-
Purga todas las solicitudes de lectura (IRP_MJ_READ).
SERIAL_PURGE_RXCLEAR
-
Purga el búfer de recepción, si existe uno.
SERIAL_PURGE_TXABORT
-
Purga todas las solicitudes de escritura (IRP_MJ_WRITE).
SERIAL_PURGE_TXCLEAR
-
Purga el búfer de transmisión, si existe uno.
Longitud del búfer de entrada
El miembro Parameters.DeviceIoControl.InputBufferLength se establece en el tamaño, en bytes, de un ULONG.
Búfer de salida
Ninguno.
Longitud del búfer de salida
Ninguno.
Bloque de estado
Si la solicitud se realiza correctamente, el miembro Information se establece en el tamaño, en bytes, de un ULONG. De lo contrario, el miembro Information se establece en cero.
El miembro Status se establece en uno de los valores de estado genéricos para las solicitudes de control de dispositivos serie. Un estado de STATUS_INVALID_PARAMETER indica que la máscara de purga no es válida.
Comentarios
Serial.sys y SerCx permiten que una solicitud de IOCTL_SERIAL_PURGE especifique cualquier combinación de una o varias marcas SERIAL_PURGE_XXX . Sin embargo, SerCx2 es más restrictivo.
SerCx2 requiere que todas las solicitudes de lectura se purguen si se purga el búfer de recepción. Por lo tanto, si la marca de SERIAL_PURGE_RXCLEAR se establece en una solicitud de IOCTL_SERIAL_PURGE , la cola de solicitudes de E/S de SerCx2 no debe contener ninguna solicitud de lectura o la marca de SERIAL_PURGE_RXABORT debe establecerse. De lo contrario, se produce un error en la solicitud de IOCTL_SERIAL_PURGE con un código de estado de STATUS_INVALID_DEVICE_STATE.
Del mismo modo, SerCx2 requiere que todas las solicitudes de escritura se purguen si se purga el búfer de transmisión. Por lo tanto, si la marca de SERIAL_PURGE_TXCLEAR se establece en una solicitud de IOCTL_SERIAL_PURGE , la cola de solicitudes de E/S de SerCx2 no debe contener ninguna solicitud de escritura o la marca de SERIAL_PURGE_TXABORT debe establecerse. De lo contrario, se produce un error en la solicitud de IOCTL_SERIAL_PURGE con un código de estado de STATUS_INVALID_DEVICE_STATE.
Para obtener más información sobre SerCx2, SerCx y Serial.sys, consulte Información general sobre controladores de controlador serie.
Requisitos
Requisito | Valor |
---|---|
Header | ntddser.h (incluya Ntddser.h) |