阅读:1855回复:6
核心态与用户态通讯时的问题......
我在passthru上修改了一些,用irp使应用程序与之通讯.
写了 DriverObject->DriverUnload = DriverUnload; MajorFunction[IRP_MJ_CREATE] = testCreate; MajorFunction[IRP_MJ_READ] = testRead; MajorFunction[IRP_MJ_WRITE] = testWrite; MajorFunction[IRP_MJ_CLOSE] = testClose; 应用程序与之通讯正常.但我修改了驱动代码后,重编译,安装,发现应用程序返回的结果还是旧版本驱动的结果. 甚至不安装驱动,应用程序也能访问成功,只有重启系统后,访问的结果才正常. 我想是不是我哪里没有清除干净,是不是DriverUnload没有被调用? 怎么调用? 谢谢! |
|
最新喜欢:flyfox |
沙发#
发布于:2001-12-29 14:47
我在passthru上修改了一些,用irp使应用程序与之通讯. 是的,的确没有被调用,但是其实应该是protocol_unload, 不过现在已经没有关系了,这是w2k的bug,这两个unload 都不会被调用的。 |
|
|
板凳#
发布于:2001-12-29 16:53
怎么清除创建的device呢?
我把unload的代码放到close里,到IoDeleteDevice(pDriverObject->DeviceObject)这一步时会出错 有什么解决方案么? |
|
地板#
发布于:2001-12-30 17:06
pNextObj = pDriverObject->DeviceObject;
if (pNextObj != NULL) { pDevExt = (PDEVICE_EXTENSION) pNextObj->DeviceExtension; if (pDevExt->deviceBuffer != NULL) { ExFreePool(pDevExt->deviceBuffer); pDevExt->deviceBuffer = NULL; pDevExt->deviceBufferSize = 0; } pLinkName =pDevExt->ustrSymLinkName; IoDeleteSymbolicLink(&pLinkName); pLinkName = pDevExt->ustrDeviceName; IoDeleteSymbolicLink(&pLinkName); if (pDriverObject->DeviceObject != NULL) { if (DBG) DbgPrint(\"pDriverObject->DeviceObject !=NULL \\n\"); IoDeleteDevice(pDriverObject->DeviceObject); pDriverObject->DeviceObject = NULL; } else if (DBG) DbgPrint(\"pDriverObject->DeviceObject == NULL \\n\"); } 我改了一下,结果cloes访问没问题了,发现DeviceObject == NULL,怎么已经被卸掉了? 卸载驱动时,在unbindAdapter时兰屏了...... 还有,可以把链表从应用程序传到驱动么? |
|
地下室#
发布于:2002-01-01 15:30
pNextObj = pDriverObject->DeviceObject; close?那是closehandle的时候驱动程序调用的,你不应该 在这里删除deviceobject. 从应用层要传一个内存指针给核心层? 一般不行。除非你直接通过nativeapi操作 物理内存。 |
|
|
5楼#
发布于:2002-01-02 17:49
那么应该在哪里删除deviceobject呢? unload不行,close也不行. 我想从应用层的一个链表结构中读取数据,在核心层要用的这些数据,应该怎么做啊? 谢谢! [编辑 - 1/2/02 作者: jukebox] |
|
6楼#
发布于:2002-01-03 11:55
[quote] 那么应该在哪里删除deviceobject呢? unload不行,close也不行. 我想从应用层的一个链表结构中读取数据,在核心层要用的这些数据,应该怎么做啊? 谢谢! [编辑 - 1/2/02 作者: jukebox] [/quote] 我不知道什么才是最好的删除时机,你自己看着办吧:-)。 你要把应用层的链表传给核心层,你必须把链表所指向的 内存的实际值拷贝到一块缓冲区然后devioctl。或者多次 devioctl,每次传一个链表块。 也许有更好的方法,但是因为我很长时间不看驱动程序的 书了,记不得如果用mdl方式系统是否会把内存交换到 驱动程序也能访问的地方这样的细节了。你自己可以查 查看,做个实验。 最近我不太关心驱动程序的某些实现细节,我被那些协议 细节搞晕了头。 |
|
|