IoCompleteRequest

IoCompleteRequest函式表示調用方已完成所有I/O請求處理操作,並將給定的 IRP 返回給 I/O 管理器。

基本介紹

  • 中文名:IoCompleteRequest
  • 外文名:無
  • 語言:英語
  • 學科:計算機學
函式原型,參數,頭檔案,貼士,

函式原型

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

參數

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

頭檔案

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

貼士

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

相關詞條

熱門詞條

聯絡我們