(二)NT驱动基础——可动态卸载驱动编写 和 其安装卸载

来源:互联网 发布:古天乐小学 知乎 编辑:程序博客网 时间:2024/05/17 04:14

上一篇文章我们编写了NT驱动的Hello World,但是编译好的驱动如何安装和卸载呢?

 

事实上,上篇的hello World代码可以安装,不能动态卸载。

 

所以我们来改造以下原来的代码,在驱动程序上添加卸载函数

一、代码改造(新添加代码为红色

//Hello World.c


VOID DriverUnload(PDRIVER_OBJECT DriverObject)
{
 PDEVICE_OBJECT pNextDevice;
 pNextDevice=DriverObject->DeviceObject;

 

 

//删除设备链
 while(pNextDevice)
 {
    PDEVICE_OBJECT pOldDevice=pNextDevice;
    pNextDevice=pNextDevice->NextDevice;
    IoDeleteDevice(pOldDevice);  

 

 }

 DbgPrint("Driver over/n");

}

 

 

 

 

NTSTATUS DriverEntry( PDRIVER_OBJECT pDriver,PUNICODE_STRING pRegistryPath)
{


  DbgPrint("DriverEnter end/n");

  pDriver->DriverUnload=HelloWorldDriverUnload;
  return STATUS_SUCCESS;
}

分析:

   1.卸载函数可以为任意名字,将驱动入口函数DriverEntry的pDriver->DriverUnload赋值为该卸载函数名即可。

   2.NT驱动的卸载函数的编写内容,一般作两件事,一是释放动态内存,二是删除驱动设备。另外,像本例一样打印调试信息也是必不可少的。

二、编译后安装

1.编译方法与上篇文章一样

2.安装

(1)打开软件SRVINSTW

 

(2)按浏览选择编译好的hello World.sys,但是打开对话框后,并没有显示该图标

       只能手工输入

 

 

 

原创粉丝点击