次の方法で共有


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_RTSIOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARSIOCTL_SERIAL_GET_COMMSTATUSIOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_HANDFLOWIOCTL_SERIAL_IMMEDIATE_CHARIOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_GET_MODEM_CONTROLIOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATSIOCTL_SERIAL_LSRMST_INSERTIOCTL_SERIAL_SET_BAUD_RATEIOCTL_SERIAL_SET_BREAK_OFFIOCTL_SERIAL_SET_BREAK_ONIOCTL_SERIAL_SET_CHARSIOCTL_SERIAL_SET_DTRIOCTL_SERIAL_SET_FIFO_CONTROLIOCTL_SERIAL_SET_HANDFLOWIOCTL_SERIAL_SET_LINE_CONTROLIOCTL_SERIAL_SET_MODEM_CONTROLIOCTL_SERIAL_SET_RTSIOCTL_SERIAL_SET_XOFFIOCTL_SERIAL_SET_XONIOCTL_SERIAL_XOFF_COUNTEREvtSerCxControl コールバック関数を登録するには、コントローラー ドライバーは、EvtDriverDeviceAdd コールバック中に SerCxInitialize メソッドを呼び出します。

このコールバックの関数型は、次のように Sercx.h で宣言されています。

typedef NTSTATUS
  EVT_SERCX_CONTROL(
    __in WDFREQUEST Request,
    __in size_t OutputBufferLength,
    __in size_t InputBufferLength,
    __in ULONG IoControlCode
    );

という名前の 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 以降で使用できます。
ターゲット プラットフォーム の デスクトップ
ヘッダー sercx.h
IRQL IRQL <= DISPATCH_LEVEL で呼び出されます

関連項目

EvtDriverDeviceAdd の

SerCxInitialize