添加卸载驱动例程(驱动学习笔记二)

0x0 驱动卸载

管理驱动

卸载驱动其实用简单的命令行就可以做到,或者使用cmd脚本即可,当然工具的便利性毋庸置疑,工具的选择也可以有很多(如 drivermonitor)。这里的重点是把驱动启用,停止,删除的命令行做下记录:
驱动安装后
启动:sc start mydriver
停止:sc stop mydriver
删除:sc delete mydriver

工具使用

加载驱动时出现如下多个问题:

  1. 使用debugView时有如下提示:
    dbgview问题解决
    在网上找到的说法时把文件夹中的dbgv.sys重命名重启软件即可。
  2. 驱动需要签名:试过网上的一些解决方式,但是似乎没有很好的效果,暂时未找到很好的方法,只能用F8进免驱动检查临时用一下,临时用的是一个64位签名工具,可临时签名。
  3. 驱动版本问题:在64位操作系统上安装32位驱动,使用monitor时会报”错误 1275.此驱动程序被阻止加载”,因此需要使用64位驱动,另外,monitor需要以管理员运行。

代码问题

在加载如下代码(不包括蓝色部分)编译的ddk驱动时,每次卸载驱动的时候都会蓝屏,搞得不明所以,没得法子只得用windbg联调去看到底问题出在什么地方了,由于有pdb,很快便定位到问题点,跟观察的结果一样,果然时在卸载驱动的时候蓝屏了,为什么呢?

#include <ntddk.h>

#define INITCODE code_seg("INIT")
#define PAGEDCODE code_seg("PAGE")

VOID DDK_Unload(IN PDRIVER_OBJECT pDriverObject);

#pragma INITCODE
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING b)
{
	KdPrint(("驱动成功被加载---OK++++++++"));
	pDriverObject->DriverUnload = DDK_Unload;
	return 1;
}

VOID DDK_Unload(IN PDRIVER_OBJECT pDriverObject)
{
	KdPrint(("驱动成功被卸载---OK--------"));
	DbgPrint("驱动成功被卸载---OK--------"); //使用DbgPrint只需一个括号
}

此时,我想起《Windows驱动开发技术详解》,对比其中的代码我们看到书中在每个函数前面都标有CODE类型,在驱动卸载函数前,其代码清单中有#pragma INITCODE,#pragma PAGEDCODE等,因此,在卸载驱动函数前加上#pragma PAGEDCODE驱动卸载再也不会蓝屏了,如下:

#include <ntddk.h>

#define INITCODE code_seg("INIT")
#define PAGEDCODE code_seg("PAGE")

VOID DDK_Unload(IN PDRIVER_OBJECT pDriverObject);

#pragma INITCODE
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING b)
{
	KdPrint(("驱动成功被加载---OK++++++++"));
	pDriverObject->DriverUnload = DDK_Unload;
	return 1;
}

#pragma PAGEDCODE
VOID DDK_Unload(IN PDRIVER_OBJECT pDriverObject)
{
	KdPrint(("驱动成功被卸载---OK--------"));
	DbgPrint("驱动成功被卸载---OK--------"); //使用DbgPrint只需一个括号
}

TO be continue…

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值