阅读:2581回复:0
列位老大。一个问题请教,如何发送IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION请求
驱动中发送,IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION,给底层,总是返回参数出错。查看资料,必须设置,Parameters.DeviceIoControl.Type3InputBuffer 参数。该怎么做呢。
问题是KLowerDevice中的DeviceIoControl好像没有设置这个内容。 下面是我的代码。相关。仿照DeviceIOControl编的。直接 void callbackrouting(void *p) { } NTSTATUS IOCTL_Suspend_Handler(KIrp I) { UCHAR buf; PUSB_IDLE_CALLBACK_INFO p=NULL; p = new(NonPagedPool)USB_IDLE_CALLBACK_INFO; p->IdleCallback=callbackrouting; p->IdleContext=&buf; PIO_STACK_LOCATION stack=NULL,nextStack=NULL; PIO_STACK_LOCATION stack1=NULL,nextStack1=NULL; PIRP pIrp; IO_STATUS_BLOCK StatusBlock; KEvent event(NotificationEvent, FALSE); NTSTATUS status; pIrp = IoBuildDeviceIoControlRequest( IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION, m_Lower.DeviceObject(), (void *)p, sizeof(struct _USB_IDLE_CALLBACK_INFO), NULL, 0, TRUE, (PKEVENT)event.Object(), &StatusBlock); if (pIrp == NULL) return STATUS_INSUFFICIENT_RESOURCES; status = IoCallDriver(m_Lower.DeviceObject(), pIrp); if (status == STATUS_PENDING) { event.Wait(); status = StatusBlock.Status; } // BOUNDS_CHECKER(COMPLETED_CALLDOWN, (this, status, *pInformation)); delete p; return status; |
|