在裡邊加乙個 upperfilters(lowerfilters)多字串字段,接著把這個字段設定成 我們createservice建立的驅動名字,
有可能發現已經有upperfilters(lowerfilters)存在,並且還可能有別的服務名,那就說明此裝置還安裝有別的過濾驅動。
二是掛載到類驅動fdo之上或者之下,
在登錄檔 hklm\system\currentcontrolset\control\class\, 裡邊有許多
>,都是類驅動標誌
比如 hklm\system\currentcontrolset\control\class\ 對應的是磁碟類驅動,
所有磁碟驅動,包括 ide,scsi,usb磁碟等等,都在這一類裡。
同樣的,我們在此類裡,加入
upperfilters(lowerfilters),並把他設定成我們的驅動服務名,
這個時候,此類下的所有裝置驅動載入的時候,都會載入我們的過濾驅動。
最後的問題,wdm filter用來幹什麼? 它可以幹得事情挺多!
簡單介紹一下u盤加密的處理思路,關於此類的**,網上介紹的比較多。
u盤加密是按照 lowerfiters(底層過濾驅動)來安裝的,一般是安裝在磁碟類驅動裡。
如上面所說,這裡會有個問題,安裝到磁碟類驅動裡,所有的磁碟都會被加密,所以我們必須判斷哪些是u盤驅動。
先看看u盤的大致流程,當u盤插入到電腦usb介面,系統獲得通知建立乙個pdo,
並判斷出這是個u盤,於是系統把usbstor驅動attach在上面,usbstor另外再建立乙個pdo,並把disk類驅動附加在他上面,
我們的過濾驅動其實就是在 usbstor.sys 和 disk.sys之間。
於是我們找到一種判斷是否u盤的辦法:
就是在 adddevice函式裡,判斷 pdo->driverobject->drivername 的名字是否是 \driver\usbstor,如果是說明我們正附加在u盤上,
不是的話,說明是其他類磁碟,直接返回錯誤即可。
usbstor和disk之間傳輸的是標準 scsi命令。
按照 wdmfilter框架,主要處理 irp_mj_scsi 控制碼,對此irp進行攔截處理,就能實現磁碟加密解密,以及u盤唯讀保護等許多功能。
比如設定唯讀保護,在
scsiop_mode_sens命令的完成函式裡,設定
mode_dsp_write_protect 標誌位。
又比如加密,在
scsiop_write命令對寫的扇區執行資料加密操作,在
scsiop_read命令的完成函式裡,對這些加密的扇區執行資料解密操作,
這樣就完成了乙個加密解密流程。
下章會比較詳細的描述 攝像頭過濾驅動的開發過程。
關於驅動更新的一點學習
下次如果遇到無法識別的裝置,成本最低的做法是,先在裝置管理器,右擊選中那些問題裝置,然後更新驅動程式,選擇從本地目錄中安裝,目錄即為 c windows winsxs。2.在利用360安全衛士或者金山衛士之類的優化軟體,進行優化加速時,有可能會將一些系統需要的服務給禁用掉,如這裡和usb相關的 pn...
一點一點進步
requestparam,是獲取前端傳遞給後端的引數,可以使get方式,也可以是post方式。若前端傳遞的引數和後端接收的引數名稱不一致,則必須要標註。pathvariable,是獲取get方式,url後面引數,進行引數繫結。1.裝箱就是講基本資料型別轉換為包裝類,拆箱就是自動將包裝類轉換為基本資料...
他們寫的,一點思考,一點敬意
技術的正宗與野路子 我們的大腦好比記憶體。既然是記憶體,就裝不下所有的知識。但應該能裝下對於知識的索引,否則我們便沒法工作了。啊,我的程式為啥卡住啦 本文簡答介紹在linux環境下如何利用gdb來分析卡住的程式,本文使用的python為cpython2.7。2019,能否解開時間的困局?通常在年初的...