日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【驱动笔记9】初探IRP

發布時間:2025/7/14 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【驱动笔记9】初探IRP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

文章作者:grayfox
作者主頁:http://nokyo.blogbus.com

原始出處:http://www.blogbus.com/nokyo-logs/34005738.html

??????此前我們可能曾經多次聽說過IRP這個名詞,那么它究竟是什么呢?
??????IRP的全名是I/O Request Package,即輸入輸出請求包,它是Windows內核中的一種非常重要的數據結構。上層應用程序與底層驅動程序通信時,應用程序會發出I/O請求,操作系統將相應的I/O請求轉換成相應的IRP,不同的IRP會根據類型被分派到不同的派遣例程中進行處理。
??????IRP有兩個基本的屬性,即MajorFunction和MinorFunction,分別記錄IRP的主類型和子類型。操作系統根據MajorFunction決定將IRP分發到哪個派遣例程,然后派遣例程根據MinorFunction進行細分處理。
??????IRP的概念類似于Windows應用程序中“消息”的概念。在Win32編程中,程序由“消息”驅動,不同的消息被分發到不同的處理函數中,否則由系統默認處理。
??????文件I/O的相關函數例如CreateFile、ReadFile、WriteFile、CloseHandle等分別會引發操作系統產生IRP_MJ_CREATE、IRP_MJ_READ、IRP_MJ_WRITE、IRP_MJ_CLOSE等不同的IRP,這些IRP會被傳送到驅動程序的相應派遣例程中。?

?

?????? 在派遣例程中處理IRP最簡單做法就是將IRP的狀態設置為成功,然后結束IRP請求并返回成功,同時還要記得設置這個IRP請求操作了多少字節。
????? 我們在派遣函數中設置IRP的完成狀態為STATUS_SUCCESS,發起I/O請求的Win32 API才能返回TRUE,否則Win32 API將返回FALSE,在這個時候可以通過GetLastError獲得錯誤代碼,這個錯誤代碼會和此時IRP被設置的狀態一致。

?????? 下面我們首先在驅動程序中添加一個IRP_MJ_CLEANUP的例程(照抄IRP_MJ_CLOSE的即可),然后編寫下面的應用層程序(控制臺程序):

?

01#include "windows.h"
02#include "stdio.h"
03
04int?main()
05{
06????// 打開設備句柄,它會觸發IRP_MJ_CREATE
07??? HANDLE hDevice?=?::CreateFile("\\\\.\\Test",??????????// 符號鏈接
08????????????????????????? GENERIC_READ?|?GENERIC_WRITE,
09??????????????????????????0,
10??????????????????????????NULL,
11????????????????????????? OPEN_EXISTING,
12????????????????????????? FILE_ATTRIBUTE_NORMAL,
13??????????????????????????NULL);
14????if?(hDevice?==?INVALID_HANDLE_VALUE)
15??? {
16??????? printf("Try to Open Device %s Error : %d!\n",?"\\\\.\\Test",::GetLastError());
17????????return?-1;
18??? }
19
20????// 關閉設備句柄,它會觸發IRP_MJ_CLEANUP和IRP_MJ_CLOSE
21??? CloseHandle(hDevice);
22????return?0;
23}

????? 現在我們使用KmdManager加載驅動并運行,同時運行我們前面編寫的應用層驅動程序,根據應用層程序的代碼我們可知它應該會觸發IRP_MJ_CREATE、IRP_MJ_CLEANUP、IRP_MJ_CLOSE這三個IRP,完整文章請參考我的學習筆記匯總之PDF電子書(邪惡八進制有下載)。

轉載于:https://www.cnblogs.com/huhu0013/p/3312192.html

總結

以上是生活随笔為你收集整理的【驱动笔记9】初探IRP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。