From 400e6e1c9f90bfecc775feb5e897ce27f294ea9f Mon Sep 17 00:00:00 2001 From: Dmitry Fleytman Date: Sun, 20 Apr 2014 21:18:37 +0300 Subject: [PATCH] UsbDk: Introduce send URB helper Function UsbDkSendUrbSynchronously() introduced Signed-off-by: Dmitry Fleytman --- UsbDk/DeviceAccess.cpp | 44 +++++++++++++++++++++++------------------- UsbDk/DeviceAccess.h | 2 ++ 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/UsbDk/DeviceAccess.cpp b/UsbDk/DeviceAccess.cpp index dc60274..8eb4600 100644 --- a/UsbDk/DeviceAccess.cpp +++ b/UsbDk/DeviceAccess.cpp @@ -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; +} diff --git a/UsbDk/DeviceAccess.h b/UsbDk/DeviceAccess.h index 3b602a8..576f167 100644 --- a/UsbDk/DeviceAccess.h +++ b/UsbDk/DeviceAccess.h @@ -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);