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)) {