青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

驅動的入口 DriverEntry() 函數

NTSTATUS?DriverEntry(IN?PDRIVER_OBJECT?DriverObject,?IN?PUNICODE_STRING?RegistryPath)
{
}


1. 驅動對象 DriverObject
DRIVER_OBJECT 對應 .sys? 文件?
DRIVER_OBJECT?對象是操作系統在加載驅動時所分配的.
RegisteryPath 也是操作系統用于記錄驅動相關參數的注冊表路徑.

DriverObject 重要之處,在于它有一組函數指針,稱之為 dispatch functions
開發驅動的主要任務就是自己實現這些 dispatch functions, 當系統用到你的驅動時,就會向你的驅動發送 IRP, 可以在 dispatch functions 中處理這些 IRP, 可以讓IRP 失敗,也可以讓它返回成功,甚至可以修改或自己發出IRP。(如何把驅動關聯到系統中,讓它可以通知到呢?)

2. 設備對象 DeviceObject 簡稱?DO?
IRP 是由 DeviceObject 發出的,只有針對該驅動所生成的 DeviceObject? 的 IRP,操作系統才會發給該驅動來處理。具體的 dispatch function 決定于 DeviceObject? 下的 DriverObject 成員

3. 文件系統 File System 簡稱 FS

4. 控制設備 Control Device Object?簡稱 CDO
??? CDO主要任務是修改整個驅動的內部配置,因此一個驅動只對應一個 CDO

5. Symbolic Link 符號鏈接
??? 可以通過 Symbolic links viewer 工具查看操作系統的所有符號鏈接
??? 可以看到 C:?? 對應 \Device\HarddiskVolume1
??? 這里可以看出,文件系統驅動是針對每個 Volume 來生成一個 DeviceObject ,則不是針對文件。實際上對某個 Volume? 的文件讀寫,都發到這個 Volume 設備對象上面去了.

6. 可以使用 IoCreateDevice() 函數來創建 控制設備對象(控制設備對象的作用?)

7. 指定 DriverObject 的處理函數
??? for(i = 0; i<= IRP_MJ_MAXIMUM_FUNCTION; i++)
??? {
??????? DriverObject->MajorFunction[i] = SfPassThrough;
??? }
??? 處理函數里面最簡單的處理就是什么都不做,傳給操作系統的其它驅動處理,使用下面的代碼
??? IoSkipCurrentIrpStackLocation(Irp);
??? return IoCallDriver( ((PSFILTER_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->AttachedToDeviceObject, Irp);

8. 文件系統的驅動,除了要處理正常的IRP之外,還要處理 FastIo
??? (a. FastIo 是操作系統的 Cache Manager 調用所觸發的沒有 IRP 的請求
???? b. FastIo 是獨立于普通IRP分發函數之外的另一組接口,作用跟普通的IRP是一樣的
???? c. 如果是一個文件過濾驅動,那么普通的IRP分發函數 和 FastIo 都有可能被調用,所以最好是同時過濾這兩套接口
???? d. fastio 的分發函數直接返回 FALSE 不做任何事,這樣這些請求都會通過IRP重新發送,有一定的效率損失,但不是很大。? )
???
FastIo 的函數可以通過 Driver->FastIoDispatch 來指定

9. 驅動中的內存分配
??? 并不是簡單的 new, 而是調用函數 ExAllocatePoolWithTag() 函數來分配
??? 內存清零則使用 RtlZeroMemory() 函數

10. 操作系統 保存了 目前所有的驅動設備對象,并且用類似于“鏈表”的方式,這個“鏈表”稱為設備棧

任何來自應用層(Ring3)的請求,都會被 Windows?系統的 IO管理器翻譯成 IRP,然后發給設備棧中最頂端的那個設備

原始 IRP????????????????????????? IRP????????????????????????????? IRP
-------------->???????????? ----------->????????????????? --------->
??????????????????? 最頂端的設備?????????? 排第二的設備??????????????? ....
<--------------???????????? <-----------????????????????? <---------
原始IRP返回????????????????? IRP返回???????????????????? IRP返回

箭頭表示IRP請求的發送過程
a.?只要我們在這個設備棧的頂端再綁定一個設備,那么發給這個設備的請求,自然就會先發給我們的設備來處理(可以通過 IoAttachDeviceToDeviceStack)

11. 某些 dispatch function 里開頭有 PAGED_CODE();?的作用是?
?????
12. 先用 IoCreateDevice() 創建一個 Device Object?, 然后調用 IoAttachDeviceToDeviceStack() 綁定到? \Device\HarddiskVolume1? 這個設備,那么所有發給 C:\ 的IRP,都必然先發送給我們的驅動,這樣一來就可以捕獲所有對文件的操作了。

13. 當一個新的存儲媒介被系統發現(如U盤)并生成一個Volume的過程稱為? Mounting, 此時,文件系統的CDO會得到一個IRP, 這個IRP是 IRP_MJ_FILE_SYSTEM_CONTROL, MinorFunctionCode == IRP_MN_MOUNT

14. IoRegisterFsRegistrationChange() 注冊一個回調函數,當操作系統中有任何文件系統被激活或者是被注銷時,注冊過的回調函數會被調用。
(注意,這里說的文件系統是指 NTFS, FAT32, CDFS 這些文件系統
win2k以前的系統,對已經激活的文件系統不會調用回調,但2K以后的系統會對已經存在的文件系統重新枚舉一次, 所以在2K下需要自己枚舉已經加載的文件系統)
(注冊這個回調有什么作用?直接綁定 RawDisk 和處理 IRP_MN_MOUNT
?不就得了?)

15. 當收到文件系統的 notify 時,綁定設備前,需要一個宏的判斷是否是文件系統類型的設備
#define IS_DESIRED_DEVICE_TYPE(_type) \
??? (((_type) == FILE_DEVICE_DISK_FILE_SYSTEM) || \
???? ((_type) == FILE_DEVICE_CD_ROM_FILE_SYSTEM) || \
???? ((_type) == FILE_DEVICE_NETWORK_FILE_SYSTEM))

(難道阿貓阿狗的設備增加時,都會觸發 fs system notify?)

15. 初始化完后,需要設置一個標志位
????? DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
?????
作用?原因?

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲先锋成人| 一区二区高清在线| 欧美一区二区免费| 日韩一级精品| 在线观看欧美日韩国产| 国模 一区 二区 三区| 狠狠色噜噜狠狠狠狠色吗综合| 国产精品一区二区三区四区五区| 国产精品毛片大码女人| 欧美美女福利视频| 国产精品视频男人的天堂| 国产亚洲二区| 亚洲国产精品久久久久秋霞不卡| 亚洲欧洲精品一区二区三区 | 亚洲日本中文字幕区| 亚洲国产精品成人综合| 亚洲精品欧洲| 亚洲欧美亚洲| 久久天天躁狠狠躁夜夜av| 欧美日韩精品三区| 国产资源精品在线观看| 亚洲美女免费视频| 久久爱91午夜羞羞| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲精品自在久久| 久久精品国产亚洲高清剧情介绍| 欧美国产亚洲视频| 国内久久婷婷综合| 亚洲图片在线观看| 欧美二区在线| 香蕉尹人综合在线观看| 欧美另类videos死尸| 国产一级揄自揄精品视频| 日韩视频在线观看免费| 久久久蜜臀国产一区二区| 亚洲精品影视在线观看| 久久夜色精品国产欧美乱| 国产精品久久久久影院色老大| 在线看国产日韩| 香蕉久久精品日日躁夜夜躁| 欧美丰满高潮xxxx喷水动漫| 欧美一级久久| 国产精品久久一区主播| 亚洲日本免费电影| 玖玖玖国产精品| 午夜国产精品影院在线观看 | 中文精品视频一区二区在线观看| 麻豆av一区二区三区久久| 午夜视频一区二区| 欧美视频精品一区| 99精品免费| 亚洲国产99精品国自产| 老司机一区二区三区| 伊人久久噜噜噜躁狠狠躁 | 亚洲一区二区在线播放| 欧美成年人视频网站欧美| 极品少妇一区二区三区| 欧美中文字幕在线视频| 亚洲欧美日韩一区在线观看| 国产九九视频一区二区三区| 亚洲欧美国产高清va在线播| 在线看片欧美| 久久一区二区三区四区| 久久精品视频免费| 精品51国产黑色丝袜高跟鞋| 老司机午夜精品视频| 久久九九热re6这里有精品| 国产一区二区三区视频在线观看| 久久国产欧美| 久久精品五月| 在线免费观看视频一区| 欧美成人精品在线视频| 免费永久网站黄欧美| 一本色道久久精品| 亚洲网站在线观看| 国产一区欧美日韩| 欧美韩日一区二区| 欧美高清在线一区| 亚洲欧美日韩国产中文| 午夜在线播放视频欧美| 国产真实久久| 亚洲国产精品久久久久婷婷884| 欧美国产亚洲视频| 亚洲婷婷国产精品电影人久久| 日韩视频在线一区二区三区| 国产精品入口66mio| 欧美xx视频| 欧美午夜不卡视频| 久久伊人精品天天| 欧美激情1区2区3区| 亚洲欧美第一页| 久久视频国产精品免费视频在线| aaa亚洲精品一二三区| 欧美一区二区高清在线观看| 亚洲日本免费| 欧美亚洲在线| 夜夜嗨av一区二区三区免费区| 亚洲欧美精品伊人久久| 最近看过的日韩成人| 99在线精品观看| 一区福利视频| 亚洲一区二区三区中文字幕| 在线日韩精品视频| 在线亚洲欧美视频| 亚洲国产美女精品久久久久∴| 日韩一二三区视频| 在线国产精品一区| 亚洲欧美在线网| 日韩视频在线一区二区| 久久久噜噜噜久久久| 午夜视黄欧洲亚洲| 欧美精品三级| 欧美承认网站| 黑人极品videos精品欧美裸| 亚洲一区图片| 亚洲一区二区三区涩| 欧美成人乱码一区二区三区| 国产精品夜夜夜| 一本久道综合久久精品| 亚洲欧洲视频在线| 久久久午夜精品| 久久九九全国免费精品观看| 国产精品男人爽免费视频1| 亚洲精品中文在线| 日韩一区二区电影网| 老司机午夜精品| 媚黑女一区二区| 精品动漫3d一区二区三区免费版| 欧美亚洲日本网站| 久久都是精品| 国产专区欧美精品| 午夜日韩在线观看| 久久精品网址| 黄网站免费久久| 久久免费少妇高潮久久精品99| 久久九九国产精品| 国产欧美日韩不卡| 欧美一区二区免费观在线| 性欧美大战久久久久久久免费观看| 欧美日韩一二三四五区| 一区二区国产在线观看| 在线视频日本亚洲性| 欧美日韩国产三级| 亚洲一级免费视频| 欧美在线3区| 狠狠色丁香久久婷婷综合_中| 久久国产夜色精品鲁鲁99| 麻豆成人在线观看| 亚洲精品视频啊美女在线直播| 欧美激情视频一区二区三区在线播放| 亚洲国产精品一区在线观看不卡 | 亚洲午夜免费福利视频| 国产精品福利在线| 亚洲欧美日韩国产成人精品影院| 久久不射中文字幕| 精品成人乱色一区二区| 美女日韩欧美| 999在线观看精品免费不卡网站| 亚洲综合精品四区| 精东粉嫩av免费一区二区三区| 久久亚洲电影| 一区二区三区不卡视频在线观看| 欧美一级久久| 亚洲第一二三四五区| 欧美国产亚洲视频| 亚洲香蕉视频| 欧美成人精品高清在线播放| 一本色道久久88综合日韩精品 | 免费观看成人| 亚洲最新在线视频| 久久久久国产精品一区| 亚洲精品免费网站| 国产精品夜夜夜| 欧美国产大片| 欧美亚洲视频在线观看| 亚洲免费精品| 每日更新成人在线视频| 亚洲在线播放电影| 91久久亚洲| 国内久久婷婷综合| 国产精品国产成人国产三级| 久久久久久国产精品一区| 一二三区精品福利视频| 欧美国产丝袜视频| 久久人人爽人人| 国产精品毛片一区二区三区| 你懂的视频一区二区| 欧美亚洲免费电影| 一区二区国产精品| 亚洲精品免费网站| 男女av一区三区二区色多| 欧美一级专区| 亚洲欧美另类综合偷拍| 99国产精品自拍| 亚洲二区在线视频| 韩国av一区二区| 国产日本亚洲高清| 国产精品日韩欧美综合 | 激情小说另类小说亚洲欧美| 欧美色图一区二区三区|