共用方式為


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 回呼函式的詳細資訊,請參閱在排入佇列並存取 Framework-Based 驅動程式中的數據緩衝區之前攔截 I/O 要求

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

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

規格需求

需求
目標平台 Universal
最低 KMDF 版本 1.0
標頭 wdfdevice.h (包含 Wdf.h)
IRQL 請參閱一節。

另請參閱

EvtDeviceWdmIrpPreprocess