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