[KMDF と UMDF に適用]
WdfUsbTargetPipeConfigContinuousReader メソッドは、指定された USB パイプから継続的に読み取るフレームワークを構成します。
構文
NTSTATUS WdfUsbTargetPipeConfigContinuousReader(
[in] WDFUSBPIPE Pipe,
[in] PWDF_USB_CONTINUOUS_READER_CONFIG Config
);
パラメーター
[in] Pipe
WdfUsbInterfaceGetConfiguredPipe 呼び出すことによって取得されたフレームワーク パイプ オブジェクトへのハンドル。
[in] Config
呼び出し元によって割り当てられた WDF_USB_CONTINUOUS_READER_CONFIG 構造体へのポインター。
戻り値
WdfUsbTargetPipeConfigContinuousReader 、操作が成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返すことができます。
リターン コード | 形容 |
---|---|
|
Config パラメーターが指定した WDF_USB_CONTINUOUS_READER_CONFIG 構造体のサイズが正しくありません。 |
|
無効なパラメーターが検出されました。 |
|
メモリが不足していました。 |
|
パイプの型が無効でした。 |
|
の HeaderLength、TransferLength、または TrailerLength メンバーが、Config パラメーターでサイズが大きすぎるか無効であることを指定した WDF_USB_CONTINUOUS_READER_CONFIG 構造体です。 |
|
読み取りバッファーのサイズは、パイプの最大パケット サイズの倍数ではありません。 |
WdfUsbTargetPipeConfigContinuousReader メソッドが返す可能性があるその他の戻り値の一覧については、「Framework オブジェクト作成エラー」を参照してください。
このメソッドは、他のNTSTATUS 値を返す場合もあります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
備考
バルク パイプまたは割り込みパイプの連続リーダーを構成できます。 パイプには入力エンドポイントが必要です。
WdfUsbTargetPipeConfigContinuousReader を呼び出して継続的リーダーを構成した後、ドライバーは WdfIoTargetStart 呼び出してリーダーを起動する必要があります。 リーダーを停止するには、ドライバーは WdfIoTargetStop 呼び出す必要があります。
通常、ドライバーは、EvtDevicePrepareHardware コールバック関数内から WdfUsbTargetPipeConfigContinuousReader を呼び出します。 ドライバーは、EvtDeviceD0Entry コールバック関数内から WdfIoTargetStart を呼び出し、EvtDeviceD0Exit コールバック関数内から WdfIoTargetStop 呼び出す必要があります。
パイプの I/O ターゲットが正常に読み取り要求を完了するたびに、フレームワークはドライバーの EvtUsbTargetPipeReadComplete コールバック関数を呼び出します。 I/O ターゲットが要求の処理中にエラーを報告した場合、フレームワークは、すべての読み取り要求が完了した後、ドライバーの EvtUsbTargetPipeReadersFailed コールバック関数を呼び出します。 (したがって、EvtUsbTargetPipeReadersFailed コールバック関数の実行中は、EvtUsbTargetPipeReadComplete コールバック関数は呼び出されません)。
EvtUsbTargetPipeReadersFailed コールバック 省略可能な値を指定しない場合、フレームワークは別の読み取り要求を送信して失敗した読み取り試行に応答します。 そのため、バスが読み取りを受け入れられない状態にある場合、フレームワークは、失敗した読み取りから復旧するための新しい要求を継続的に送信します。
ドライバーが WdfUsbTargetPipeConfigContinuousReader 呼び出した後、連続リーダーが停止していない限り、ドライバーは WdfUsbTargetPipeReadSynchronously 使用したり、WdfRequestSend を して I/O 要求をパイプに送信したりすることはできません。 リーダーを停止するために、ドライバーは WdfIoTargetStop 呼び出すか、EvtUsbTargetPipeReadersFailed コールバック関数から FALSE 返すことができます。 リーダーの停止中にドライバーが WdfUsbTargetPipeReadSynchronously 呼び出す場合は、RequestOptions パラメーターの Flags メンバーにWDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE フラグを設定する必要があります。 それ以外の場合、要求はターゲットが再起動されるまでペンで処理されます。
フレームワークは、内部 URBにUSBD_SHORT_TRANSFER_OK フラグを設定します。 このフラグを設定すると、データ転送の最後のパケットが最大パケット サイズより小さくなります。
WdfUsbTargetPipeConfigContinuousReader メソッドと USB I/O ターゲットの詳細については、「パイプ からの読み取り」を参照してください。
例
次のコード例では、WDF_USB_CONTINUOUS_READER_CONFIG 構造体を初期化し、WdfUsbTargetPipeConfigContinuousReader 呼び出します。
WDF_USB_CONTINUOUS_READER_CONFIG contReaderConfig;
NTSTATUS status;
WDF_USB_CONTINUOUS_READER_CONFIG_INIT(
&contReaderConfig,
OsrFxEvtUsbInterruptPipeReadComplete,
DeviceContext,
sizeof(UCHAR)
);
status = WdfUsbTargetPipeConfigContinuousReader(
Pipe,
&contReaderConfig
);
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
最小 KMDF バージョン | 1.0 |
UMDF の最小バージョン を する | 2.0 |
ヘッダー | wdfusb.h (Wdfusb.h を含む) |
ライブラリ | Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
DDI コンプライアンス規則 を する | DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbContReader(kmdf), usbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
関連項目
EvtDeviceD0Entry の
EvtDeviceD0Exit の
EvtDevicePrepareHardware の
EvtUsbTargetPipeReadComplete の
EvtUsbTargetPipeReadersFailed の
WDF_USB_CONTINUOUS_READER_CONFIG
WDF_USB_CONTINUOUS_READER_CONFIG_INIT
WdfIoTargetStart の
WdfIoTargetStop を する
WdfUsbInterfaceGetConfiguredPipe の