Windows应用层(R3)API调用流程

应用层(R3)和内核层(R0)是如何通讯的;

R3在调用一个函数的时候究竟发生了那些事情?

比如说在R3调用一个creatFile()函数时,发生了那些事情.

下(qing)回(kan)分(xia)解(tu)

API调用流程

CreateFile()这个函数是R3的API,API通过系统中的kernel.dll或者user32.dll导出,然后进一步向下调用ntdll.dll中的native函数,就是NativeAPI,ntdll.dll文件中封装了大量的NativeAPI,简而言之就是R3API调用CreateFile()这个API时,就会在ntdll.dll中进一步调用zwCreateFile()或者ntCreatFile().然后开始进入内核层.

R3通过sysenter、syscall、INTRE的方式就冲应用层进入了R0.在Win Xp以前版本用的是INTRE这种软中断,在Xp以后用过SysEnter、SysCall进入R3.SysCall是在x64上使用.

进入R0之后就会调用ntoskrnl.exe中SSDT表(System Services Descriptor Table)中的ssdt函数,然后IoManage会将每一次的Io请求封装成一个IRP包.IRP包中封装了R3传下来的命令和数据,封装完成后,会以IRP的形式继续向下传递,到达NTFS.sys(文件系统驱动)和disk.sys(磁盘驱动).然后到达传给硬件抽象层,由硬件抽象层负责调用硬件驱动完成相关的IO操作.

图中蓝色部分就是系统的内核.ntoskrnl.exe文件的形式可能有多种 :

同一套源代码根据编译选项的不同而编译出4个可执行文件

ntoskml - 单处理器, 不支持PAE(物理地址扩展)

ntkrnlpa - 单处理器 支持PAE

ntkrnlmp - 多处理器,不支持PAE

ntkrnpamp - 多处理器,支持PAE

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容