From 267311dcfef3cf5fb3d08508c8271fa57abc01e0 Mon Sep 17 00:00:00 2001 From: Dmitry Fleytman Date: Thu, 24 Apr 2014 23:24:08 +0300 Subject: [PATCH] UsbDk: Introduce UsbDeviceIsHub helper Signed-off-by: Dmitry Fleytman --- UsbDk/DeviceAccess.cpp | 14 ++++++++++++++ UsbDk/DeviceAccess.h | 2 ++ 2 files changed, 16 insertions(+) diff --git a/UsbDk/DeviceAccess.cpp b/UsbDk/DeviceAccess.cpp index e841651..1fb7129 100644 --- a/UsbDk/DeviceAccess.cpp +++ b/UsbDk/DeviceAccess.cpp @@ -249,6 +249,20 @@ NTSTATUS CWdmUsbDeviceAccess::GetConfigurationDescriptor(UCHAR Index, USB_CONFIG return STATUS_SUCCESS; } +bool UsbDkWdmUsbDeviceIsHub(PDEVICE_OBJECT PDO) +{ + CWdmUsbDeviceAccess pdoAccess(PDO); + + USB_DEVICE_DESCRIPTOR DevDescr; + if (!NT_SUCCESS(pdoAccess.GetDeviceDescriptor(DevDescr))) + { + TraceEvents(TRACE_LEVEL_ERROR, TRACE_DEVACCESS, "%!FUNC! Cannot query device descriptor"); + return false; + } + + return (DevDescr.bDeviceClass == USB_DEVICE_CLASS_HUB); +} + bool UsbDkGetWdmDeviceIdentity(const PDEVICE_OBJECT PDO, CObjHolder *DeviceID, CObjHolder *InstanceID) diff --git a/UsbDk/DeviceAccess.h b/UsbDk/DeviceAccess.h index 9602e92..86b515b 100644 --- a/UsbDk/DeviceAccess.h +++ b/UsbDk/DeviceAccess.h @@ -107,6 +107,8 @@ bool UsbDkGetWdmDeviceIdentity(const PDEVICE_OBJECT PDO, CObjHolder *DeviceID, CObjHolder *InstanceID = nullptr); +bool UsbDkWdmUsbDeviceIsHub(PDEVICE_OBJECT PDO); + template void UsbDkBuildDescriptorRequest(URB &Urb, UCHAR Type, UCHAR Index, TBuffer &Buffer, ULONG BufferLength = sizeof(TBuffer)) {