共用方式為


EVT_WDF_USB_READER_COMPLETION_ROUTINE回呼函式 (wdfusb.h)

[適用於 KMDF 和 UMDF]

驅動程式的 EvtUsbTargetPipeReadComplete 事件回呼函式會通知驅動程式連續讀取器已成功完成讀取要求。

語法

EVT_WDF_USB_READER_COMPLETION_ROUTINE EvtWdfUsbReaderCompletionRoutine;

void EvtWdfUsbReaderCompletionRoutine(
  [in] WDFUSBPIPE Pipe,
  [in] WDFMEMORY Buffer,
  [in] size_t NumBytesTransferred,
  [in] WDFCONTEXT Context
)
{...}

參數

[in] Pipe

架構管道物件的句柄。

[in] Buffer

架構記憶體物件的句柄,表示包含來自裝置數據的緩衝區。

[in] NumBytesTransferred

讀取緩衝區中的數據位元組數目。

[in] Context

驅動程式定義的內容資訊,該驅動程式在管線 WDF_USB_CONTINUOUS_READER_CONFIG 結構的成員中指定 EvtUsbTargetPipeReadCompleteContext 成員。

傳回值

沒有

言論

若要註冊 EvtUsbTargetPipeReadComplete 回呼函式,驅動程式必須將函式的位址放在 WDF_USB_CONTINUOUS_READER_CONFIG 結構中。

如果驅動程式已為 USB 管道建立連續讀取器,則架構會在驅動程式每次驅動程式的 I/O 目標成功完成讀取要求時,呼叫驅動程式的 EvtUsbTargetPipeReadComplete 回呼函式。 回呼函式會在 I/O 目標完成讀取要求的 IRQL 上呼叫,通常是 IRQL = DISPATCH_LEVEL,但不高於 DISPATCH_LEVEL。 (如果 I/O 目標未成功完成要求,架構會呼叫驅動程式的 EvtUsbTargetPipeReadersFailed 回呼函式。

若要存取包含從裝置讀取資料的緩衝區,驅動程式可以呼叫 WdfMemoryGetBuffer。 架構會將數據寫入緩衝區,在 HeaderLength 所定義的標頭之後,WDF_USB_CONTINUOUS_READER_CONFIG 結構的成員。 請注意,WdfMemoryGetBuffer 的指標 會傳回標頭開頭的點,但 EvtUsbTargetPipeReadComplete 回呼函式的 NumBytesTransferred 參數不會 不包含標頭的長度。

根據預設,架構會在回呼函式傳回 EvtUsbTargetPipeReadComplet e 之後,刪除緩衝區的記憶體物件。 不過,您可能會希望記憶體物件在回呼函式傳回之後保持有效。 例如,您可能希望驅動程式將物件句柄儲存在架構管道對象的內容空間中,讓驅動程式可以在回呼函式傳回之後處理記憶體物件的內容。 若要延長記憶體物件的存留期,回呼函式必須將記憶體物件的句柄傳遞至 WdfObjectReference。 之後,驅動程式必須呼叫 WdfObjectDereference,讓架構可以刪除物件。

架構會根據下列規則同步處理對 EvtUsbTargetPipeReadCompleteEvtUsbTargetPipeReadersFailed 回呼函式的呼叫:

  • 個別USB管道不會同時執行這些回呼函式。
  • 如果驅動程式為多個 USB 管道建立多個連續讀取器,且有多個 EvtUsbTargetPipeReadCompleteEvtUsbTargetPipeReadersFailed 回呼函式,則多個回呼函式可以同時執行。
  • 如果驅動程式已指定預設 NumPendingReads 值或大於 1 的值,而且如果讀取要求在 EvtUsbTargetPipeReadComplete 回呼函式正在執行時完成,則架構可以在回呼函式傳回之前再次呼叫 EvtUsbTargetPipeReadComplete 回呼函式。
  • 架構不會將這些回呼函式與任何其他回呼函式同步處理。
BufferAttributesWDF_USB_CONTINUOUS_READER_CONFIG 結構的成員中,驅動程式可以指定記憶體物件的 EvtCleanupCallbackEvtDestroyCallback 回呼函式。 如果您指定 EvtCleanupCallback 回呼函式,則架構會在 EvtUsbTargetPipeReadComplete 回呼函式傳回之後,嘗試刪除記憶體物件時呼叫該回呼函式。 如果 EvtUsbTargetPipeReadComplete 回呼函式已呼叫 WdfObjectReference,則 EvtCleanupCallback 回呼函式(如果提供的話)不得呼叫 WdfObjectDereference

驅動程式在使用記憶體物件完成時,必須呼叫 WdfObjectDereference。 然後,架構可以呼叫驅動程式的 EvtDestroyCallback 回呼函式(如果提供的話),並刪除記憶體物件。

如需 EvtUsbTargetPipeReadComplete 回呼函式和 USB I/O 目標的詳細資訊,請參閱 USB I/O 目標

要求

要求 價值
目標平臺 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
標頭 wdfusb.h (包括 Wdf.h)
IRQL <=DISPATCH_LEVEL (請參閱一節。)

另請參閱

EvtUsbTargetPipeReadersFailed

WDF_USB_CONTINUOUS_READER_CONFIG

WdfMemoryGetBuffer