Windows Driver开发_NT Driver框架:The driver is not in a state to accept this command
Posted 17岁boy想当攻城狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows Driver开发_NT Driver框架:The driver is not in a state to accept this command相关的知识,希望对你有一定的参考价值。
通常我们可以使用一些驱动加载工具来改变我们驱动的行为,如加载驱动时执行入口函数与卸载函数,这里是我用当我们点击Start时会调用DriverEvent函数,并且正常加载
但当我们点击Stop卸载时确报了错:
报错的大致意思是:这个驱动不支持这样的操作
这个原因是因为我们没有设置Unload函数,Windows Driver Server在卸载的时候会先检查这个驱动是否具有Unload函数,如果没有则不会去卸载,如果有的 情况下Server会将它从内核空间中移除,在移除之前会先调用Unload,在这个里面我们可以去做一些收尾工作,然后Server会将它移除。
Server移除它是有条件的,首先必须确保这个驱动里已经没有线程和没有IRP(I/O Request Package,即输入输出请求包,上层与下层没有任何联系了)在处理了,比如上层软件使用CreateFile函数与驱动建立了联系,那么就处于被引用的状态,在DRIVER里有一个引用计数器,当这个Driver被其它程序所使用时会使这个引用计数器递增,当卸载时需要保证它为0,同时当增加设备对象引用时也会使这个引用计数器递增1
首先创建一个Unload函数:
VOID UnloadDevice (IN PDRIVER_OBJECT pDriverObject)
然后在DriverEvent函数里将它指向:
NTSTATUS DriverEntry (
IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath )
pDriverObject->DriverUnload = UnloadDevice;
return STATUS_SUCCESS;
当我们设置完Unload函数之后重新build,在加载然后Stop就可以看到成功了:
注意这个设置Unload方式在WDK框架上不适用,仅适用于NT框架。
以上是关于Windows Driver开发_NT Driver框架:The driver is not in a state to accept this command的主要内容,如果未能解决你的问题,请参考以下文章