天天看點

Windows驅動開發——派遣函數

1、IRP

    IRP(I/O Request Package),即輸入輸出請求包。上層應用程式與底層驅動程式通信時,應用程式會發出I/O請求,作業系統将I/O請求轉化為相應的IRP資料。不同類型的IRP會傳遞給不同的派遣函數處理。

2、派遣函數

   驅動中 處理IRP請求的函數。處理完了之後,必須通過IOCompleteRequest結束IRP。這樣,發起I/O請求的Win32 API就會傳回。

3、RendFile内部操作過程

(1)ReadFile調用ntdll中的NtReadFile,其中ReadFile是Win32 API,而NtReadFile函數是Native API.

(2)ntdll中的NtReadFile進入到核心模式,并調用系統服務中 的NtReadFile函數。

(3)系統服務函數NtReadFile建立IRP_MJ_WRITE類型的IRP,然後将這個IRP發送到驅動程式的派遣函數中。NtReadFile會去等待一個時間,這是目前線程進入等待狀态。

(4)在派遣函數中,會将這個IRP結束。這是會設定剛才等待的那個事件。睡眠的線程恢複。

     在讀取很大的檔案時,ReadFIle不會立即傳回,而是等待一段時間。

繼續閱讀