IOCTL_SERIAL_PURGE IOCTL (ntddser.h)
IOCTL_SERIAL_PURGE 要求は、指定した要求を取り消し、指定したバッファーからデータを削除します。 消去要求を使用すると、すべての読み取り要求と書き込み要求を取り消し、受信バッファーと送信バッファーからすべてのデータを削除できます。
消去要求の完了は、消去要求によって取り消された要求が完了したことを示すものではありません。 クライアントは、クライアントが対応する IRP を解放または再利用する前に、消去された要求が完了したことを確認する必要があります。
メジャー コード
入力バッファー
AssociatedIrp.SystemBuffer メンバーは、消去マスクを入力するために使用されるクライアント割り当て ULONG を指します。 クライアントは、消去マスクを次の 1 つ以上の消去フラグのビットごとの OR に設定します。
SERIAL_PURGE_RXABORT
-
すべての読み取り (IRP_MJ_READ) 要求を消去します。
SERIAL_PURGE_RXCLEAR
-
受信バッファーが存在する場合は、そのバッファーを消去します。
SERIAL_PURGE_TXABORT
-
すべての書き込み (IRP_MJ_WRITE) 要求を消去します。
SERIAL_PURGE_TXCLEAR
-
送信バッファーが存在する場合は、そのバッファーを消去します。
入力バッファーの長さ
Parameters.DeviceIoControl.InputBufferLength メンバーは、ULONG のサイズ (バイト単位) に設定されます。
出力バッファー
何一つ。
出力バッファーの長さ
何一つ。
状態ブロック
要求が成功した場合、Information メンバーは ULONG のサイズ (バイト単位) に設定されます。 それ以外の場合、Information メンバーは 0 に設定されます。
Status メンバーは、シリアル デバイス制御要求 の汎用ステータス値のいずれかに設定されます。 STATUS_INVALID_PARAMETERの状態は、消去マスクが無効であることを示します。
備考
Serial.sys および SerCx を使用すると、IOCTL_SERIAL_PURGE 要求で 1 つ以上のSERIAL_PURGE_XXX フラグの任意の組み合わせを指定できます。 ただし、SerCx2 の方が制限が厳しくなっています。
SerCx2 では、受信バッファーが消去された場合、すべての読み取り要求を消去する必要があります。 したがって、SERIAL_PURGE_RXCLEAR フラグが IOCTL_SERIAL_PURGE 要求で設定されている場合は、SerCx2 I/O 要求キューに読み取り要求を含めないようにするか、SERIAL_PURGE_RXABORT フラグを設定する必要があります。 それ以外の場合、IOCTL_SERIAL_PURGE 要求はSTATUS_INVALID_DEVICE_STATE状態コードで失敗します。
同様に、SerCx2 では、送信バッファーが消去された場合は、すべての書き込み要求を消去する必要があります。 したがって、SERIAL_PURGE_TXCLEAR フラグが IOCTL_SERIAL_PURGE 要求で設定されている場合は、SerCx2 I/O 要求キューに書き込み要求を含めないようにするか、SERIAL_PURGE_TXABORT フラグを設定する必要があります。 それ以外の場合、IOCTL_SERIAL_PURGE 要求はSTATUS_INVALID_DEVICE_STATE状態コードで失敗します。
SerCx2、SerCx、および Serial.sysの詳細については、「シリアル コントローラー ドライバーの概要を参照してください。
必要条件
要件 | 価値 |
---|---|
ヘッダー | ntddser.h (Ntddser.h を含む) |