阅读:1778回复:2
关于应用程序和驱动程序的通信问题
我想在pc端读取设备的配置信息,于是我的代码如下:
驱动空间: NTSTATUS USBCANDevice::USBCAN_IOCTL_READ_BOARD_INFO_Handler(KIrp I) { NTSTATUS status = STATUS_INVALID_PARAMETER; t << "Entering USBCANDevice::USBCAN_IOCTL_INIT_CAN_Handler, " << I ULONG byteNumber = I.IoctlOutputBufferSize(); PURB pUrb = m_Lower.BuildVendorRequest( (PUCHAR)I.IoctlBuffer(), byteNumber, 0, 1, 0, TRUE ); status = m_Lower.SubmitUrb(pUrb,NULL,NULL,5000L); I.Information() = byteNumber; I.Status() = status; return status; } 应用程序: void Test_USBCAN_IOCTL_READ_BOARD_INFO(void) { CHAR bufOutput[10]; // Output from device ULONG nOutput; printf("Issuing Ioctl to device - "); if (!DeviceIoControl(hDevice, USBCAN_IOCTL_READ_BOARD_INFO, 0, 0, bufOutput, sizeof(bufOutput), &nOutput, NULL) ) { printf("ERROR: DeviceIoControl returns %0x.", GetLastError()); Exit(1); } } 现在我的问题是: 应用程序中我明明就是用阻塞方式creatfile的,但是调用deviceiocontrol的时候有时候成功,有时候立即返回一个错误,getlasterror得到errorcode为1f。 同时驱动程序里在submiturb有时候也出现错误,status为0xc0000001。 请问各位老师这个问题出在哪? 还有谁能给一份正确稳定的代码让我看看,小弟在此谢过了。 |
|
沙发#
发布于:2008-04-16 10:00
我也遇到相同的问题,兄弟们搞定门?
|
|
|
板凳#
发布于:2007-07-23 00:56
我也遇到和你一样的问题
submiturb的返回码要么一直对,要么一直错! 我和你一样,也是用driverworks写的 驱动 可以 连续读回来16mbytes,每次1kbytes,submiturb的返回码都是对的! 也存在整个下午无论如何都不对的情况 错误码恒定为0xc0000001 兄台,你解决了么??? |
|