阅读:2473回复:4
崩溃了,调一天SubmitURB( ) 时总是蓝屏
VC6 + DDK + DriverStudio USB过滤驱动
NTSTATUS UsbFilterDevice::InternalDeviceControl(KIrp I) { USHORT USBfunction; if (I.IoctlCode() != IOCTL_INTERNAL_USB_SUBMIT_URB) return DefaultPnp(I); PURB p = I.Urb(CURRENT); // get URB pointer from IRP if (p) { USBfunction = p->UrbHeader.Function; switch (USBfunction) { case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: { if (g_status.m_bCommand == TRUE) { PURB pUrb = m_Usb.BuildVendorRequest( g_status.m_comBuffer, 8, 0x22, 0x9, 0x0201, FALSE, FALSE, NULL, 0, URB_FUNCTION_CLASS_INTERFACE ); //就是这句蓝屏了,把它注释掉就没事了. 其中m_Usb是KlowerDevice m_Usb.SubmitUrb(pUrb, NULL, NULL, 0) ; g_status.m_bCommand = FALSE; delete pUrb; return PassThrough(I); } 自己调半天,上网看的都是说Pipe没有设好。我换KUsbPipe试过也是蓝屏。我是新手,望各位大侠打救,希望说得基础一些。 |
|
沙发#
发布于:2010-08-10 22:35
自己顶一个,顺便补充下Pipe的设置,使用EndPoint0
KUsbPipe m_pipe; m_pipe.Initialize (m_Usb, 0, 0); |
|
板凳#
发布于:2010-08-11 10:53
看dump文件,不行就把 verifier 打开
|
|
|
地板#
发布于:2010-08-16 18:05
初始化的端点出错了,使用driverstudio 生成的框架有bug的,必须加上0x
比如 // Initialize each Pipe object m_Endpoint1In.Initialize(m_Lower, 0x81, 16); m_Endpoint1Out.Initialize(m_Lower, 1, 16); m_Endpoint2In.Initialize(m_Lower, 0x82, 64); m_Endpoint2Out.Initialize(m_Lower, 2, 64); 而向导自动生成的代码在0x81和0x82前面都漏掉了0x, |
|
地下室#
发布于:2010-10-03 13:35
再次强烈建议大家,不要再使用DriverStudio做相关开发了!!!!
N次了吧. |
|
|