返回首页

简介
本文是为那些想拥有更强的Windows系统架构的了解。只有几个主题都包括在内,但一个较强的理解,可能导致其中一些主题的根包和他们的检测了解。关于Win32子系统的话
Win32子系统是Windows中的所有用户界面的门户。重要的是要知道,Win32子系统中考虑的组件是不负责整个Win32 API中,只有它为用户和GDI的部分,的。本机API是Windows NT系统的实际接口。在Windows NT中,Win32 API的只是一层以上的原生API。因为NT内核与GUI无关,本机API不包含任何图形相关的服务。在功能方面,本机API是Windows内核的最直接的接口,提供直接连接的接口与Windows内存管理器,I / O系统,对象管理器,进程和它们所包含的线程执行,依此类推。 Win32子系统是负责Windows用户界面的各个方面的组件。这将启动与低级别的图形设备接口(GDI),和与用户的组件,它是负责更高层次的图形用户界面结构,如Windows,菜单,并处理输入结束。从不直接调用本机API的应用程序。这是为什么微软认为没有可行的输出有关的Native API的多文档:预计只使用Win32 API的与系统交互的应用程序。从技术上讲,本机API使用Win32 API的发言,是一组来自NTDLL.DLL(用户模式调用者)和NTSOKRNL.exe(内核模式的调用者)导出的函数。例如,正在执行的线程通常有两个线程堆栈:一个用于用户模式,另一种为内核模式。所以,如果一个用户模式的函数被调用,如:CreateFile,它已进入内核模式的过渡,其中后接受环0内核模式特权,它转换NtCreateFile。也就是说,在本机API的API总是以一个或两个前缀:NT或ZW。在他们的用户模式实施NTDLL.DLL中,两个组的API是相同的,相同的代码点。在内核模式,它们之间的区别:NT版本的API的实际执行,而ZW版本是通过系统调用机制的存根。在新台币的旧版本,堆API管理NTDLL.DLL了kernel32.dll的地方。在一些堆API例程,KERNEL32.DLL q​​uot; stubquot; NTDLL.DLL。这被称为"snappingquot。当一个模块的导出捕捉到另一个模块的出口,它被称为quot; snappingquot;模块。系统调用机制
这几乎是保证进入到操作系统的API调用系统调用的代码运行。系统调用发生时,用户模式代码需要调用内核模式功能。这通常发生在应用程序调用操作系统API。 API的用户模式方面通常执行基本参数检查,验证检查,并调用到内核中实际执行所请求的操作。这可以定义的操作系统,这是一个如何做好系统软件进行交互的功能和应用软件进行通信的稳定力量。请注意,如果用户模式代码可以直接调用内核,那么安全性会走出去的窗口。直接调用从用户模式内核模式功能,可以创建一个严重的漏洞,因为应用程序可以调用到一个无效的地址在内核和系统崩溃,甚至打电话到一个地址,让他们来控制系统。这就是为什么操作系统使用的一种机制,用于从用户模式切换到内核模式。总的想法是,用户模式代码调用一个特殊的CPU指令,告诉处理器交换机特权模式(内核模式执行),并调用一个特殊的服务调度例程。这个派遣例程,然后调用该特定系统的功能要求从用户模式。
在Windows NT操作系统,起源于用户模式,这是由系统内核处理的每个系统调用必须通过内核本身,它会派出和执行的大门。这门被称为中断INT 2EH。虽然NTDLL.DLL库的用户端上的系统调用,处理合格后大门,ntsokrnl.exe接管调用内部函数KiSystemService(),并把原来的系统调用。 KiSystemService使用一个查找表,应使用原生API调用分配的原始呼叫的信息。此系统服务表被称为不锈钢。考虑的一个典型的Windows 2000系统调用例子,在WinXP中,NTDLL.DLL中NtReadFile / ZwReadFile拆卸:

Ntdll!ZwReadFile:

77f8c552   mov  eax, 0xa1

77f8c557   lea   edx, [esp+4]

77f8c55b   int 2e

77f8c55d   ret  0x24

EAX寄存器加载与服务数量,和EDX寄存器指向的内核模式函数接收的第一个参数。这就是为什么我们增加了32位堆栈指针。当调用INT 2E指令,处理器采用的中断描述符表(IDT),以确定调用的处理程序。内幕交易审裁处(这被称为中断矢量表),是一个处理器拥有的表,告诉处理器中断或异常发生时调用其中常规。处理程序数量通常是一个十六进制多个中断数的4倍。 IDT中断2E点进入内部NTOSKRNL的功能称为KiSystemService,这是内核服务调度。 KiSystemService验证服务的数量和堆栈指针是有效的,并调用特定的内核功能要求。现在,让我们的考虑NtWriteFile / ZwWriteFile拆卸:{C}
需要注意的是价值7FFE0300h是第一次到EDX提出。因此,在7FFE0300h到下面的函数的指针:
MOV EDX, ESP

SYSENTER

注意,而不是调用中断以执行切换到内核模式,目前该系统采用特殊的SYSENTER指令,以执行开关。异常处理
有一个例外是在一个程序,使得它立即跳转到一个特殊的函数调用异常处理程序的特殊条件。异常处理程序,然后决定如何处理异常,并可以纠正的问题,或使程序继续从相同的代码的位置,或从另一个位置,恢复执行。中断和异常,那么,是操作系统转移以外的正常流动的控制处理器代码的条件。硬件或软件可以检测到它们。长期陷阱是指处理器的机制,为捕捉一个执行线程异常或中断发生时,控制转移到操作系统中的一个固定位置。在Windows中,处理器的控制权移交给陷阱处理程序,功能,具体到一个特定的中断或异常。有两个基本类型的异常:硬件和软件。硬件异常是由处理器产生的异常:例如,当一个程序访问无效的内存页面(页面错误),或当发生了被零除。
内核区分下列方式的中断和例外。中断是一个异步事件(可以发生在任何时间),是处理器执行无关。主要是由I / O设备,处理器​​时钟或定时器产生中断,并可以启用或禁用位值的变化。一个例外是一个同步的条件下,从一个特定的指令的执行结果。因此,无论是硬件或软件可以生成异常和中断。例如,一个总线错误例外是由硬件问题引起的。如果您的系统技术员,如果他能检查到PCI总线的硬件有关的问题,然后进行测试,以检查符合PCI总线。 IRQ / DMA,您的技术人员检查软件的IRQ。目前从0加载到内存中的中断,这种类型的功能可以报告??FFH。您可以使用此信息来查找中断连接通过系统BIOS的地址,每个中断点。此数据可有助于解决BIOS和软件驱动程序之间的冲突。同时,尝试系统线程映射到一个设备驱动程序。做一个目录列表您的整个C:驱动器驱动器:使用网络路径来访问您的彗星。例如,如果您的计算机的名称是STATION1,键入"DIR \ \ system1的\ C $ / S??现在,火起来的Process Explorer(公用事业由Mark Russinovich介绍在TechNet上的Sysinternals编写一个功能强大的过程)。确保您已选定列的一部分,所以它是CPU上下文开关三角洲。双击"系统"选项卡上的线程,而"DIR??命令运行。看看SRV.SYS!的WorkerThread和点击其属性。如果你看到一个系统线程运行,你不知道的驱动程序是什么,按模块"按钮,而高照明在显示屏上显示SRV.SYS的线程。参考文献Windows内部,由Mark Russinovich和David所罗门编写的。

回答

评论会员:logicchild 时间:2012/01/24
感谢您的反馈。是的,我大概描述用户/系统接口太松,
Win32k.sys是USER和GDI的设备驱动程序。如果它是一个设备驱动程序,它可能接口或总线,HAL,内核接口。可能在于如何的USER和GDI API用于在旧版本的NT处理的混乱。他们使用的路由和打包处理消息CSRSS.EXE,然后通过Win32k.sys中的驱动。和KERNEL32.DLL库,其中包含几乎所有的C风格的DLL处理系统功能
评论会员:axelriet 时间:2012/01/24
介绍段包含至少两个showstopping事实错误:

GT;重要的是要知道,在Win32子系统考虑的组件不负责整个Win32 API中,只为用户和
GDI部分,
你忘了KERNEL32.DLL,Win32子系统的重要组成部分。

GT; NT内核无关与GUI
自1996年(NT 4.0)](见WIN32K.SYS)