IoCompleteRequest

IoCompleteRequest 例程表示調用者的已經完成了對指定I/O請求的所有處理操作,並且向I/O管理器返回指定的IRP報文。

IoCompleteRequest 例程表示調用者的已經完成了對指定I/O請求的所有處理操作,並且向I/O管理器返回指定的IRP報文。

函式原型

VOID
IoCompleteRequest(
IN PIRP Irp,
IN CCHAR PriorityBoost
);

參數

Irp 指向將要完成的IRP報文數據結構。 PriorityBoost 指定系統定義的常量,用來增加運行時要求操作的原始執行緒的優先權。如果要求操作的原始執行緒需要驅動程式快速的完成處理,或者IRP填充完成時有錯誤發生,那么這個值就應該設為 IO_NO_INCREMENT。否則PriorityBoost 常量的值應設為device-type-specific常量。具體取哪些常量可以參見 ntddk.h 或 wdm.h 檔案。

返回值

頭檔案

在 wdm.h 和 ntddk.h 中被定義。需要包含 wdm.h 或 ntddk.h 檔案。
注釋當驅動完成了對指定IRP的所有處理操作之後,會調用 IoCompleteRequest 。I/O管理器檢查IRP以決定上級驅動是否已經為這個IRP指定了一個 IoCompletion 例程。如果這樣的話,每一個 IoCompletion 例程將會依次被調用,直到在驅動鏈中的每一個分層驅動已經完成這個IRP的填充操作為止。
當所有的驅動已充填充完了指定的IRP時,I/O管理器會向操作的原始請求者返回一個狀態值。需要注意的是,一個設定了 driver-created 的IRP的上級驅動必須提供一個 IoCompletion 例程來釋放它當初創建的那個IRP。
在一個自旋鎖被占用時,不要調用IoCompleteRequest 。當一個自旋鎖被占用時,試圖完成一個IRP的填充操作會導致死鎖。
IoCompleteRequest 的調用者必須是運行在 IRQL <= DISPATCH_LEVEL 上的。

PS

這個函式一般出現在I/O Dispatch系列函式中。當用戶層與核心層設備進行通訊時,比如用戶層調用了CreateFile、CloseHandle、ReadFile、WriteFile和DeviceIoControl等I/O操作函式時,核心會調用代碼中已經指派的DRIVER_DISPATCH系列函式。如果用戶層的這些函式是採用同步方式(Synchronous)調用的話,那么只有當核心DRIVER_DISPATCH函式中調用了IoCompleteRequest(Irp, IO_NO_INCREMENT);之後,用戶層的函式才會返回。

相關詞條

相關搜尋

熱門詞條

聯絡我們