YJX_Driver_026_手动加载NT式驱动(非工具)

1、

手动加载NT式驱动(非工具)
  A、观察注册表
  B、手动运行驱动
  C、手动停止驱动

 

【100】regedit

  【145】文件--> 导出(F)... 可以看到 子键的路径为:“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”

    【170】这个是 关于 驱动服务的加载项 在注册表里面的位置

 

【195】以一个实例来说明

  【225】打开 DriverMonitor  【245】加载驱动,就以第18课的驱动(DDK_HelloWorld.sys)为例

  【275】看一下,在未用DriverMonitor加载之前,注册表里面的情况

    【325】【335】注意看这一段范围,【355】DriverMonitor载入驱动(ZC: 此时还未点击"GO")

  【380】注册表 刷新一下【515】没有看到变化... 可能他做测试的时候,已经有了相关信息...

  【540】将 DDK_HelloWorld.sys 改名为 DDKHelloWorld.sys,再用DriverMonitor打开(ZC: 还未点击按钮"GO")

  【554】注册表 刷新一下,【565】这时,多了一个  项“DDKHelloWorld”,里面有"DiaplayName"、"ErrorControl"、"ImagePath"、"Start"、"Type"

    【630】"ImagePath" 的值 “\??\G:\驱动教程\018_读出SSDT表当前函数地址\mini_ddk\sys\i386\DDKHelloWorld.sys” 是以 "\??"作为开头,包含驱动的绝对路径

  【785】注册表 导出 子项"ddkhello"

    分析导出的信息

    【855】导出的信息中 "ImagePath"是以十六进程的形式显示的

ImagePath 
\??\G:\驱动教程\018_读出SSDT表当前函数地址\mini_ddk\sys\i386\DDKHelloWorld.sys
"DisplayName"="DDKHelloWorld"
"Type"=dword:00000001 // 1:表示载入的是驱动
"Start"=dword:00000003 // 3:表示按需要启动,2:表示(系统启动的时候就)自动启用驱动,
"ErrorControl"=dword:00000001// 1

      【1080】"Start" : 好像还有一个值,1:表示以手动来启动驱动。具体记得不太清除

      【1110】"ErrorControl"一般都是为1,默认为1,

      【1130】"DisplayName" 显示名,可以随意改变。这个名字会显示在 服务项 或 设备管理器 里面的时候,它要显示的一个名字

      【1200】注册表“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DDKHelloWorld” 中的 项"DDKHelloWorld" 就是 我们所要启动的驱动的名字

 

【1230】cmd命令测试一下:"net start ddkhelloworld"(ZC: 貌似这里的"ddkhelloworld"大小写不敏感)

  【1280】"net stop ddkhelloworld"

  【1365】此时刷新一下注册表,它另外通过系统创建了一些项,一些计数。这些并不是很重要,这些由系统自动创建的

    【1480】又"net start ddkhelloworld"、"net stop ddkhelloworld" 了一下,貌似计数没有变...

 

【1540】在虚拟机里面做一下测试,∵ 主机启动不是很方便,不方便我们录像

  【1590】首先 准备一个驱动

    【1640】以 第21课的驱动,放在D盘根目录下

  【1745】注册表,【1800】来到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services"(在"状态栏"中显示有 当前注册表的路径)

    【1825】新建一个 项,取名为"mydriver"

      【1970】在 项 的里面,新建(N)-->字符串值(S): 名称==>ImagePath,数值数据==>"\??\D:\yjxyjx.sys"

      【2115】新建(N)-->字符串值(S): 名称==>DisplayName,数值数据==>"mydriver"

        【2155】一般来说,自动创建的时候,它的值 和 项的名称是相同的,或者是 与驱动的名字是相同的

      【2197】新建(N)-->DWORD值(D): 名称==>Type,数值数据==>"1"

      【2225】新建(N)-->DWORD值(D): 名称==>Start,数值数据==>"2"

        它就是自动启动的

      【2280】新建(N)-->DWORD值(D): 名称==>ErrorControl,数值数据==>"1"

    【2285】这样,yjxyjx.sys就能自动启动了

【2355】本方式 与 代码调用API函数来实现控制驱动 有一些区别

  【2375】如果 不重启OS的话,需要命令行的方式,好像通过命令行的方式也是不能启动的,可以试一下

  【2430】【2495】cmd --> "net start mydriver",提示“服务名无效”

  【2515】重启OS  (ZC: 个人感觉,貌似重启OS之后,即使是 非自动启动的驱动,也能通过命令行来控制yjxyjx.sys,∵OS已经知道&关注了注册表的相关改变了(驱动的相关注册表配置信息),待测试)

  【2530】在 重启OS 之前,通过工具看一下相关区别的信息

    【2545】此时yjxyjx.sys 是并未在内存中载入的,KernelDetective的 标签"驱动程序" 中 没有 yjxyjx.sys

  【2690】重启OS

  【2790】重启OS 完毕,再次进入OS

  【2840】KernelDetective的 标签"驱动程序" 中 找到了 yjxyjx.sys

  【2910】通过命令行 对yjxyjx.sys 进行控制,此时已经加载了"net stop mydriver",成功

  【2980】一般来说,通过工具(DriverMonitor)来载入yjxyjx.sys的话,它会自动以 驱动的名字去掉后缀名 作为服务项的名字

  【3045】把“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mydriver”的内容导出来看一下  mydriver.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mydriver]
"ImagePath"="\\??\\D:\\yjxyjx.sys"
"DisplayName"="mydriver"
"Type"=dword:00000001
"Start"=dword:00000002
"ErrorControl"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mydriver\Enum]
"0"="Root\\LEGACY_MYDRIVER\\0000"
"Count"=dword:00000001
"NextInstance"=dword:00000001

  【3150】此时yjxyjx.sys是停止状态,再刷新一下 KernelDetective的 标签"驱动程序"中的内容,里面找不到yjxyjx.sys。但是注册表里面的信息 还是在的

【3230】注册表中 "Start"改为"3"(ZC: 表示按需要启动。到底,按需要启动 是什么时候启动?)

【3300】将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 的 项"mydriver" 改名为"yjxcom"

  【3330】删掉 项"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\yjxcom\Enum"

  【3385】这样,我们下次启动OS的时候,就不会启动 驱动yjxyjx.sys(项"yjxcom"),它需要我们以命令的方式 手动来启动

  【3425】现在 项"mydriver" 改名为 项"yjxcom" 了,此时再"net start mydriver" 报错:

    “

    发生系统错误 2。

    系统找不到指定的文件。

    ”

    ZC: 此时"net start yjxcom"会怎么样?能正常启动吗?

 

【3515】给大家布置一个作业

  本节课的手动设置注册表的相关信息 和  代码调用API加载驱动引起的注册表改变 进行一个比较,更深入的研究

  ZC: 代码调用API加载驱动引起的注册表改变,就需要监视注册表的变化了,貌似 以前听说过有能工具监视注册表变化,但是不知道是什么工具...

 

2、

 

posted @ 2016-04-07 10:28  DebugSkill  阅读(371)  评论(0编辑  收藏  举报