共用方式為


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。 架構會將數據寫入緩衝區,在WDF_USB_CONTINUOUS_READER_CONFIG 結構的 HeaderLength 成員所定義的標頭之後。 請注意, WdfMemoryGetBuffer 傳回的指標會指向標頭的開頭,但 EvtUsbTargetPipeReadComplete 回呼函式的 NumBytesTransferred 參數 不包含 標頭的長度。

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

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

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

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

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

規格需求

需求
目標平台 Universal
最小 KMDF 版本 1.0
最低UMDF版本 2.0
標頭 wdfusb.h (包含 Wdf.h)
IRQL <=DISPATCH_LEVEL (請參閱一節。)

另請參閱

EvtUsbTargetPipeReadersFailed

WDF_USB_CONTINUOUS_READER_CONFIG

WdfMemoryGetBuffer