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 ,讓架構可以刪除物件。
架構會根據下列規則同步處理 對 EvtUsbTargetPipeReadComplete 和 EvtUsbTargetPipeReadersFailed 回呼函式的呼叫:
- 這些回呼函式不會針對個別 USB 管道同時執行。
- 如果驅動程式為多個 USB 管道建立多個連續讀取器,且有多個 EvtUsbTargetPipeReadComplete 和 EvtUsbTargetPipeReadersFailed 回呼函式,則多個回呼函式可以同時執行。
- 如果驅動程式已指定預設 的 NumPendingReads 值或大於 1 的值,而且如果讀取要求在 EvtUsbTargetPipeReadComplete 回呼函式執行時完成,架構可以在回呼函式傳回之前再次呼叫 EvtUsbTargetPipeReadComplete 回呼函式。
- 架構不會與任何其他回呼函式同步處理這些回呼函式。
驅動程式在使用記憶體物件完成時,必須呼叫 WdfObjectDereference 。 然後,如果提供) 並刪除記憶體對象,架構就可以呼叫驅動程式的 EvtDestroyCallback 回 呼函式 (。
如需 EvtUsbTargetPipeReadComplete 回呼函式和 USB I/O 目標的詳細資訊,請參閱 USB I/O 目標。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | wdfusb.h (包含 Wdf.h) |
IRQL | <=DISPATCH_LEVEL (請參閱一節。) |