EVT_WDF_IO_IN_CALLER_CONTEXT回呼函式 (wdfdevice.h)

[僅適用于 KMDF]

驅動程式的 EvtIoInCallerCoNtext 事件回呼函式會在架構將它放入 I/O 佇列之前預先處理 I/O 要求。

語法

EVT_WDF_IO_IN_CALLER_CONTEXT EvtWdfIoInCallerContext;

void EvtWdfIoInCallerContext(
  [in] WDFDEVICE Device,
  [in] WDFREQUEST Request
)
{...}

參數

[in] Device

架構裝置物件的控制碼。

[in] Request

架構要求物件的控制碼。

傳回值

備註

架構會呼叫驅動程式的 EvtIoInCallerCoNtext 回呼函式,讓驅動程式可以檢查每個 I/O 要求,並可能先對要求執行初步處理,再將它放在 I/O 佇列中。 若要註冊裝置的 EvtIoInCallerCoNtext 回呼函式,驅動程式會呼叫 WdfDeviceInitSetIoInCallerCoNtextCallback

如果驅動程式註冊裝置的 EvtIoInCallerCoNtext 回呼函式,則架構會在每次收到裝置的 I/O 要求時呼叫回呼函式。 回呼函式會在傳送 I/O 要求給驅動程式的進程執行緒內容中呼叫。 此程式是下一個較高層級的驅動程式,或者,如果驅動程式位於驅動程式堆疊的頂端,則為使用者模式應用程式。

此回呼函式的主要用途是讓架構型驅動程式支援 未緩衝處理或直接 I/O 呼叫的緩衝區存取方法。 針對這個緩衝區存取方法,驅動程式必須存取來源程式進程內容中收到的緩衝區。

在回呼函式取得要求的緩衝區之後,它可以將緩衝區位址或控制碼儲存在要求物件的內容儲存體中。 (驅動程式會呼叫 WdfDeviceInitSetRequestAttributes.) 來設定要求物件的內容儲存區域大小

因為要求還不屬於 I/O 佇列,所以架構不會鎖定或同步處理要求。 驅動程式負責任何可能需要的同步處理。 如需同步處理的詳細資訊,請參閱 Framework-Based 驅動程式的同步處理技術

在回呼函式完成前置處理要求之後,它必須藉由呼叫 WdfDeviceEnqueueRequest 將它排入佇列,或藉由呼叫 WdfRequestComplete (偵測到錯誤) 來完成。

如需 EvtIoInCallerCoNtext 回呼函式的詳細資訊,請參閱先 攔截 I/O 要求,再將 I/O 要求排入佇列存取Framework-Based驅動程式中的資料緩衝區

如果驅動程式已設定 I/O 佇列以支援 保證的向前進度,架構可能不會在低記憶體情況下呼叫驅動程式的 EvtIoInCallerCoNtext 回呼函式。 如果所有架構的保留要求物件都正在使用中,架構會延後處理 I/O 要求,直到有保留的要求物件可用為止。 在此情況下,架構無法呼叫延後 I/O 要求的 EvtIoInCallerCoNtext 回呼函式,因為當保留的要求物件可供使用時,架構將不再在傳送 I/O 要求給驅動程式的進程執行緒內容中執行。

EvtIoInCallerCoNtext回呼函式是在呼叫執行緒的 IRQL 呼叫。 如果呼叫執行緒來自使用者模式應用程式,則會在 IRQL = PASSIVE_LEVEL呼叫回呼函式。 如果呼叫執行緒來自較高層級的核心模式驅動程式,則可以在 IRQL < = DISPATCH_LEVEL呼叫驅動程式的EvtIoInCallerCoNtext回呼函式,如果回呼函式和較高層級的驅動程式都設計為在 IRQL < = DISPATCH_LEVEL傳遞要求。

規格需求

   
目標平臺 環球
最小 KMDF 版本 1.0
標頭 wdfdevice.h (包含 Wdf.h)
IRQL 請參閱一節。

另請參閱

EvtDeviceWdmIrpPreprocess