シリアル 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

IOCTL_SERIAL_APPLY_DEFAULT_CONFIGURATION

はい

はい

いいえ

IOCTL_SERIAL_CLEAR_STATS

いいえ

はい

はい

IOCTL_SERIAL_CLR_DTR

注 1 を参照してください。

はい

はい

IOCTL_SERIAL_CLR_RTS

はい

はい

はい

IOCTL_SERIAL_CONFIG_SIZE

いいえ

いいえ

はい

IOCTL_SERIAL_GET_BAUD_RATE

はい

はい

はい

IOCTL_SERIAL_GET_CHARS

注 2 を参照してください。

はい

はい

IOCTL_SERIAL_GET_COMMSTATUS

はい

はい

はい

IOCTL_SERIAL_GET_DTRRTS

はい

はい

はい

IOCTL_SERIAL_GET_HANDFLOW

注 1 を参照してください。

はい

はい

IOCTL_SERIAL_GET_LINE_CONTROL

はい

はい

はい

IOCTL_SERIAL_GET_MODEM_CONTROL (注 4 を参照)

はい

はい

はい

IOCTL_SERIAL_GET_MODEMSTATUS

いいえ

はい

はい

IOCTL_SERIAL_GET_PROPERTIES

はい

はい

はい

IOCTL_SERIAL_GET_STATS

いいえ

はい

はい

IOCTL_SERIAL_GET_TIMEOUTS

はい

はい

はい

IOCTL_SERIAL_GET_WAIT_MASK

はい

はい

はい

IOCTL_SERIAL_IMMEDIATE_CHAR

いいえ

はい

はい

IOCTL_SERIAL_LSRMST_INSERT

いいえ

はい

はい

IOCTL_SERIAL_PURGE

はい

はい

はい

IOCTL_SERIAL_RESET_DEVICE (注 5 を参照)

いいえ

いいえ

はい

IOCTL_SERIAL_SET_BAUD_RATE

はい

はい

はい

IOCTL_SERIAL_SET_BREAK_OFF

はい

はい

はい

IOCTL_SERIAL_SET_BREAK_ON

はい

はい

はい

IOCTL_SERIAL_SET_CHARS

注 2 を参照してください。

はい

はい

IOCTL_SERIAL_SET_DTR

注 1 を参照してください。

はい

はい

IOCTL_SERIAL_SET_FIFO_CONTROL

注 1 を参照してください。

はい

はい

IOCTL_SERIAL_SET_HANDFLOW (注 3 を参照)

はい

はい

はい

IOCTL_SERIAL_SET_LINE_CONTROL

はい

はい

はい

IOCTL_SERIAL_SET_MODEM_CONTROL (注 4 を参照)

はい

はい

はい

IOCTL_SERIAL_SET_QUEUE_SIZE

はい

はい

はい

IOCTL_SERIAL_SET_RTS

はい

はい

はい

IOCTL_SERIAL_SET_TIMEOUTS

はい

はい

はい

IOCTL_SERIAL_SET_WAIT_MASK

はい

はい

はい

IOCTL_SERIAL_SET_XOFF

いいえ

はい

はい

IOCTL_SERIAL_SET_XON

いいえ

はい

はい

IOCTL_SERIAL_WAIT_ON_MASK

はい

はい

はい

IOCTL_SERIAL_XOFF_COUNTER

いいえ

はい

はい

**注**
  1. SerCx2 では、実装されているシリアル コントローラー ドライバーや、シリアル コントローラー ハードウェアの機能によっては、この IOCTL がサポートされない場合もあります。

  2. SerCx2 は特殊文字をサポートしていません。 SerCx2 は、常に STATUS_SUCCESS 状態コードを使用して IOCTL_SERIAL_SET_CHARS 要求を完了しますが、この要求に応答して何らかの特殊文字を設定したり、その他の操作を実行したりすることはありません。 IOCTL_SERIAL_GET_CHARS 要求に対しては、SerCx2 は、SERIAL_CHARS 構造体のすべての文字値を null に設定し、STATUS_SUCCESS 状態コードを使用して要求を完了します。

  3. SerCx2 と SerCx は、SERIAL_HANDFLOW 構造体の FlowReplace メンバーと ControlHandShake メンバーに定義されているフラグのサブセットのみをサポートします。 Serial.sys は、これらのフラグをすべてサポートしています。 詳細については、「SERIAL_HANDFLOW」を参照してください。

  4. IOCTL_SERIAL_GET_MODEM_CONTROL 要求と IOCTL_SERIAL_SET_MODEM_CONTROL 要求は、主にハードウェアのテストに使用されます。 モデム制御操作については、標準のレジスタ レイアウトは定義されていません。 モデム制御 IOCTL を使用する周辺機器ドライバーには、特定のシリアル コントローラーのハードウェア機能に依存するリスクがあります。

  5. Serial.sys ドライバーは、常に STATUS_SUCCESS で IOCTL_SERIAL_RESET_DEVICE 要求を完了しますが、この要求に応答して何らかの操作を実行することはありません。 SerCx2 と SerCx は、IOCTL_SERIAL_RESET_DEVICE 要求をサポートしておらず、これらの要求は常に STATUS_NOT_IMPLEMENTED で完了します。

シリアル コントローラーの IOCTL_SERIAL_XXX 要求と、読み取り/書き込み要求の詳細については、ntddser.h ヘッダーを参照してください。