阅读:1359回复:2
关于deviceiocontrol的问题.解决问题给50分.
用driver works生成一个USB驱动框架,在里边写了一些iocontrol,
但是我在应用程序通过API函数deviceiocontrol()调用这些IOCONTROL时,用GETLASTERROR()得到31的错误,内容为; A device attached to the system is not functioning 和设备通信应该是没问题的,因为我可以得到设备的设备描述符. 自己查到的原因是m_LOWER.submiturb()不成功,但是为什么不成功就不知道了. 到底是什么原因呢?我该如何解决? 下边是我写的一个IOCONTROL的实现: NTSTATUS DFUDevice::DeviceControl(KIrp I) { NTSTATUS status=STATUS_SUCCESS; PVOID pBuffer = I.IoctlBuffer(); ULONG dwInputBufferSize = I.IoctlInputBufferSize(); ULONG dwOutputBufferSize = I.IoctlOutputBufferSize(); I.Information() = 0; I.Status() = STATUS_SUCCESS; switch (I.IoctlCode) {.......... case DFU_IOCTL_GETSTATUS: { t << \"DFU_IOCTL_GETSTATUS \\n\"; URB u; RtlZeroMemory(&u, sizeof(URB)); m_Lower.BuildVendorRequest( reinterpret_cast<PUCHAR> (pBuffer), dwOutputBufferSize, static_cast<UCHAR>( DFU_GETSTATUS ), static_cast<USHORT>( 0 ), TRUE, FALSE, NULL, 0, URB_FUNCTION_VENDOR_DEVICE, &u ); status = m_Lower.SubmitUrb(&u); if( !NT_SUCCESS(status) ) { t<<\"can\'t transfer the urb\\n\"; break; } break; } |
|
沙发#
发布于:2005-04-21 16:02
如果这些请求是你自己定义的,那么你可能需要Complete而不是把request发到下面去(如发到USB总线)。
|
|
|
板凳#
发布于:2005-04-21 17:31
那COMPLETE是我自己写么?我这个其实是仿照DS中的EZUSB例子程序写的,它也是直接发这样做的
|
|