【WindowsDDK】內核字符串操作藍屏的一個解決辦法

  前一段時間參加了學校的網絡安全競賽。其中有一道題目是“攔截註冊表”,使用SSDT HOOK ZwSetKeyValue函數。在自己的ZwSetKeyValue函數中,需要對傳遞進來的註冊表路徑與設定好的註冊表路徑進行匹配(ANSII 比較),如果一樣,則被攔截。否則,則放行。

  雖然在Windows內核中並不推薦使用C語言的字符串操作的庫函數,但又沒有其他好的辦法的時候仍然需要使用。我在程序中使用了strcpy()與strcmp()函數。可以成功生成驅動,但加載之後,系統會藍屏。開始始終搞不清楚,多次嘗試之後,發現取消DriverEntry開頭的#define INITCODE code_seg("INIT")即可。具體的原因到現在依然不太清楚,後來百度了一下,在pediy論壇上發現了別人也在進行這個問題的討論。鏈接是:

  http://bbs.pediy.com/showthread.php?p=808708

  兩條可能有用的回覆摘下來:

  2.呵呵,我早就遇到過了,原因好像是字符串放在INIT節中,卸載時卻被換出內存了。不過現在好像無法重現了。

  4.的確是這樣,要把CreateDevice函數的#pragma INITCODE改爲#pragma PAGEDCODE,我問過作者,也沒有給明確的答覆。

  如果有遇到類似情況的並且知道原因的,希望可以告訴我。謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章