《windows驅動開發技術詳解 》331頁,
在將irp傳送給底層驅動或其他驅動之前,可以對irp設定乙個完成例程,一旦底層驅動將irp完成後,irp完成例程立刻被處罰,通過設定完成例程可以方便地使程式設計師了解其他驅動對irp進行的處理,
不管是呼叫自己的底層驅動或是呼叫其他驅動,都是使用核心函式iocalldriver;
當iocalldriver將irp的控制權交給被呼叫驅動時,有兩種情況:
1,主動呼叫的裝置是同步完成這個irp的,從iocalldriver返回的時刻,代表此irp已經完成;
2,主動呼叫的裝置是非同步操作,iocalldriver會立刻返回,但此時並沒有真正完成irp;
在第二種情況下,呼叫iocalldriver前,先對irp註冊乙個完成例程,當底層驅動或其他驅動完成此irp時,此完成例程立刻被呼叫,註冊irp完成例程是在當前的堆疊(io_stack_location)中的completionroutine屬性,irp完成後,一層層堆疊向上彈出,如果遇到io_stack_location中的completionroutine屬性非空,則呼叫這個例程,傳進這個完成例程的是io_stack_location的context屬性
Windows驅動開發 IRP結構體
irp的全名是i o request package,即輸入輸出請求包,它是windows核心中的一種非常重要的資料結構。上層應用程式與底層驅動程式通訊時,應用程式會發出i o請求,作業系統將相應的i o請求轉換成相應的irp,不同的irp會根據型別被分派到不同的派遣例程中進行處理。irp有兩個基本...
windows驅動程式設計學習筆記 (三)IRP
一,irp的概念 i o request package 當乙個應用程式呼叫函式去操作某個裝置時,比如呼叫createfile,deviceiocontrol,等等時,i o管理器為此函式建立乙個irp資料結構物件和乙個irp stack location資料結構物件陣列,陣列個數等於驅動程式堆疊上...
驅動學習筆記 irp
irp是windows核心中的一種非常重要的資料結構。上層應用程式與底層驅動程式通訊時,應用程式會發出i o請求,作業系統將相應的i o請求轉換成相應的irp,不同的irp會根據型別被分派到不同的派遣例程中進行處理。irp相當於ring3下的訊息,應用程式對驅動程式進行操作的時候會發出相應的訊息,驅...