読み取り/書き込み要求の SerCx2 処理
周辺機器ドライバーは、書き込み (IRP_MJ_WRITE) と読み取り (IRP_MJ_READ) 要求をシリアル コントローラー上のポートに送信し、ポートに接続されている周辺機器との間でデータを転送します。 SerCx2 がこれらの要求を処理する方法は、要求のタイムアウトたキャンセル時に関しても明確に定義されています。
読み取りまたは書き込み要求の取り消し
読み取りまたは書き込み要求は、オペレーティング システムまたは要求を送信した周辺機器ドライバーによって完了前に取り消される可能性があります。 SerCx2 が要求のデータを転送する前にキャンセルが発生した場合、SerCx2 は STATUS_CANCELLED 状態コードを使用して要求を完了します。
ただし、要求に対して 1 バイト以上のデータが転送された後で、要求のすべてのデータが転送される前に、読み取りまたは書き込み要求が取り消された場合、SerCx2 は STATUS_SUCCESS 状態コードを使用して要求を完了します。 完了した要求は、要求の処理中に SerCx2 によって読み取られたバイト数または書き込まれたバイト数を報告します。 必要に応じて、要求を送信した周辺機器ドライバーは、この情報を使用して、部分的に完了した読み取りまたは書き込み操作を完了する 2 番目の要求を送信できます。
タイムアウトした要求
リクエストの処理に時間がかかりすぎる場合、読み取りまたは書き込みリクエストはタイムアウトすることがあります。 また、シリアル コントローラーが受信した 2 つの連続したバイト間の時間が、許容される最大時間を超えると、読み取り要求がタイムアウトする可能性があります。 いずれの場合も、タイムアウト状態が検出されると、SerCx2 は STATUS_TIMEOUT 状態コードを使用してすぐに要求を完了します。 完了した要求は、要求の処理中に SerCx2 によって読み取られたバイト数または書き込まれたバイト数を報告します。 必要に応じて、要求を送信した周辺機器ドライバーは、この情報を使用して、部分的に完了した読み取りまたは書き込み操作を完了する 2 番目の要求を送信できます。 これらのタイムアウトの詳細については、「SERIAL_TIMEOUTS」を参照してください。
ハードウェア制限の影響
通常、SerCx2 は、タイムアウトまたはキャンセルされた読み取りまたは書き込み要求によって転送されたバイト数を正確に報告します。 ただし、システム DMA トランザクションの実行に使用されるハードウェアによっては、部分的に完了した読み取りまたは書き込みトランザクションによって転送されたバイト数が正確にカウントされない場合があります。 その場合、関連付けられている読み取りまたは書き込み要求は、転送されたバイトのおおよその数のみを報告する可能性があります。
0 バイトの転送要求
SerCx2 は 0 バイトを転送する読み取りまたは書き込み要求への応答として STATUS_SUCCESS 状態コードを使用して要求を完了しますが、操作は実行しません。