zoukankan      html  css  js  c++  java
  • windows内核编程 白话设备栈

    在ntddk.h中定义了该函数原型:

    #if (NTDDI_VERSION >= NTDDI_WINXP)

    NTKERNELAPI

    NTSTATUS

    IoAttachDeviceToDeviceStackSafe(

        __in  PDEVICE_OBJECT SourceDevice,

        __in  PDEVICE_OBJECT TargetDevice,

        __deref_out PDEVICE_OBJECT *AttachedToDeviceObject

        );

    #endif

    我们加载微软的sfilter源码进行分析

    1 创建sfilter的CDO

    图1

    驱动Sfilter.sys等待 文件系统驱动的加载 SfFsNotification

    图2

    我们可以看到 Ntfs.sys驱动的CDO地址是0x862c8270

    这时候 我们的Sfilter即将创建一个FiDO附着在Ntfs的CDO上面
      

    图3

    新创建的FiDO的地址是0x86337998

    而newDeviceObject->DriverObject的驱动地址正是我们的Sfilter的驱动地址

    另外newDeviceObject->NextDevice是Sfilter!CDO的地址

    这说明,IoCreateDevice的时候,新建的DeviceObject在会插在以往的DO之前 如图4

    图4

    下面的任务便是附着FiDO于Ntfs驱动的CDO之上

    IoAttachDeviceToDeviceStackSafe(

      newDeviceObject,

        DeviceObject,

         &devExt->AttachedToDeviceObject );

    继续用winDBG查看

    图5

    FiDO的地址是0x86337998

    FiDO->AttachedDevice的地址是0x00000000 此时FiDO在设备栈的最顶层

    现在明了了 DeviceObject->AttachedDevice指向的是上层的设备

    图6

          
     

    图7

    我们用winDBG验证一下

    图8
     

  • 相关阅读:
    asp.net web api KnownTypeAttribute
    nodejs 递归创建目录
    nodejs 复制、移动文件
    windows cmd命令行下创建文件和文件夹
    nodejs http静态服务器
    C# Socket TCP Server & Client & nodejs client
    gem 安装nokigiri
    nsis 固定到任务栏
    SpringBoot整合JPA
    Freemaker FTL指令常用标签及语法
  • 原文地址:https://www.cnblogs.com/UnMovedMover/p/4195063.html
Copyright © 2011-2022 走看看