【驱动开发】001 Hello world

note:看了一下《Windows内核安全与驱动开发》自己做一下简单笔记。代码基本都是来自这本书。

开发环境: vs2012+wdk8.0

运行环境:win7 32 


驱动 helloWord

// 引用驱动头文件
#include <ntddk.h>
// 提供一个unload函数只是为了让这个程序能够动态的卸载
VOID DriverUnload(PDRIVER_OBJECT driver)
{
	// 但是实际上我们什么都没做 只打印一句话
	DbgPrint("first: Our driver is unloadding...\r\n");

}

// DriverEntry 入口函数相当于 main函数
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
// 这里为了方便调试我们手动加入断点
#if DBG
	_asm int 3 ;
#endif 

	// 这是内核模块的入口,可以在这里是我们想写的东西
	DbgPrint("first:Hello, my salary!");

	UNICODE_STRING str = RTL_CONSTANT_STRING(L"first:hello mysalary");
<span style="white-space:pre">	</span>// 这里打印结构体 所以必须传入结构体存放地址
	DbgPrint("%wZ",&str);

	// 设置一个卸载函数,便于这个函数退出
	driver->DriverUnload = DriverUnload ;
	return STATUS_SUCCESS ;
}


  上面的DriverEntry是每个内核模块导入口,在加载这个模块时候被系统进程System调用一次。driver->DriverUnload = DriverUnload ; 这样我们的驱动模块可以被系统动态的卸载。如果不写这句话,这个驱动被加载后就无法卸载。

编译后 放入虚拟机中。打开DebugView ,设置一下 内核捕捉。

然后用驱动加载工具 加载并运行。是不是发现虚拟机卡住了?因为我们在DriverEntry里面写了这句话:

#if DBG

_asm int 3 ;

#endif  

调试模式下,调用系统中断3 。开启windbg(符号链接 设置等省略),进行双机调试。 按下g 键继续运行,这个时候 Debug View 有输出:


停止驱动,并卸载



显示以上信息,表明我们第一个驱动写完并成功了。

总结:

1.  驱动运行与系统内核空间,EXE运行于系统之上的用户空间

2. DriverEntry 是驱动入口,两个参数(PDRIVER_OBJECT 驱动对象,可以理解为驱动本身; PUNICODE_STRING  驱动在注册表中路径 )

3. DriverUnload 是驱动动态卸载函数,功能:驱动卸载之前释放一些系统资源,比如:对象资源、内存、句柄释放、内存属性等

4. win32驱动不需要考虑驱动签名问题。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值