描述:
在adddevice成功后,进入startdevice中的如下语句时出错
UsbBuildGetDescriptorRequest (urb,
(USHORT) sizeofstruct_URB_CONTROL_DESCRIPTOR_REQUEST), USB_DEVICE_DESCRIPTOR_TYPE,
0,
0,
deviceDescriptor,
NULL,
siz,
NULL);
ntStatus = UsbTest_CallUSBD(DeviceObject, urb);
/********错误就在每次进入这个CallUSBD后softice出现page fault的错误信息,这是怎么回事??***/
CallUSBD源码如下:
KEVENT event;
KeInitializeEvent(&event, NotificationEvent, FALSE);
IO_STATUS_BLOCK iostatus;
PIRP Irp = IoBuildDeviceIoControlRequest(IOCTL_INTERNAL_USB_SUBMIT_URB,
pdx->LowerDeviceObject, NULL, 0, NULL, 0, TRUE, &event, &iostatus);
if (!Irp){
KdPrint((DRIVERNAME " - Unable to allocate IRP for sending URBn"));
return STATUS_INSUFFICIENT_RESOURCES;
}
PIO_STACK_LOCATION stack = IoGetNextIrpStackLocation(Irp);
stack->Parameters.Others.Argument1 = (PVOID) urb;
KdPrint(("Ready to send Urb to lower devicen"));//此处可以进入
NTSTATUS status = IoCallDriver(pdx->LowerDeviceObject, Irp);
/*****错误就在此调用*******/
if(ntStatus == STATUS_SUCCESS)
KdPrint(("Succeed in calling next driver in UsbTest_CallUSBD()n"));
else
KdPrint(("Failed in calling next driver in UsbTest_CallUSBD()n"));//调用USBD后失败并输出此错误信息
if (status == STATUS_PENDING){
KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);
status = iostatus.Status;
}
return status;