《Windows内核安全与驱动开发》 5.1&5.2 内核与应用方面的编程

《Windows内核安全与驱动开发》阅读笔记 -- 索引目录

《Windows内核安全与驱动开发》  5.1&5.2 内核与应用方面的编程

一、生成控制设备

  1. 如果一个驱动需要和应用程序通信,那么首先要生成一个_____。
  2. ____和____构成了整个操作系统的基本框架。
  3. ____暴露给了应用层,应用层可以像操作__一样操作它。
  4. 一般而言,用于和应用程序的设备往往用来"控制"这个内核驱动,所以往往称之为____。
  5. 作为一个控制设备,一般需要____,而普通设备可以不要。

二、控制设备的名字和符号链接

  1. 控制设备需要一个____,这样它才会暴露出来,供其他程序打开与之通信。
  2. 应用层是无法直接通过____来打开设备对象的,为此必须要建立一个暴露给应用层的____。
  3. 设备名的前缀____,符号链接的前缀为____,在应用层符号链接的前缀为_____。

三、分发函数与请求处理

  1. 标准分发函数的第一个参数是____,第二个参数是_____。
  2. 在分发函数中处理请求的第一步是_____,使用API函数_____。
  3. 利用____来获取主功能号。
  4. 设置____主要用于返回输出时。
  5. ____用于记录这个请求的完成状态。
  6. ____用于结束这个请求。

四、在应用层中打开与关闭设备

  1. 打开设备使用API函数____。文件的路径就是____的路径,但是其在应用层来看,是以___开头的,注意C语言需要转义。
  2. 关闭设备使用API函数____。

五、设备控制请求

  1. CTL_CODE是一个宏,我们要做的是直接利用这个宏来生成一个自己的____。
  2. CTL_CODE第一个参数是____,我们与任何硬件没关系,可以直接定义为未知类型(FILE_DEVICE_UNKNOWN)。
  3. CTL_CODE第二个参数是____,范围为____。
  4. CTL_CODE第三个参数METHOD_BUFFERED是____,输入/输出缓冲区会在__与__之间拷贝。
  5. CTL_CODE最后一个参数是____,因为要写入数据,因此为FILE_WRITE_DATA。
  6. 除了打开设备和关闭设备之外,中间增加了使用____发送请求的过程。

六、内核中对应的处理

  1. 在处理设备控制请求时,还有如下任务要完成缓冲区是irp->AssicatedIrp.SystemBuffer的前提是,这是一个__方式的设备控制请求。
    1. 获得____。
    2. 如果有输入缓冲区,必须获取输入缓冲区的____和____。
    3. 如果有输出缓冲区,必须获得输出缓冲区的____和____。
  2. 缓冲区是irp->AssociatedIrp.SystemBuffer的前提是,这是一个____方式的设备控制请求。
  3. 只说缓冲区,未说输入还是输出缓冲区,是因为在控制设备中,输入和输出缓冲区是____的,是同一个___。

 


答案

一、生成控制设备

  1. 设备对象
  2. 设备对象  分发函数
  3. 设备对象  文件
  4. 控制设备对象 CDO
  5. 设备名称

二、控制设备的名字和符号链接

  1. 名称
  2. 设备名称 符号链接
  3. \device\[设备名称]  \??\[符号链接] \\.\[符号链接]

三、分发函数与请求处理

  1. 设备对象指针 irp请求
  2. 获得请求的当前栈空间(Current Stack Location)IoGetCurrentIrpStackLocation
  3. irpsp->MajorFunction
  4. irp->IoStatus.Information
  5. irp->IoStatus.Status
  6. IoCompleteRequest

四、在应用层中打开与关闭设备

  1. CreateFile  符号链接  \\.\
  2. CloseHandle

五、控制设备请求

  1. 设备请求功能号
  2. 设备类型
  3. 生成这个功能号的核心数字 (0x7ff,0xfff]
  4. 缓冲 用户 内核
  5. 操作需要的权限
  6. DeviceIoControl

六、内核中对应的处理

  1. 功能号 指针 长度 指针 长度
  2. 缓冲
  3. 共享 指针

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

《Windows内核安全与驱动开发》 5.1&5.2 内核与应用方面的编程

上一篇:使用DRF来快速实现API调用服务


下一篇:Windows10安装自带的Linux