阅读:1444回复:9
DriverEntry单例程驱动程序问题
我编写的驱动源文件中只有DriverEntry一个例程如下
#pragma PAGEDCODE extern \"C\" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { // DriverEntry DbgPrint(\"Welcom to DriverEntry!!\\n\"); return STATUS_UNSUCCESSFUL; } 安装的时候会反复调用DriverEntry例程儿进入死循环 有什么方法使得DriverEntry只能被调用一次儿不至于进入死循环啊? 我试过把STATUS_UNSUCCESSFUL改为STATUS_SUCCESS,结果出现了页面错误而使机器重启, 怎么办啊!!!!!!! |
|
沙发#
发布于:2004-04-22 09:06
why donnot you export other driver entry points?
|
|
板凳#
发布于:2004-04-22 11:25
DriverEntry不成功,一直在安装,所以进入死循环,再加一个AddDevice例程看看吧
|
|
|
地板#
发布于:2004-04-22 12:31
能具体说一下原因吗?不加别的例程就不能避免这种情况了吗?
|
|
地下室#
发布于:2004-04-23 13:20
DriverUnload例程
在WDM驱动程序中,DriverUnload例程的作用就是释放DriverEntry例程在全局初始化过程中申请的任何资源,但它几乎没什么可做。如果你在DriverEntry中备份了RegistryPath串,应该在这里释放备份所占用的内存: VOID DriverUnload(PDRIVER_OBJECT DriverObject) { RtlFreeUnicodeString(&servkey); } 如果DriverEntry例程返回一个失败状态代码,系统将不再调用DriverUnload例程。所以,不能让DriverEntry例程出错后产生任何副作用,必须在它返回错误代码前消除副作用。 把这个加上试试 |
|
5楼#
发布于:2004-04-25 20:17
DriverUnload例程 显然他没有引用! |
|
|
6楼#
发布于:2004-04-26 09:19
我可以试试,但是我在DriverEntry中几乎什么也没做,副作用是怎么引入的呢?
另外如果我在这种情况下使DriverEntry返回SATUS_UNSUCCESSFUL为什么DriverEntry会一直被调用呢? [编辑 - 4/26/04 by ccwss000] |
|
7楼#
发布于:2004-04-29 13:15
不会吧,居然有这种事,不知你的Driver是怎样加载的。
|
|
|
8楼#
发布于:2004-05-10 09:37
你看DDK
driverunload是必须实现的例程之一 你至少要为他分配入口 即使该例程什么也不做 |
|
|
9楼#
发布于:2004-05-10 12:09
你看DDK 因该没关系的,系统在传递给你DRIVEROBJECT之前会把里面所有的例程都指向一个默认的处理过程,所以你写不写是无所谓的. |
|
|