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

S.l.e!ep.¢%

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

驅(qū)動(dòng)的入口 DriverEntry() 函數(shù)

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


1. 驅(qū)動(dòng)對(duì)象 DriverObject
DRIVER_OBJECT 對(duì)應(yīng) .sys? 文件?
DRIVER_OBJECT?對(duì)象是操作系統(tǒng)在加載驅(qū)動(dòng)時(shí)所分配的.
RegisteryPath 也是操作系統(tǒng)用于記錄驅(qū)動(dòng)相關(guān)參數(shù)的注冊(cè)表路徑.

DriverObject 重要之處,在于它有一組函數(shù)指針,稱之為 dispatch functions
開(kāi)發(fā)驅(qū)動(dòng)的主要任務(wù)就是自己實(shí)現(xiàn)這些 dispatch functions, 當(dāng)系統(tǒng)用到你的驅(qū)動(dòng)時(shí),就會(huì)向你的驅(qū)動(dòng)發(fā)送 IRP, 可以在 dispatch functions 中處理這些 IRP, 可以讓IRP 失敗,也可以讓它返回成功,甚至可以修改或自己發(fā)出IRP。(如何把驅(qū)動(dòng)關(guān)聯(lián)到系統(tǒng)中,讓它可以通知到呢?)

2. 設(shè)備對(duì)象 DeviceObject 簡(jiǎn)稱?DO?
IRP 是由 DeviceObject 發(fā)出的,只有針對(duì)該驅(qū)動(dòng)所生成的 DeviceObject? 的 IRP,操作系統(tǒng)才會(huì)發(fā)給該驅(qū)動(dòng)來(lái)處理。具體的 dispatch function 決定于 DeviceObject? 下的 DriverObject 成員

3. 文件系統(tǒng) File System 簡(jiǎn)稱 FS

4. 控制設(shè)備 Control Device Object?簡(jiǎn)稱 CDO
??? CDO主要任務(wù)是修改整個(gè)驅(qū)動(dòng)的內(nèi)部配置,因此一個(gè)驅(qū)動(dòng)只對(duì)應(yīng)一個(gè) CDO

5. Symbolic Link 符號(hào)鏈接
??? 可以通過(guò) Symbolic links viewer 工具查看操作系統(tǒng)的所有符號(hào)鏈接
??? 可以看到 C:?? 對(duì)應(yīng) \Device\HarddiskVolume1
??? 這里可以看出,文件系統(tǒng)驅(qū)動(dòng)是針對(duì)每個(gè) Volume 來(lái)生成一個(gè) DeviceObject ,則不是針對(duì)文件。實(shí)際上對(duì)某個(gè) Volume? 的文件讀寫(xiě),都發(fā)到這個(gè) Volume 設(shè)備對(duì)象上面去了.

6. 可以使用 IoCreateDevice() 函數(shù)來(lái)創(chuàng)建 控制設(shè)備對(duì)象(控制設(shè)備對(duì)象的作用?)

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

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

9. 驅(qū)動(dòng)中的內(nèi)存分配
??? 并不是簡(jiǎn)單的 new, 而是調(diào)用函數(shù) ExAllocatePoolWithTag() 函數(shù)來(lái)分配
??? 內(nèi)存清零則使用 RtlZeroMemory() 函數(shù)

10. 操作系統(tǒng) 保存了 目前所有的驅(qū)動(dòng)設(shè)備對(duì)象,并且用類(lèi)似于“鏈表”的方式,這個(gè)“鏈表”稱為設(shè)備棧

任何來(lái)自應(yīng)用層(Ring3)的請(qǐng)求,都會(huì)被 Windows?系統(tǒng)的 IO管理器翻譯成 IRP,然后發(fā)給設(shè)備棧中最頂端的那個(gè)設(shè)備

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

箭頭表示IRP請(qǐng)求的發(fā)送過(guò)程
a.?只要我們?cè)谶@個(gè)設(shè)備棧的頂端再綁定一個(gè)設(shè)備,那么發(fā)給這個(gè)設(shè)備的請(qǐng)求,自然就會(huì)先發(fā)給我們的設(shè)備來(lái)處理(可以通過(guò) IoAttachDeviceToDeviceStack)

11. 某些 dispatch function 里開(kāi)頭有 PAGED_CODE();?的作用是?
?????
12. 先用 IoCreateDevice() 創(chuàng)建一個(gè) Device Object?, 然后調(diào)用 IoAttachDeviceToDeviceStack() 綁定到? \Device\HarddiskVolume1? 這個(gè)設(shè)備,那么所有發(fā)給 C:\ 的IRP,都必然先發(fā)送給我們的驅(qū)動(dòng),這樣一來(lái)就可以捕獲所有對(duì)文件的操作了。

13. 當(dāng)一個(gè)新的存儲(chǔ)媒介被系統(tǒng)發(fā)現(xiàn)(如U盤(pán))并生成一個(gè)Volume的過(guò)程稱為? Mounting, 此時(shí),文件系統(tǒng)的CDO會(huì)得到一個(gè)IRP, 這個(gè)IRP是 IRP_MJ_FILE_SYSTEM_CONTROL, MinorFunctionCode == IRP_MN_MOUNT

14. IoRegisterFsRegistrationChange() 注冊(cè)一個(gè)回調(diào)函數(shù),當(dāng)操作系統(tǒng)中有任何文件系統(tǒng)被激活或者是被注銷(xiāo)時(shí),注冊(cè)過(guò)的回調(diào)函數(shù)會(huì)被調(diào)用。
(注意,這里說(shuō)的文件系統(tǒng)是指 NTFS, FAT32, CDFS 這些文件系統(tǒng)
win2k以前的系統(tǒng),對(duì)已經(jīng)激活的文件系統(tǒng)不會(huì)調(diào)用回調(diào),但2K以后的系統(tǒng)會(huì)對(duì)已經(jīng)存在的文件系統(tǒng)重新枚舉一次, 所以在2K下需要自己枚舉已經(jīng)加載的文件系統(tǒng))
(注冊(cè)這個(gè)回調(diào)有什么作用?直接綁定 RawDisk 和處理 IRP_MN_MOUNT
?不就得了?)

15. 當(dāng)收到文件系統(tǒng)的 notify 時(shí),綁定設(shè)備前,需要一個(gè)宏的判斷是否是文件系統(tǒng)類(lèi)型的設(shè)備
#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))

(難道阿貓阿狗的設(shè)備增加時(shí),都會(huì)觸發(fā) fs system notify?)

15. 初始化完后,需要設(shè)置一個(gè)標(biāo)志位
????? 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| 99热精品在线| 亚洲精品一品区二品区三品区| 欧美一级视频| 欧美风情在线观看| 一区二区成人精品| 欧美激情1区2区| 久久电影一区| 亚洲精品小视频| 亚洲视频免费看| 在线视频精品一区| 久久久99国产精品免费| 在线观看日韩专区| 亚洲电影第三页| 欧美网站在线| 亚洲承认在线| 欧美激情精品久久久久久黑人| 91久久久久久久久| 99这里只有精品| 在线看片成人| 国产曰批免费观看久久久| 国产视频一区免费看| 国产精品白丝jk黑袜喷水| 欧美激情一区二区三区四区| 欧美午夜精品久久久久免费视 | 国产精品a级| 91久久综合亚洲鲁鲁五月天| 亚洲视频中文字幕| 国产精品私房写真福利视频 | 国产麻豆视频精品| 国产欧美日韩一区| 欧美色综合网| 一区二区日韩| 久久九九国产精品怡红院| 欧美亚洲网站| 欧美电影免费观看| 香蕉久久精品日日躁夜夜躁| 在线视频精品一区| 欧美午夜在线视频| 国产乱码精品一区二区三| 欧美午夜精品一区| 亚洲欧美日韩一区| 午夜精品免费| 亚洲午夜电影在线观看| 久久国产精品久久国产精品| 日韩亚洲欧美中文三级| 99pao成人国产永久免费视频| 欧美成年人视频| 先锋影院在线亚洲| 亚洲精品久久久久| 亚洲午夜av电影| 尤物yw午夜国产精品视频明星| 亚洲尤物视频网| 亚洲欧美国产精品专区久久| 亚洲国产一成人久久精品| 亚洲免费中文字幕| 亚洲欧美日韩一区二区三区在线| 在线国产精品播放| 久久久久国产精品午夜一区| 欧美影视一区| 日韩午夜av电影| 亚洲欧美日韩成人高清在线一区| 欧美一区二区视频97| 欧美大香线蕉线伊人久久国产精品| 欧美+日本+国产+在线a∨观看| 国产精品国产三级国产aⅴ9色 | 亚洲韩国精品一区| 欧美影院精品一区| 欧美插天视频在线播放| 亚洲欧洲一区| 久久艳片www.17c.com| 欧美精品国产| 欧美精品偷拍| 欧美揉bbbbb揉bbbbb| 欧美一区二区在线| 国产在线日韩| 久久婷婷麻豆| 欧美插天视频在线播放| 欧美日韩精品免费观看视频| 欧美一区二区免费| 亚洲一区综合| 免费久久99精品国产自在现线| 美女精品自拍一二三四| 亚洲福利视频网站| 午夜精品影院| 91久久中文| 欧美日韩三级在线| 精品999网站| 亚洲第一在线综合网站| 亚洲在线观看视频网站| 久久综合九色综合欧美就去吻| 久久久精品一区二区三区| 亚洲欧美激情四射在线日| 欧美日韩亚洲天堂| 1769国内精品视频在线播放| 亚洲一区二区三区午夜| 亚洲欧美清纯在线制服| 欧美伦理影院| 亚洲精品国产精品久久清纯直播 | 日韩视频免费观看高清完整版| 欧美一区二区网站| 国产麻豆一精品一av一免费| 欧美插天视频在线播放| 久久久精彩视频| 这里只有精品视频在线| 亚洲国产经典视频| 老鸭窝毛片一区二区三区| 狠狠噜噜久久| 一区二区高清在线| 香蕉精品999视频一区二区 | 快播亚洲色图| 午夜久久一区| 欧美国产91| 久久久久天天天天| 久久乐国产精品| 亚洲美女视频| 亚洲视频视频在线| 国产精品中文在线| 亚洲三级影片| 欧美日韩在线视频一区| 亚洲第一天堂av| 激情婷婷久久| 欧美一级片在线播放| 欧美二区在线| 亚洲一区二区免费视频| 夜夜嗨av一区二区三区网站四季av| 一区二区视频在线观看| 欧美高清视频一区二区| 欧美国产日本在线| 久久综合色综合88| 欧美激情亚洲| 亚洲女爱视频在线| 欧美久色视频| 久久精品青青大伊人av| 校园春色国产精品| 欧美一区二区视频在线观看2020| 午夜一区二区三区在线观看| 亚洲国产成人av| 蜜桃伊人久久| 先锋a资源在线看亚洲| 欧美不卡三区| 一区二区三区成人精品| 欧美激情一区二区三区高清视频| 亚洲日本成人女熟在线观看| 欧美在线综合| 久久国产精品亚洲va麻豆| 亚洲第一精品夜夜躁人人躁| 香蕉久久夜色| 一区二区三区在线看| 国产一区二区高清不卡| 欧美日韩成人在线播放| 欧美国产视频一区二区| 性欧美video另类hd性玩具| 亚洲第一页在线| 亚洲视频免费在线| 午夜精品久久久久久久久| 9久re热视频在线精品| 久久伊人精品天天| 久久婷婷久久一区二区三区| 久久久www成人免费无遮挡大片 | 国产美女在线精品免费观看| 亚洲精品一区中文| 久久国产视频网| 国产日韩欧美一区二区| 亚洲日本欧美在线| 国产亚洲观看| 欧美一级网站| 久久精品视频在线| 美女露胸一区二区三区| 欧美一区二区三区喷汁尤物| 国产农村妇女精品| 久久亚洲精品视频| 日韩午夜精品| 久久久www成人免费无遮挡大片 | 国产精品jizz在线观看美国| 一区二区三区欧美激情| 久久岛国电影| 亚洲裸体视频| 国产亚洲在线观看| 欧美激情精品久久久| 亚洲人成网站精品片在线观看| 亚洲欧美综合精品久久成人| 一区二区亚洲欧洲国产日韩| 欧美精品七区| 午夜欧美大尺度福利影院在线看| 亚洲大片一区二区三区| 欧美一区二区成人6969| 亚洲精品之草原avav久久| 国产日韩在线视频| 欧美日韩精品久久久| 久久综合一区| 午夜视频在线观看一区二区三区 | 午夜激情久久久| 亚洲精品麻豆| 欧美91大片| 久久久久网址| 久久激情一区| 篠田优中文在线播放第一区| 99精品福利视频|