阅读:1439回复:7
关于DeviceIoControl,50分
遇到一个很奇怪的事,
我用应用程序和驱动通信, 开始调createFile成功, 但是调 DeviceIoControl( hDevice, IOCTL_KNLDRV_WLOG, NULL, 0, pf, sizeof(PINFO), &dwDev, NULL ) 总返回0, 我在驱动中加了 DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = MydrvDispatchIoctl; 而且在 MydrvDispatchIoctl函数的第一行就加了 DbgPrint(.........) 也没有打印出来。。。。 为什么呢? 谢谢! |
|
沙发#
发布于:2002-06-06 20:36
是否你CREATE的不是这个设备.你可以在IRP_MJ_CREATE中加一个打印语句看看.
或者是你的IRP_MJ_CREATE或IRP_MJ_DEVICE_CONTROL处理有什么特殊的地方,使用事件等同步对象,或没有正确返回Irp.不过可能性很小. 希望能有帮助. |
|
板凳#
发布于:2002-06-06 20:46
多谢您的回复,我在create和close里打印
都没有问题。。。。 而且最让我费解的是 GetLastError居然=0 |
|
地板#
发布于:2002-06-06 20:55
哦,我错了,
getlasterror返回应该是1, 也就是ERROR_INVALID_FUNCTION |
|
地下室#
发布于:2002-06-06 21:53
可能是IOCTL代码没有定义
|
|
|
5楼#
发布于:2002-06-06 22:06
你要确定的是在创建该设备对象之后把设备对象的初始化标志清掉。
|
|
6楼#
发布于:2002-06-06 22:08
估计就是因为你没有清除该标志,不然应该可以得到IRP_MJ_CREATE请求的
|
|
7楼#
发布于:2002-06-07 23:02
在发出deviceiocontrol之前,用softice 的,driver yourdrive看一下, 或许你没有映射dispatch routine没有成功。
|
|