次の方法で共有


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::ConfigureContinuousReaderHeaderLength パラメーターによって定義されたヘッダーの後に、データをバッファーに書き込みます。 IWDFMemory::GetDataBuffer が返すポインターはヘッダーの先頭を指しますが、OnReaderCompletion コールバック関数の NumBytesTransferred パラメーターにはヘッダーの長さが含まれていないことに注意してください。

既定では、 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
Header wudfusb.h (Wudfusb.h を含む)

こちらもご覧ください

IUsbTargetPipeContinuousReaderCallbackReadComplete

IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure