内核理论基础 || Windows R3与R0通信

Windows 分为应用层与内核层。它们之间是如何进行通信的呢?

    内核主要由各种驱动(在磁盘上是.sys文件)组成,这些驱动有的是windows系统自带的(例如ntfs.sys、tcpip.sys、win32k.sys),有的是由第三方软件厂商提供的。驱动加载之后,会生成对应的设备对象,并可以选择向R3提供一个可供访问和打开的符号链接。常见的盘符C、D、E等其实都是文件系统驱动创建的设备对象的符号链接,对应的符号链接分别是 “\??\C:\”  “\??\D:\”  “\??\E:\”等。

      应用程序可以根据内核驱动的符号链接名调用CreateFile()函数打开。在获得一个句柄(handle)之后,程序就可以调用应用层函数与内核驱动进行通信了,例如ReadFile()、WriteFile()及DeviceIoControl()等。

      内核函数一旦执行了DriverEntry()入口函数,就可以接收R3层的通信请求了。在内核驱动中专门有一组分发派遣函数用来分别响应应用层的调用请求,如图7.9所示。每一个应用层负责I/O的API都对应与一个内核中的分发派遣函数,例如CreateFile()对应于DispatchCreate()。API被调用之后,传递给API的数据和命令就会通过IRP直接传递给对应的驱动分发派遣函数来处理。当驱动分发派遣函数处理完这个IRP请求之后,驱动可以结束(或允许,或阻止)这个IRP,或者把这个IRP发给下层驱动继续处理。

                 

何为IRP ?

       IRP的全名是I/O Request Package,即输入输出请求包,它是Windows内核中一种非常重要的数据结构。上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求,操作系统将相应的I/O请求转换成相应的IRP, 不同的IRP会根据类型被分派到不同的派遣例程中进行处理。

      通俗来讲,在R3向R0通信过程中,应用层的命令和数据会被系统的I/O管理器封装在一个叫作IRP的结构中。

附图两张:

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值