YJX_Driver_009_DDK_HelloWorld_NT

Posted DebugSkill

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YJX_Driver_009_DDK_HelloWorld_NT相关的知识,希望对你有一定的参考价值。

1、

【01:55】.c 后缀名的文件,入口函数DriverEntry() 的默认调用方式是 _stdcall 。

  .cpp的话,入口函数DriverEntry() 的默认调用方式是 _cdecl 。

【02:30】入口函数DriverEntry() 必须是以 _stdcall 来传递参数的

【03:45】PDRIVER_OBJECT // 此结构用来传递驱动对象,由I/O管理器传递进来的驱动对象

    PUNICODE_STRING // 此结构用来指向此驱动负责的注册表,也就是驱动程序在注册表中的路径

【05:55】mini_ddk.c 的代码为:

1 // _stdcall
2 #include <ntddk.h>
3 
4 int DriverEntry(PDRIVER_OBJECT A, PUNICODE_STRING B)
5 {
6     return 1;
7 }

【06:06】这里,用DDK的build来编译

【06:18】创建 文件makefile 和 文件Sources

 【06:40】makefile 格式固定,且一般只有一行(不能有前导空格)

   【06:52】"#"开始的一行,为注释

1 # 此文件 一般只有一行 并且不需要修改 不能有前导空格
2 !INCLUDE $(NTMAKEENV)\makefile.def

【07:20】重点讲 Sources文件的书写

 1 # 下面这行 指定 生成驱动的名字
 2 TARGETNAME=DDK_HelloWorld
 3 # 下面这行 指定生成文件的类型,DRIVER 指驱动
 4 TARGETTYPE=DRIVER
 5 # 下面这行 指定生成驱动所在的路径(这样指定的话,DDK_HelloWorld.sys 就会生成在当前目录的 Check文件夹 中)
 6 TARGETPATH=Check
 7 # 下面这行 指定相关头文件所在的目录路径
 8 INCLUDES=$(BASEDIR)\inc; 9     $(BASEDIR)\inc\wxp;10 
11 ## 上面必须空一行 (是通过实践证明的,若这里不空一行的话,也是不能通过编译的)
12 # F:\WINDDK\3790.1830 等价于 $(BASEDIR)
13 # 下面这行 指定驱动源代码 *.cpp 或 *.c
14 SOURCES=mini_ddk.c

 

【11:18】这几个文件 mini_ddk.c / makefile / Sources ,必须放在同一个目录下。

【11:40】顺便讲一下 Sources文件中的 一行末尾的"\"(如上面的INCLUDE中),当含有多个路径的时候 可以继续往后面添加。这个"\"也可以删除,删除的话,后面的内容必须是写在同一行里面的(后面的内容不能写在下一行中),这个"\"就相当于 换行 的作用

  【12:03】注意 INCLUDE中 每一个目录写完之后,后面是跟一个 分号,而 SOURCES中 文件名后面 是没有 分号 的。

【12:35】该驱动,什么都不做 它能够被正常的加载,但是不能被正常的卸载 ∵它没有 相关的卸载例程(回调函数)

【12:58】打开 DDK3790.1830 自带的命令行(Windows XP Checked Build Environment)

  【13:03】设置目录路径(源代码所在的路径)

  【13:10】输入命令 "build",看是否会报错 ==> 有报错信息

    ZC:我这里居然么有报错哇

     【13:55】他 是把 PUNICODE_STRING 写成了 PUNICDOE_STRING

   【14:21】再次编译 通过了

 【14:50】再次 强制编译生成驱动 "build -c"

   ZC: 我记得 以前用过 类似"build -cZg"

【15:20】以后 将在 mini_ddk 的基础上,完善我们的驱动。如 创建默认的卸载例程

【15:38】这里(mini_ddk)写的不标准,如 DriverEntry 默认是放在init标识的一个内存节里面 但这里我没有这样做

 

2、

 

以上是关于YJX_Driver_009_DDK_HelloWorld_NT的主要内容,如果未能解决你的问题,请参考以下文章

YJX_Driver_021_绕过驱动保护

YJX_Driver_022_NT式驱动的安装

YJX_Driver_017_需要具备的理论知识

YJX_Driver_014_VM+Wlndbg调试驱动

YJX_Driver_020_JMP地址转换公式推导

YJX_Driver_015_DDK_HelloWorld卸载例程细化