UsbDk: Introduce send URB helper

Function UsbDkSendUrbSynchronously() introduced

Signed-off-by: Dmitry Fleytman <dfleytma@redhat.com>
This commit is contained in:
Dmitry Fleytman 2014-04-20 21:18:37 +03:00
parent eefbd06435
commit 400e6e1c9f
2 changed files with 26 additions and 20 deletions

View file

@ -216,26 +216,7 @@ NTSTATUS CWdmUsbDeviceAccess::GetDeviceDescriptor(USB_DEVICE_DESCRIPTOR &Descrip
{
URB Urb;
UsbDkBuildDescriptorRequest(Urb, USB_DEVICE_DESCRIPTOR_TYPE, 0, Descriptor);
CIoControlIrp Irp;
auto status = Irp.Create(m_DevObj, IOCTL_INTERNAL_USB_SUBMIT_URB);
if (!NT_SUCCESS(status))
{
TraceEvents(TRACE_LEVEL_ERROR, TRACE_DEVACCESS, "%!FUNC! Error %!STATUS! during IOCTL IRP creation", status);
return status;
}
Irp.Configure([&Urb] (PIO_STACK_LOCATION s)
{ s->Parameters.Others.Argument1 = &Urb; });
status = Irp.SendSynchronously();
if (!NT_SUCCESS(status))
{
TraceEvents(TRACE_LEVEL_ERROR, TRACE_DEVACCESS, "%!FUNC! Send IOCTL IRP Error %!STATUS!", status);
}
return status;
return UsbDkSendUrbSynchronously(m_DevObj, Urb);
}
bool UsbDkGetWdmDeviceIdentity(const PDEVICE_OBJECT PDO,
@ -266,3 +247,26 @@ bool UsbDkGetWdmDeviceIdentity(const PDEVICE_OBJECT PDO,
return true;
}
NTSTATUS UsbDkSendUrbSynchronously(PDEVICE_OBJECT Target, URB &Urb)
{
CIoControlIrp Irp;
auto status = Irp.Create(Target, IOCTL_INTERNAL_USB_SUBMIT_URB);
if (!NT_SUCCESS(status))
{
TraceEvents(TRACE_LEVEL_ERROR, TRACE_DEVACCESS, "%!FUNC! Error %!STATUS! during IOCTL IRP creation", status);
return status;
}
Irp.Configure([&Urb] (PIO_STACK_LOCATION s)
{ s->Parameters.Others.Argument1 = &Urb; });
status = Irp.SendSynchronously();
if (!NT_SUCCESS(status))
{
TraceEvents(TRACE_LEVEL_ERROR, TRACE_DEVACCESS, "%!FUNC! Send URB IRP Error %!STATUS!", status);
}
return status;
}

View file

@ -114,3 +114,5 @@ void UsbDkBuildDescriptorRequest(URB &Urb, UCHAR Type, UCHAR Index, TBuffer &Buf
&Buffer, nullptr, BufferLength,
nullptr);
}
NTSTATUS UsbDkSendUrbSynchronously(PDEVICE_OBJECT Target, URB &Urb);