次の方法で共有


IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion メソッド (wudfusb.h)

[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、Windows 10 の新しいバージョンでは UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。 詳細については、「UMDFの概要」を参照してください。

ドライバーの OnReaderCompletion イベント コールバック関数は、継続的リーダーが正常に読み取り要求を完了したことをドライバーに通知します。

構文

void OnReaderCompletion(
  [in] IWDFUsbTargetPipe *pPipe,
  [in] IWDFMemory        *pMemory,
  [in] SIZE_T            NumBytesTransferred,
  [in] PVOID             Context
);

パラメーター

[in] pPipe

ドライバーが連続リーダーを有効にした USB パイプの IWDFUsbTargetPipe インターフェイスへのポインター。

[in] pMemory

USB パイプから読み取られたデータを含む読み取りバッファーの IWDFMemory インターフェイスへのポインター。

[in] NumBytesTransferred

読み取りバッファーに含まれるバイト数。

[in] Context

ドライバーが以前に IWDFUsbTargetPipe2::ConfigureContinuousReader 呼び出したときにドライバーが提供したコンテキスト情報へのポインター。

戻り値

何一つ

備考

IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion コールバック関数を登録するには、ドライバーが IWDFUsbTargetPipe2::ConfigureContinuousReader を呼び出すときに、ドライバー IUsbTargetPipeContinuousReaderCallbackReadComplete インターフェイスへのポインターを提供する必要があります。

ドライバーが USB パイプの連続リーダーを作成した場合、フレームワークは、ドライバーの I/O ターゲットが正常に読み取り要求を完了するたびに、ドライバーの OnReaderCompletion コールバック関数を呼び出します。 I/O ターゲットが要求を正常に完了しなかった場合、フレームワークはドライバーの IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure コールバック関数を呼び出します。

デバイスから読み取られたデータを含むバッファーにアクセスするには、ドライバーは IWDFMemory::GetDataBuffer 呼び出すことができます。 フレームワークは、IWDFUsbTargetPipe2::ConfigureContinuousReader HeaderLength パラメーターによって定義されたヘッダーの後に、バッファーにデータを書き込みます。 IWDFMemory::GetDataBuffer が返すポインターはヘッダーの先頭を指しますが、コールバック関数の NumBytesTransferred パラメーター onReaderCompletion にはヘッダーの長さが含まれていないことに注意してください。

既定では、OnReaderCompletion コールバック関数が返された後、フレームワークによってバッファーのメモリ オブジェクトが削除されます。 ただし、コールバック関数が戻った後もメモリ オブジェクトを有効なままにしたい場合があります。 たとえば、ドライバーがコールバック関数が返された後にメモリ オブジェクトの内容を処理できるように、フレームワーク パイプ オブジェクトの コンテキスト空間 にメモリ オブジェクトのインターフェイス ポインターを格納する場合があります。 メモリ オブジェクトの有効期間を延長するには、コールバック関数はバッファーの IWDFMemory::AddRef メソッドを呼び出す必要があります。 その後、ドライバーは、フレームワークがオブジェクトを削除できるように、バッファーの IWDFMemory::Release メソッドを呼び出す必要があります。

フレームワークは、OnReaderCompletion への呼び出しを同期し、次の規則に従って IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure コールバック関数を します。

  • これらのコールバック関数は、個々の USB パイプに対して同時に実行されません。
  • 複数の OnReaderCompletion と onReaderFailure コールバック関数を、ドライバーが複数の USB パイプに対して複数の連続リーダーを作成する場合、複数のコールバック関数を同時に実行できます。
  • ドライバーが IWDFUsbTargetPipe2::ConfigureContinuousReader 呼び出すときに NumPendingReads の既定の 値を指定した場合 (または 1 より大きい NumPendingReads 値を指定している場合)、および OnReaderCompletion コールバック関数の実行中に読み取り要求が完了した場合、 フレームワークは、コールバック関数が戻る前に、OnReaderCompletion コールバック関数をもう一度呼び出すことができます。
  • フレームワークは、これらのコールバック関数を他のコールバック関数と同期しません。
ドライバーが IWDFUsbTargetPipe2::ConfigureContinuousReader を呼び出すときに、IObjectCleanup::OnCleanup コールバック関数を指定できます。 フレームワークは、OnReaderCompletion コールバック関数が返された後、メモリ オブジェクトを削除しようとしたときに、そのコールバック関数を呼び出します。

OnReaderCompletion コールバック関数と USB I/O ターゲットの詳細については、「USB I/O ターゲットの処理」を参照してください。

必要条件

要件 価値
サポート終了 UMDF 2.0 以降では使用できません。
ターゲット プラットフォーム デスクトップ
UMDF の最小バージョン する 1.9
ヘッダー wudfusb.h (Wudfusb.h を含む)

関連項目

IUsbTargetPipeContinuousReaderCallbackReadComplete

IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure