为何内核程序不能调用win32 api?
Windows内核调试
为何内核程序不能调用win32 api?
zyq8709
2011-05-31, 15:39 下午
在驱动编写的书上都说驱动不能调用用户态下的api,请问原因是什么?我在源码中寻找,也没找到相关的语句。按理说内核在ring0下,应该可访问所有代码。那驱动程序除了不能用win32 api,自己编写的不涉及调用api的位于用户空间代码片段也可不可以调用呢?
请老师们帮忙解答一下这个问题吧!多谢!
Re: 为何内核程序不能调用win32 api?
王宇
2011-05-31, 17:57 下午
可以。请参见 NT Insider 1996 年的文章:《Understanding and Using Execution Context in Windows NT Drivers》
http://advdbg.org/dfstore//img/Understanding%20and%20Using%20Execution%20Context%20in%20Windows%20NT%20Drivers.pdf
文章中的示例代码:
(VOID)(*UserFunctToCall)((UserArg));
这一句 Call 了一个环三地址。如果你真的打算在产品里这么做,需要慎之又慎。
Re: 为何内核程序不能调用win32 api?
wrong
2011-06-01, 16:59 下午
最后一个例子,在驱动中调用了winmain,相当于把整个win32程序放在kernel中去了。