Conancool
驱动牛犊
驱动牛犊
  • 注册日期2002-10-20
  • 最后登录2009-02-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1579回复:5

关于PASSIVE_LEVEL和用户应用程序的问题!

楼主#
更多 发布于:2003-03-03 11:32
请问,核心级(IRQL是PASSIVE_LEVEL)的函数比如:ZwMapViewOfSection,我在用VC写用户级应用程序时为什么也可以用?
是不是说只要是IRQL是PASSIVE_LEVEL的核心级程序,我在写普通的用户应用程序时都可以用? :( :( :( :(
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-03 16:21
    我想应该不是,PASSIVE_LEVEL为内核级的最低级别,适当时候可以直接访问用户态虚拟地址空间,同时,可以使用大多数内核例程,除了DDK中明确规定的必须在更高IRQL级别运行的例程外.
虽然你在用户态的调用也是成功的,但最好还是别这样做,除非万不得已.
Tom_lyd
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-03 18:51
请问,核心级(IRQL是PASSIVE_LEVEL)的函数比如:ZwMapViewOfSection,我在用VC写用户级应用程序时为什么也可以用?
是不是说只要是IRQL是PASSIVE_LEVEL的核心级程序,我在写普通的用户应用程序时都可以用? :( :( :( :(


你并没有调用同一个函数,用户态直接调用核心态函数理所当然的发生#GP而被系统杀掉。

至于你真正调用的是:核心态ntoskrnl导出的ZwMapViewOfSection,在我的2000上地址为0x80400dca;用户态为ntdll中的,在我2000上地址为0x77f840a4。后者通过系统服务接口转入内核。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-03-03 20:34
也就是说,ntdll的那个实际上调用了ntoskrnl导出的那个,是吧?
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-03 21:10
也就是说,ntdll的那个实际上调用了ntoskrnl导出的那个,是吧?


并不是直接调用,通过系统服务接口入内核后,经查询入口与参数拷贝后确会由系统转入ntoskrnl中的对应函数。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-03-03 22:46
我就是这意思。
多谢。
游客

返回顶部