阅读:2582回复:0
如何抓取USB Device Class Code
我用filter driver使用
UsbBuildGetDescriptorRequest(&urb2, sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST), USB_INTERFACE_DESCRIPTOR_TYPE, 0, 0, &data2, NULL, sizeof(data2), NULL); status = SendAwaitUrb(fido,&urb2); NTSTATUS SendAwaitUrb(PDEVICE_OBJECT fdo, PURB urb) { // SendAwaitUrb KEVENT ioevent; IO_STATUS_BLOCK iostatus; PIRP Irp; PIO_STACK_LOCATION stack; NTSTATUS status = STATUS_SUCCESS; PDEVICE_EXTENSION pdx; PAGED_CODE(); ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; KeInitializeEvent(&ioevent, NotificationEvent, FALSE); Irp = IoBuildDeviceIoControlRequest(IOCTL_INTERNAL_USB_SUBMIT_URB, pdx->LowerDeviceObject, NULL, 0, NULL, 0, TRUE, &ioevent, &iostatus); if (!Irp) { KdPrint((DRIVERNAME " - Unable to allocate IRP for sending URB\n")); return STATUS_INSUFFICIENT_RESOURCES; } stack = IoGetNextIrpStackLocation(Irp); stack->Parameters.Others.Argument1 = (PVOID) urb; status = IoCallDriver(pdx->LowerDeviceObject, Irp); if (status == STATUS_PENDING) { KeWaitForSingleObject(&ioevent, Executive, KernelMode, FALSE, NULL); status = iostatus.Status; } return status; } 不管是Lower或Upper的filter型式(class filter),傳回的class code頂多是9(usb hub), 不然就是NTSTATUS出現 c000009d,c0000001或USBD Status出現錯誤.....完全沒辦法抓到 Device的class code,救救我啊....... |
|