【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,我问过作者,也没有给明确的答复。

  如果有遇到类似情况的并且知道原因的,希望可以告诉我。谢谢。

原文地址:https://www.cnblogs.com/XjChenny/p/2244243.html