YJX_Driver_015_DDK_HelloWorld卸载例程细化

1、

【178】复制第12课的代码,用vs2003(VC7.0)打开

【360】把部分代码 放到新建的头文件(mini_ddk.h)里面,然后项目再 "添加现有项"

  【592】此时 "重新生成解决方案",OK

ZC: 可以将“L"\\Device\\yjxDDK_Device"”和“L"\\??\\yjx888"” 做成全局变量,统一管理

ZC: 或者 将 devName 和 symLinkName 做成全局变量,统一管理

【1125】IoDeleteSymbolicLink 函数

【1445】卸载例程 中有一个传入参数 PDRIVER_OBJECT,但是它是一个驱动对象指针,但是它下面就有一个设备对象 它也是一个链表

【1500】先删除 读好连接,再删除 设备对象

VOID DDK_Unload(IN PDRIVER_OBJECT _pDrvierObject)
{

  PDEVICE_OBJECT pDev; // 用来取得要删除的设备对象

  UNICODE_STRING symLinkName;

  pDev = _pDrvierObject->DeviceObject;

  IoDeleteDevice(pDev); // 删除设备

  // 取得符号链接的名字

  RtlInitUnicodeString(&symLinkName, L"\\??\\yjx888");

  IoDeleteSymbolicLink(&symLinkName);

  KdPrint(("驱动成功被卸载...OK----------"));
}

【1800】_pDrvierObject->DeviceObject; 取得设备链表的头部。它是一个链表,如果有多个设备的话,用 DEVICE_OBJECT.NextDevice 来遍历(ZC: 具体是使用 设备名 还是别的东西(属性)来匹配,他没说... 用不着匹配,∵是在下载驱动,所以该驱动对象下面的所有设备对象/符号链接 都要删掉,直接全部遍历删掉即可)。

  ∵ 我们这里只创建了一个设备,于是不需要遍历查找,直接删除第一个就成

【2460】有多个设备的情况下,我们一般是把它保存到设备扩展项(IoCreateDevice时分配空间)里面,把符号链接和设备对象都存在设备扩展项里面,然后通过遍历循环 来删除所有的符号链接和设备对象

【2690】再用DDK编译一下

  【2727】驱动文件改名

  【2755】DriverMonitor载入驱动  【2816】看到驱动能够被反复的加载/运行/卸载  【2870】再用"Kernel Detecive v1.3.0"看一下,已经没有 该驱动了,已经被正常的卸载了。再用DriverMonitor运行驱动,再看"Kernel Detecive"驱动在列表里面。用DriverMonitor卸载驱动,再看"Kernel Detecive"驱动没有在列表里面,被正常的卸载了。

【3100】再用DDK编译 第12课 的驱动,测试 看现象

  【3205】虽然 DriverMonitor 提示卸载成功,但是 看"Kernel Detecive" 驱动还是在列表里面(没有真正的卸载成功),再用 DriverMonitor运行驱动,就报错了

2、

时间: 2024-10-14 01:14:14

YJX_Driver_015_DDK_HelloWorld卸载例程细化的相关文章

独家全功能USB2.0开发板,最强CY7C68013A-128核心板,超强资料不断提供更新服务

       学习USB开发再也不用买书啦,也不用花费重金去上培训班啦,IFLabs开创USB学习开发新模式,你所需要的知识.技术.范例.代码等等统统都在这里.IFLabs打造全网最丰富.最权威的USB开发平台和资料. 热卖的IFLabs精品USB2.0核心板套件再升级,全网独家推出最强.最全功能的Cypress USB 2.0 CY7C68013A-128AXC核心板开发板,全网最全配件和全网最全开发资料.只需这一次投入,即可实现USB接口开发的从入门到精通!并且有长期的全网最全开发手册更新支

通过修改CR0寄存器绕过SSDT驱动保护

为了安全起见,Windows XP及其以后的系统将一些重要的内存页设置为只读属性,这样就算有权力访问该表也不能随意对其修改,例如SSDT.IDT等.但这种方法很容易被绕过,我们只要将这些部分修改为可写属性就可以了,不过当我们的事情做完后记得把它们恢复为只读属性,不然会造成一些很难预料到的后果. cr0是系统内的控制寄存器之一.控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性. 控制寄存器最初出现于低级的286处理器中,以前称之为机器状态字(machine status word),

修改寄存器绕过保护

为了安全起见,Windows XP及其以后的系统将一些重要的内存页设置为只读属性,这样就算有权力访问该表也不能随意对其修改,例如SSDT.IDT等.但这种方法很容易被绕过,我们只要将这些部分修改为可写属性就可以了,不过当我们的事情做完后记得把它们恢复为只读属性,不然会造成一些很难预料到的后果. cr0是系统内的控制寄存器之一.控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性. 控制寄存器最初出现于低级的286处理器中,以前称之为机器状态字(machine status word),

驱动程序简单开发

我们学习程序设计,都是从“Hello World”开始的,驱动程序也不例外,今天我就写一个驱动版的“Hello World”来热热身,目的希望大家能对驱动程序的基本框架有所了解. 驱动程序分为2类,一个是Kernel模式驱动,另一个是Windows模式驱动,2种模式本质是相同,但细节不同,本文介绍的是内核模式驱动和驱动程序的安装.使用. 驱动程序同普通的EXE,DLL一样,都属于PE文件,而且都有一个入口函数.但EXE中,入口函数是main()/WinMain()和Unicode的wmain()

SSDTHook实例--编写稳定的Hook过滤函数

解说怎样写Hook过滤函数,比方NewZwOpenProcess.打开进程. 非常多游戏保护都会对这个函数进行Hook. 因为我们没有游戏保护的代码,无法得知游戏公司是怎样编写这个过滤函数. 我看到非常多奇形怪状的Hook过滤函数的写法.看得蛋痛无比. 比方: http://bbs.pediy.com/showthread.php?t=126802 http://bbs.pediy.com/showthread.php? t=126077 第一个bug: 调用这个函数 status = PsLo

驱动程序入门篇

驱动程序分为两类: 一个是 Kernel(内核) 模式驱动,另一个是 Windows (用户窗口层)模式驱动. 这两种模式本质是相同,但细节不同.本文介绍的是内核模式驱动和驱动程序的安装与使用. 驱动程序同普通的 .exe,.dll 一样,都属于 PE 文件,而且都有一个入口函数.但 .exe 中,入口函数是 main() / WinMain() 和 Unicode 的 wmain() / wWinmain(),.dll 的入口函数则可有可无,它是 DllMain(). 所以驱动程序也有入口函数

第二讲:我的第一个驱动

原文:http://blog.csdn.net/caperingrabbit/article/details/5285288 配置好了开发环境之后,下面就要通过具体的程序来了解驱动的开发了.下面我们以一个WDM驱动的框架来实现Windows驱动程序的HelloWorld. 作为一个驱动程序,首先应该写的是它的入口函数,这点跟MFC的WinMain或者C++中的Main函数一样,驱动的入口函数使用DriverEntry.在入口函数中主要实现的功能是一些分发例程的注册以及其他的需要初始化的事务. D

键盘过滤驱动

在笔者接触驱动到如今以来一以后大半个月的时间,从中让我深深的体会到了万事开头难,以及学习持之以恒的重要性.笔者也是个驱动新人,開始接触驱动的时候看着张帆的<Windows驱动开发技术具体解释>讲的挺细,对新手来说是个不错的学习资料,可是更重要的还是自己要多动手练习,笔者在学习到同步操作的相关知识的时候,实在是看天书.最后还是放弃了学习本书.再找了本楚狂人的资料学习,感觉本书对新手来说还是比較吃力的,当中笔者就是这样,非常多知识点不是非常明确,仅仅能凭借自己的感觉去做,只是造成的后果就是无情的蓝

若水软件论坛过游戏驱动保护视频教程

课程分四个大章节:?1.初级篇,2.中级篇,3.进阶篇,4.高级篇 初级篇1.VS2003/2008/VC6.0编译驱动A.VS2003驱动编译环境配置B.VS2003集成环境下编译一个简单的驱动2.创建一个卸载例程A.认识PDRIVER_OBJECT结构B.卸载例程回调函数构建C.查看卸载例程调试信息3.添加设备例程A.认识驱动对象DRIVER_OBJECTB.认识设备对象DEVICE_OBJECTC.添加创建设备的例程D.用工具查看驱动及驱动设备4.添加删除设备例程A.删除符号链接B.删除设