设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 操作系统 >> Windows 2000 >> Windows服务调用机制
精品推荐
Windows 2000点击TOP10
·Windows NT/2000/XP 出现蓝屏并显示“STOP 0x0000007f”错误
·Win 2000密码破解
·Windows2000系统优化指南
·如何开启 Windows 2000 Server 上的远程桌面功能
·Windows2000操作系统中也用上Msconfig
·为Win2000添加五笔字型输入法
·Windows2000系统如何找回丢失的管理员密码
·[DIY]Windows2000三合一光盘
·Windows2000漏洞集锦
·Windows2000中如何配置JDK
操作系统点击TOP10
·Windows Vista完全硬盘安装法
·Windows Vista 激活不求人
·Windows Vista局域网网络连接设置
·Windows Vista系统动态桌面截图欣赏
·Windows XP中磁盘的分区应用
·Windows NT/2000/XP 出现蓝屏并显示“STOP 0x0000007f”错误
·让Windows XP变身Vista
·一招搞定Vista系统软件不兼容问题
·教你如何正确配置和优化Windows Vista
·只转两圈 加快Windows XP启动速度
精选专题

Windows服务调用机制

作者: 来源:网络文章 时间:2005-12-19 16:14:50

Windows服务调用机制(2)     应用程序编程接口
    基于NTDLL.dll的本地系统服务   (用户模式)
    -----------------------------------------
    系统服务调用          (内核模式)
    执行体
    系统内核,设备驱动程序
    硬件抽象层


  三、Windows 2000本机系统服务(Native API)

  Windows 2000本机系统服务又称为Windows本机应用程序编程接口,它是由执行体(Executive)为用户模式和内核模式的程序提供的系统服务集。它包含两种类型的函数:Windows 执行系统服务的系统服务调度占位程序;子系统,子系统DLL和其他本机映像使用的内部支持函数。

  从用户模式调用本机系统服务是通过NTDLL.dll来实现的。表面上,Win32函数为编程人员提供了很多接口来实现我们想要的功能,但是这些Win32函数只不过是本机应用程序编程接口的一个包装器而已,它们将本机API包装起来,调用本机系统服务来实现用户期望的功能。也就是说NTDLL.dll只是系统服务调用接口在用户模式下的一个外壳。关于用户模式下的Windows本机系统服务的相关信息,请参见我以前写的一篇文章《探测Windows2K/XP/2003本机系统信息》。

  我们再谈谈从内核模式调用系统服务吧,这时就不是由NTDLL.dll导出系统服务调用的函数接口了,而是由ntoskrnl.exe来实现的,它会提供两种形式的函数:ZwXxx和NtXxx,在此我们就不多说了。大家应该注意到了,在上面我们介绍的Windows 2000系统体系结构中的系统服务调用,执行体和内核都是存在于ntoskrnl.exe(在多处理器中为ntkrnlmp.exe)之中,并且是分层的。

  四、Windows 2000系统服务调用机制

  Windows 2000的陷阱调度(Trap Dispatching)机制包括了:中断(Interrupt),延迟过程调用(Deferred Procedure Call),异步过程调用(Asynchronous Procedure Call),异常调度(Exception Dispatching)和系统服务调用。在Intel x86的Windows 2000系统中,处理器执行int 0x2e指令来激活Windows系统服务调用;在Intel x86的Windows XP系统中处理器却是通过执行sysenter指令使系统陷入系统服务调用程序中;而在AMD的Windows XP中使用了指令syscall来实现同样的功能。我们暂时使用x86的Windows 2000为例来演示。我们先给出一个系统服务调用的模型:

mov eax, ServiceId
lea edx, ParameterTable
int 2eh
ret ParamTableBytes


  其中,ServiceId清楚的说明了传递给系统服务调用的系统服务号,内核使用这个标识符来查找系统服务调度表(System Service Dispath Table)中的对应系统服务信息。在系统服务调度表中的每一项包含了一个指向系统服务程序的指针,我们Hook时就是修改这个指针使其指向我们自定义的系统服务的地址。ParameterTable是传递的参数,系统服务调用程序KiSystemService必须严格校验传递的每一个参数,并将其参数从线程的用户堆栈中复制到系统的核心堆栈以备使用。由于执行int指令会导致陷阱发生,所以在Windows 2000内的中断描述表(IDT = Interrupt Descriptor Table)中的0x2e项指向了系统服务调用程序。最后返回的ParamTableBytes是关于参数个数的信息。

  现在我们已经看得出来了,系统服务调用只是一个接口,它提供了将用户模式下的请求转发到Windows 2000内核的功能,并引发处理器模式的切换。在用户看来,系统服务调用接口就是Windows内核组件功能实现对外的一个界面。系统服务调用接口定义了Windows内核提供的大量服务。

共6页 9 7 [1] [2] [3] [4] [5] [68 :>

Windows服务调用机制 相关文章:
Windows服务调用机制 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com