シリアル I/O 要求インターフェイス
シリアル コントローラーのポートに接続されている周辺機器を制御するために、クライアント アプリケーションか周辺機器ドライバーが、ポートに I/O 要求を送信します。 クライアントは、IRP_MJ_WRITE 要求と IRP_MJ_READ 要求を使用して、シリアル ポートとの間でデータを送受信します。 さらに Windows によって、クライアントがシリアル ポートの構成に使用できる一連のシリアル I/O 制御要求 (IOCTL) が定義されます。
シリアル IRP_MJ_XXX 要求とシリアル IOCTL は組み合わされて、広範にわたるシリアル コントローラー デバイスでサポートされるシリアル I/O 要求インターフェイスを形成します。 このインターフェイスは、Serial.sys ドライバーによって、また、SerCx2 か SerCx と拡張機能ベースのシリアル コントローラー ドライバーの組み合わせによってサポートされます。
SerCx2、SerCx、Serial.sys が共通してサポートするシリアル IOCTL はたくさんあります。 ただし、SerCx2、SerCx、Serial.sys がそれぞれサポートする、シリアル デバイス制御要求で指定される IOCTL のサブセットには、違いがあります。 次の表は、SerCx2、SerCx、Serial.sys でサポートされている IOCTL のサブセットをまとめたものです。 表で "はい" になっているものは、その IOCTL がシリアル フレームワーク拡張機能かドライバーでサポートされていることを表し、"いいえ" になっているものはサポートされていないことを表します。
シリアル IOCTL | SerCx2 | SerCx | Serial.sys |
---|---|---|---|
はい |
はい |
いいえ |
|
いいえ |
はい |
はい |
|
注 1 を参照してください。 |
はい |
はい |
|
はい |
はい |
はい |
|
いいえ |
いいえ |
はい |
|
はい |
はい |
はい |
|
注 2 を参照してください。 |
はい |
はい |
|
はい |
はい |
はい |
|
はい |
はい |
はい |
|
注 1 を参照してください。 |
はい |
はい |
|
はい |
はい |
はい |
|
IOCTL_SERIAL_GET_MODEM_CONTROL (注 4 を参照) |
はい |
はい |
はい |
いいえ |
はい |
はい |
|
はい |
はい |
はい |
|
いいえ |
はい |
はい |
|
はい |
はい |
はい |
|
はい |
はい |
はい |
|
いいえ |
はい |
はい |
|
いいえ |
はい |
はい |
|
はい |
はい |
はい |
|
IOCTL_SERIAL_RESET_DEVICE (注 5 を参照) |
いいえ |
いいえ |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
|
はい |
はい |
はい |
|
注 2 を参照してください。 |
はい |
はい |
|
注 1 を参照してください。 |
はい |
はい |
|
注 1 を参照してください。 |
はい |
はい |
|
IOCTL_SERIAL_SET_HANDFLOW (注 3 を参照) |
はい |
はい |
はい |
はい |
はい |
はい |
|
IOCTL_SERIAL_SET_MODEM_CONTROL (注 4 を参照) |
はい |
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
|
はい |
はい |
はい |
|
はい |
はい |
はい |
|
いいえ |
はい |
はい |
|
いいえ |
はい |
はい |
|
はい |
はい |
はい |
|
いいえ |
はい |
はい |
SerCx2 では、実装されているシリアル コントローラー ドライバーや、シリアル コントローラー ハードウェアの機能によっては、この IOCTL がサポートされない場合もあります。
SerCx2 は特殊文字をサポートしていません。 SerCx2 は、常に STATUS_SUCCESS 状態コードを使用して IOCTL_SERIAL_SET_CHARS 要求を完了しますが、この要求に応答して何らかの特殊文字を設定したり、その他の操作を実行したりすることはありません。 IOCTL_SERIAL_GET_CHARS 要求に対しては、SerCx2 は、SERIAL_CHARS 構造体のすべての文字値を null に設定し、STATUS_SUCCESS 状態コードを使用して要求を完了します。
SerCx2 と SerCx は、SERIAL_HANDFLOW 構造体の FlowReplace メンバーと ControlHandShake メンバーに定義されているフラグのサブセットのみをサポートします。 Serial.sys は、これらのフラグをすべてサポートしています。 詳細については、「SERIAL_HANDFLOW」を参照してください。
IOCTL_SERIAL_GET_MODEM_CONTROL 要求と IOCTL_SERIAL_SET_MODEM_CONTROL 要求は、主にハードウェアのテストに使用されます。 モデム制御操作については、標準のレジスタ レイアウトは定義されていません。 モデム制御 IOCTL を使用する周辺機器ドライバーには、特定のシリアル コントローラーのハードウェア機能に依存するリスクがあります。
Serial.sys ドライバーは、常に STATUS_SUCCESS で IOCTL_SERIAL_RESET_DEVICE 要求を完了しますが、この要求に応答して何らかの操作を実行することはありません。 SerCx2 と SerCx は、IOCTL_SERIAL_RESET_DEVICE 要求をサポートしておらず、これらの要求は常に STATUS_NOT_IMPLEMENTED で完了します。
シリアル コントローラーの IOCTL_SERIAL_XXX 要求と、読み取り/書き込み要求の詳細については、ntddser.h ヘッダーを参照してください。