EVT_SERCX_CONTROL コールバック関数 (sercx.h)
EvtSerCxControl イベント コールバック関数は、シリアル フレームワーク拡張機能 (SerCx) がサポートする I/O 制御コード (IOCTL) を持つ I/O 制御要求を処理します。
構文
EVT_SERCX_CONTROL EvtSercxControl;
NTSTATUS EvtSercxControl(
[in] WDFDEVICE Device,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
パラメーター
[in] Device
シリアル コントローラーを表すフレームワーク デバイス オブジェクトへの WDFDEVICE ハンドル。
[in] Request
I/O 制御要求を表すフレームワーク要求オブジェクトへの WDFREQUEST ハンドル。
[in] OutputBufferLength
Request パラメーターで指定された I/O 制御要求の出力バッファーの長さをバイト単位で指定します。
[in] InputBufferLength
Request パラメーターで指定された I/O 制御要求の入力バッファーの長さをバイト単位で指定します。
[in] IoControlCode
Request パラメーターで指定された I/O 制御要求からの IOCTL を指定します。
戻り値
EvtSerCxControl 関数は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合は、適切なエラー状態コードを返します。 詳細については、「解説」を参照してください。
注釈
このコールバック関数を実装するには、シリアル コントローラー ドライバーが必要です。 SerCx は、この関数を呼び出して、処理のためにコントローラー ドライバーに I/O 制御要求を渡します。 この関数が戻る前に、要求された操作を実行するか、エラー状態を返すことによって要求を完了する必要があります。 特定の要求のサポートを実装していないドライバーは、この要求のSTATUS_NOT_IMPLEMENTEDエラー状態を返す必要があります。
通常、 EvtSerCxControl 関数は、この関数がシリアル コントローラーのハードウェア レジスタの設定を変更する前に、コントローラー ドライバーの ISR に同期する必要があります。
EvtSerCxControl 関数の戻り値は、この関数が I/O 制御要求の状態ブロックに書き込む状態値と一致する必要があります。 SerCx は戻り値を使用して、コントローラー ドライバーとシリアル コントローラー ハードウェアの状態を追跡します。
このコールバック関数を処理するために準備する必要がある IOCTL の一覧を次に示します。
IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTS IOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARS IOCTL_SERIAL_GET_COMMSTATUSIOCTL_SERIAL_GET_HANDFLOW IOCTL_SERIAL_GET_HANDFLOWIOCTL_SERIAL_GET_DTRRTS IOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_IMMEDIATE_CHAR IOCTL_SERIAL_GET_MODEM_CONTROL IOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATS IOCTL_SERIAL_LSRMST_INSERT IOCTL_SERIAL_SET_BAUD_RATEIOCTL_SERIAL_SET_BREAK_OFFIOCTL_SERIAL_SET_BREAK_ONIOCTL_SERIAL_SET_CHARSIOCTL_SERIAL_SET_DTR IOCTL_SERIAL_SET_HANDFLOWIOCTL_SERIAL_SET_FIFO_CONTROLIOCTL_SERIAL_SET_LINE_CONTROL IOCTL_SERIAL_SET_MODEM_CONTROLIOCTL_SERIAL_SET_RTSIOCTL_IOCTL_SERIAL_SET_XONIOCTL_SERIAL_XOFF_COUNTERSERIAL_SET_XOFFEvtSerCxControl コールバック関数を登録するには、コントローラー ドライバーは、EvtDriverDeviceAdd コールバック中に SerCxInitialize メソッドを呼び出します。
例
このコールバックの関数型は、次のように Sercx.h で宣言されています。
typedef NTSTATUS
EVT_SERCX_CONTROL(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
);
という名前MyEvtSerCxControl
の EvtSerCxControl コールバック関数を定義するには、まず、静的ドライバー検証ツール (SDV) やその他の検証ツールで必要な関数宣言を次のように指定する必要があります。
EVT_SERCX_CONTROL MyEvtSerCxControl;
次に、次のようにコールバック関数を実装します。
NTSTATUS
MyEvtSerCxControl(
__in WDFREQUEST Request,
__in size_t OutputBufferLength,
__in size_t InputBufferLength,
__in ULONG IoControlCode
)
{ ... }
関数宣言の SDV 要件の詳細については、「 KMDF ドライバーの関数ロール型を使用した関数の宣言」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8 以降で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | sercx.h |
IRQL | IRQL <= DISPATCH_LEVEL で呼び出されます |