阅读:1578回复:5
关于PASSIVE_LEVEL和用户应用程序的问题!
请问,核心级(IRQL是PASSIVE_LEVEL)的函数比如:ZwMapViewOfSection,我在用VC写用户级应用程序时为什么也可以用?
是不是说只要是IRQL是PASSIVE_LEVEL的核心级程序,我在写普通的用户应用程序时都可以用? :( :( :( :( |
|
沙发#
发布于:2003-03-03 16:21
我想应该不是,PASSIVE_LEVEL为内核级的最低级别,适当时候可以直接访问用户态虚拟地址空间,同时,可以使用大多数内核例程,除了DDK中明确规定的必须在更高IRQL级别运行的例程外.
虽然你在用户态的调用也是成功的,但最好还是别这样做,除非万不得已. |
|
|
板凳#
发布于:2003-03-03 18:51
请问,核心级(IRQL是PASSIVE_LEVEL)的函数比如:ZwMapViewOfSection,我在用VC写用户级应用程序时为什么也可以用? 你并没有调用同一个函数,用户态直接调用核心态函数理所当然的发生#GP而被系统杀掉。 至于你真正调用的是:核心态ntoskrnl导出的ZwMapViewOfSection,在我的2000上地址为0x80400dca;用户态为ntdll中的,在我2000上地址为0x77f840a4。后者通过系统服务接口转入内核。 |
|
地板#
发布于:2003-03-03 20:34
也就是说,ntdll的那个实际上调用了ntoskrnl导出的那个,是吧?
|
|
地下室#
发布于:2003-03-03 21:10
也就是说,ntdll的那个实际上调用了ntoskrnl导出的那个,是吧? 并不是直接调用,通过系统服务接口入内核后,经查询入口与参数拷贝后确会由系统转入ntoskrnl中的对应函数。 |
|
5楼#
发布于:2003-03-03 22:46
我就是这意思。
多谢。 |
|