| 1 | /*
 | 
|---|
| 2 |  * usbioctl.h
 | 
|---|
| 3 |  *
 | 
|---|
| 4 |  * USB IOCTL interface.
 | 
|---|
| 5 |  *
 | 
|---|
| 6 |  * This file is part of the w32api package.
 | 
|---|
| 7 |  *
 | 
|---|
| 8 |  * Contributors:
 | 
|---|
| 9 |  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 | 
|---|
| 10 |  *
 | 
|---|
| 11 |  * THIS SOFTWARE IS NOT COPYRIGHTED
 | 
|---|
| 12 |  *
 | 
|---|
| 13 |  * This source code is offered for use in the public domain. You may
 | 
|---|
| 14 |  * use, modify or distribute it freely.
 | 
|---|
| 15 |  *
 | 
|---|
| 16 |  * This code is distributed in the hope that it will be useful but
 | 
|---|
| 17 |  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 | 
|---|
| 18 |  * DISCLAIMED. This includes but is not limited to warranties of
 | 
|---|
| 19 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
|---|
| 20 |  *
 | 
|---|
| 21 |  */
 | 
|---|
| 22 | 
 | 
|---|
| 23 | #ifndef __USBIOCTL_H
 | 
|---|
| 24 | #define __USBIOCTL_H
 | 
|---|
| 25 | 
 | 
|---|
| 26 | #if __GNUC__ >=3
 | 
|---|
| 27 | #pragma GCC system_header
 | 
|---|
| 28 | #endif
 | 
|---|
| 29 | 
 | 
|---|
| 30 | #ifdef __cplusplus
 | 
|---|
| 31 | extern "C" {
 | 
|---|
| 32 | #endif
 | 
|---|
| 33 | 
 | 
|---|
| 34 | #include "ntddk.h"
 | 
|---|
| 35 | #include "usb100.h"
 | 
|---|
| 36 | #include "usbiodef.h"
 | 
|---|
| 37 | 
 | 
|---|
| 38 | #define USBD_PORT_ENABLED                 1
 | 
|---|
| 39 | #define USBD_PORT_CONNECTED               2
 | 
|---|
| 40 | 
 | 
|---|
| 41 | #define IOCTL_INTERNAL_USB_CYCLE_PORT \
 | 
|---|
| 42 |   CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 43 | 
 | 
|---|
| 44 | #define IOCTL_INTERNAL_USB_ENABLE_PORT \
 | 
|---|
| 45 |   CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 46 | 
 | 
|---|
| 47 | #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
 | 
|---|
| 48 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 49 | 
 | 
|---|
| 50 | #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
 | 
|---|
| 51 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 52 | 
 | 
|---|
| 53 | #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
 | 
|---|
| 54 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 55 | 
 | 
|---|
| 56 | #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
 | 
|---|
| 57 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 58 | 
 | 
|---|
| 59 | #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
 | 
|---|
| 60 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 61 | 
 | 
|---|
| 62 | #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
 | 
|---|
| 63 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 64 | 
 | 
|---|
| 65 | #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
 | 
|---|
| 66 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 67 | 
 | 
|---|
| 68 | #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
 | 
|---|
| 69 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 70 | 
 | 
|---|
| 71 | #define IOCTL_INTERNAL_USB_RESET_PORT \
 | 
|---|
| 72 |   CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 73 | 
 | 
|---|
| 74 | #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
 | 
|---|
| 75 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 76 | 
 | 
|---|
| 77 | #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
 | 
|---|
| 78 |   CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 79 | 
 | 
|---|
| 80 | #define IOCTL_INTERNAL_USB_SUBMIT_URB  \
 | 
|---|
| 81 |   CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
 | 
|---|
| 82 | 
 | 
|---|
| 83 | 
 | 
|---|
| 84 | #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
 | 
|---|
| 85 |   CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 86 | 
 | 
|---|
| 87 | #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
 | 
|---|
| 88 |   CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 89 | 
 | 
|---|
| 90 | #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
 | 
|---|
| 91 |   CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 92 | 
 | 
|---|
| 93 | #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
 | 
|---|
| 94 |   CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 95 | 
 | 
|---|
| 96 | #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
 | 
|---|
| 97 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 98 | 
 | 
|---|
| 99 | #define IOCTL_USB_GET_HUB_CAPABILITIES \
 | 
|---|
| 100 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 101 | 
 | 
|---|
| 102 | #define IOCTL_USB_GET_ROOT_HUB_NAME \
 | 
|---|
| 103 |   CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 104 | 
 | 
|---|
| 105 | #define IOCTL_GET_HCD_DRIVERKEY_NAME \
 | 
|---|
| 106 |   CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 107 | 
 | 
|---|
| 108 | #define IOCTL_USB_GET_NODE_INFORMATION \
 | 
|---|
| 109 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 110 | 
 | 
|---|
| 111 | #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
 | 
|---|
| 112 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 113 | 
 | 
|---|
| 114 | #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
 | 
|---|
| 115 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 116 | 
 | 
|---|
| 117 | #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
 | 
|---|
| 118 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 119 | 
 | 
|---|
| 120 | #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
 | 
|---|
| 121 |   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 122 | 
 | 
|---|
| 123 | #define IOCTL_USB_HCD_DISABLE_PORT \
 | 
|---|
| 124 |   CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 125 | 
 | 
|---|
| 126 | #define IOCTL_USB_HCD_ENABLE_PORT \
 | 
|---|
| 127 |   CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 128 | 
 | 
|---|
| 129 | #define IOCTL_USB_HCD_GET_STATS_1 \
 | 
|---|
| 130 |   CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 131 | 
 | 
|---|
| 132 | #define IOCTL_USB_HCD_GET_STATS_2 \
 | 
|---|
| 133 |   CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
 | 
|---|
| 134 | 
 | 
|---|
| 135 | 
 | 
|---|
| 136 | typedef struct _USB_HUB_CAPABILITIES {
 | 
|---|
| 137 |   ULONG  HubIs2xCapable : 1;
 | 
|---|
| 138 | } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;
 | 
|---|
| 139 | 
 | 
|---|
| 140 | typedef enum _USB_CONNECTION_STATUS {
 | 
|---|
| 141 |         NoDeviceConnected,
 | 
|---|
| 142 |         DeviceConnected,
 | 
|---|
| 143 |         DeviceFailedEnumeration,
 | 
|---|
| 144 |         DeviceGeneralFailure,
 | 
|---|
| 145 |         DeviceCausedOvercurrent,
 | 
|---|
| 146 |         DeviceNotEnoughPower,
 | 
|---|
| 147 |         DeviceNotEnoughBandwidth,
 | 
|---|
| 148 |         DeviceHubNestedTooDeeply,
 | 
|---|
| 149 |         DeviceInLegacyHub
 | 
|---|
| 150 | } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
 | 
|---|
| 151 | 
 | 
|---|
| 152 | #include <pshpack1.h>
 | 
|---|
| 153 | 
 | 
|---|
| 154 | typedef struct _USB_DESCRIPTOR_REQUEST {
 | 
|---|
| 155 |         ULONG  ConnectionIndex;
 | 
|---|
| 156 |         struct {
 | 
|---|
| 157 |                 UCHAR  bmRequest;
 | 
|---|
| 158 |                 UCHAR  bRequest;
 | 
|---|
| 159 |                 USHORT  wValue;
 | 
|---|
| 160 |                 USHORT  wIndex;
 | 
|---|
| 161 |                 USHORT  wLength;
 | 
|---|
| 162 |         } SetupPacket;
 | 
|---|
| 163 |         UCHAR  Data[0];
 | 
|---|
| 164 | } USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST;
 | 
|---|
| 165 | 
 | 
|---|
| 166 | typedef struct _USB_HCD_DRIVERKEY_NAME {
 | 
|---|
| 167 |         ULONG  ActualLength;
 | 
|---|
| 168 |         WCHAR  DriverKeyName[1];
 | 
|---|
| 169 | } USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;
 | 
|---|
| 170 | 
 | 
|---|
| 171 | typedef struct _HCD_ISO_STAT_COUNTERS {
 | 
|---|
| 172 |         USHORT  LateUrbs;
 | 
|---|
| 173 |         USHORT  DoubleBufferedPackets;
 | 
|---|
| 174 |         USHORT  TransfersCF_5ms;
 | 
|---|
| 175 |         USHORT  TransfersCF_2ms;
 | 
|---|
| 176 |         USHORT  TransfersCF_1ms;
 | 
|---|
| 177 |         USHORT  MaxInterruptLatency;
 | 
|---|
| 178 |         USHORT  BadStartFrame;
 | 
|---|
| 179 |         USHORT  StaleUrbs;
 | 
|---|
| 180 |         USHORT  IsoPacketNotAccesed;
 | 
|---|
| 181 |         USHORT  IsoPacketHWError;
 | 
|---|
| 182 |         USHORT  SmallestUrbPacketCount;
 | 
|---|
| 183 |         USHORT  LargestUrbPacketCount;
 | 
|---|
| 184 |         USHORT  IsoCRC_Error;
 | 
|---|
| 185 |         USHORT  IsoOVERRUN_Error;
 | 
|---|
| 186 |         USHORT  IsoINTERNAL_Error;
 | 
|---|
| 187 |         USHORT  IsoUNKNOWN_Error;
 | 
|---|
| 188 |         ULONG  IsoBytesTransferred;
 | 
|---|
| 189 |         USHORT  LateMissedCount;
 | 
|---|
| 190 |         USHORT  HWIsoMissedCount;
 | 
|---|
| 191 |         ULONG  Reserved7[8];
 | 
|---|
| 192 | } HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS;
 | 
|---|
| 193 | 
 | 
|---|
| 194 | typedef struct _HCD_STAT_COUNTERS {
 | 
|---|
| 195 |         ULONG  BytesTransferred;
 | 
|---|
| 196 |         USHORT  IsoMissedCount;
 | 
|---|
| 197 |         USHORT  DataOverrunErrorCount;
 | 
|---|
| 198 |         USHORT  CrcErrorCount;
 | 
|---|
| 199 |         USHORT  ScheduleOverrunCount;
 | 
|---|
| 200 |         USHORT  TimeoutErrorCount;
 | 
|---|
| 201 |         USHORT  InternalHcErrorCount;
 | 
|---|
| 202 |         USHORT  BufferOverrunErrorCount;
 | 
|---|
| 203 |         USHORT  SWErrorCount;
 | 
|---|
| 204 |         USHORT  StallPidCount;
 | 
|---|
| 205 |         USHORT  PortDisableCount;
 | 
|---|
| 206 | } HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS;
 | 
|---|
| 207 | 
 | 
|---|
| 208 | typedef struct _HCD_STAT_INFORMATION_1 {
 | 
|---|
| 209 |         ULONG  Reserved1;
 | 
|---|
| 210 |         ULONG  Reserved2;
 | 
|---|
| 211 |         ULONG  ResetCounters;
 | 
|---|
| 212 |         LARGE_INTEGER  TimeRead;
 | 
|---|
| 213 |         HCD_STAT_COUNTERS  Counters;
 | 
|---|
| 214 | } HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1;
 | 
|---|
| 215 | 
 | 
|---|
| 216 | typedef struct _HCD_STAT_INFORMATION_2 {
 | 
|---|
| 217 |         ULONG  Reserved1;
 | 
|---|
| 218 |         ULONG  Reserved2;
 | 
|---|
| 219 |         ULONG  ResetCounters;
 | 
|---|
| 220 |         LARGE_INTEGER  TimeRead;
 | 
|---|
| 221 |         LONG  LockedMemoryUsed;
 | 
|---|
| 222 |         HCD_STAT_COUNTERS  Counters;
 | 
|---|
| 223 |         HCD_ISO_STAT_COUNTERS  IsoCounters;
 | 
|---|
| 224 | } HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2;
 | 
|---|
| 225 | 
 | 
|---|
| 226 | typedef struct _USB_HUB_INFORMATION {
 | 
|---|
| 227 |         USB_HUB_DESCRIPTOR  HubDescriptor;
 | 
|---|
| 228 |         BOOLEAN  HubIsBusPowered;
 | 
|---|
| 229 | } USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;
 | 
|---|
| 230 | 
 | 
|---|
| 231 | typedef struct _USB_HUB_NAME {
 | 
|---|
| 232 |         ULONG  ActualLength;
 | 
|---|
| 233 |         WCHAR  HubName[1];
 | 
|---|
| 234 | } USB_HUB_NAME, *PUSB_HUB_NAME;
 | 
|---|
| 235 | 
 | 
|---|
| 236 | typedef enum _USB_HUB_NODE {
 | 
|---|
| 237 |         UsbHub,
 | 
|---|
| 238 |         UsbMIParent
 | 
|---|
| 239 | } USB_HUB_NODE;
 | 
|---|
| 240 | 
 | 
|---|
| 241 | typedef VOID STDCALL
 | 
|---|
| 242 | (*USB_IDLE_CALLBACK)(
 | 
|---|
| 243 |   PVOID  Context);
 | 
|---|
| 244 | 
 | 
|---|
| 245 | typedef struct _USB_IDLE_CALLBACK_INFO {
 | 
|---|
| 246 |         USB_IDLE_CALLBACK  IdleCallback;
 | 
|---|
| 247 |         PVOID  IdleContext;
 | 
|---|
| 248 | } USB_IDLE_CALLBACK_INFO, *PUSB_IDLE_CALLBACK_INFO;
 | 
|---|
| 249 | 
 | 
|---|
| 250 | typedef struct _USB_NODE_CONNECTION_ATTRIBUTES {
 | 
|---|
| 251 |         ULONG  ConnectionIndex;
 | 
|---|
| 252 |         USB_CONNECTION_STATUS  ConnectionStatus;
 | 
|---|
| 253 |         ULONG  PortAttributes;
 | 
|---|
| 254 | } USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES;
 | 
|---|
| 255 | 
 | 
|---|
| 256 | typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME {
 | 
|---|
| 257 |         ULONG  ConnectionIndex;
 | 
|---|
| 258 |         ULONG  ActualLength;
 | 
|---|
| 259 |         WCHAR  DriverKeyName[1];
 | 
|---|
| 260 | } USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME;
 | 
|---|
| 261 | 
 | 
|---|
| 262 | typedef struct _USB_PIPE_INFO {
 | 
|---|
| 263 |         USB_ENDPOINT_DESCRIPTOR  EndpointDescriptor;
 | 
|---|
| 264 |         ULONG  ScheduleOffset;
 | 
|---|
| 265 | } USB_PIPE_INFO, *PUSB_PIPE_INFO;
 | 
|---|
| 266 | 
 | 
|---|
| 267 | typedef struct _USB_NODE_CONNECTION_INFORMATION {
 | 
|---|
| 268 |         ULONG  ConnectionIndex;
 | 
|---|
| 269 |         USB_DEVICE_DESCRIPTOR  DeviceDescriptor;
 | 
|---|
| 270 |         UCHAR  CurrentConfigurationValue;
 | 
|---|
| 271 |         BOOLEAN  LowSpeed;
 | 
|---|
| 272 |         BOOLEAN  DeviceIsHub;
 | 
|---|
| 273 |         USHORT  DeviceAddress;
 | 
|---|
| 274 |         ULONG  NumberOfOpenPipes;
 | 
|---|
| 275 |         USB_CONNECTION_STATUS  ConnectionStatus;
 | 
|---|
| 276 |         USB_PIPE_INFO  PipeList[0];
 | 
|---|
| 277 | } USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;
 | 
|---|
| 278 | 
 | 
|---|
| 279 | typedef struct _USB_NODE_CONNECTION_NAME {
 | 
|---|
| 280 |         ULONG  ConnectionIndex;
 | 
|---|
| 281 |         ULONG  ActualLength;
 | 
|---|
| 282 |         WCHAR  NodeName[1];
 | 
|---|
| 283 | } USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME;
 | 
|---|
| 284 | 
 | 
|---|
| 285 | typedef struct _USB_MI_PARENT_INFORMATION {
 | 
|---|
| 286 |   ULONG  NumberOfInterfaces;
 | 
|---|
| 287 | } USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;
 | 
|---|
| 288 | 
 | 
|---|
| 289 | typedef struct _USB_NODE_INFORMATION {
 | 
|---|
| 290 |         USB_HUB_NODE  NodeType;
 | 
|---|
| 291 |         union {
 | 
|---|
| 292 |                 USB_HUB_INFORMATION  HubInformation;
 | 
|---|
| 293 |                 USB_MI_PARENT_INFORMATION  MiParentInformation;
 | 
|---|
| 294 |         } u;
 | 
|---|
| 295 | } USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;
 | 
|---|
| 296 | 
 | 
|---|
| 297 | #define WMI_USB_DRIVER_INFORMATION        0
 | 
|---|
| 298 | #define WMI_USB_DRIVER_NOTIFICATION       1
 | 
|---|
| 299 | #define WMI_USB_POWER_DEVICE_ENABLE       2
 | 
|---|
| 300 | 
 | 
|---|
| 301 | typedef enum _USB_NOTIFICATION_TYPE {
 | 
|---|
| 302 |         EnumerationFailure = 0,
 | 
|---|
| 303 |         InsufficentBandwidth,
 | 
|---|
| 304 |         InsufficentPower,
 | 
|---|
| 305 |         OverCurrent,
 | 
|---|
| 306 |         ResetOvercurrent,
 | 
|---|
| 307 |         AcquireBusInfo,
 | 
|---|
| 308 |         AcquireHubName,
 | 
|---|
| 309 |         AcquireControllerName,
 | 
|---|
| 310 |         HubOvercurrent,
 | 
|---|
| 311 |         HubPowerChange,
 | 
|---|
| 312 |         HubNestedTooDeeply,
 | 
|---|
| 313 |         ModernDeviceInLegacyHub
 | 
|---|
| 314 | } USB_NOTIFICATION_TYPE;
 | 
|---|
| 315 | 
 | 
|---|
| 316 | typedef struct _USB_ACQUIRE_INFO {
 | 
|---|
| 317 |         USB_NOTIFICATION_TYPE  NotificationType;
 | 
|---|
| 318 |         ULONG  TotalSize;
 | 
|---|
| 319 |         WCHAR  Buffer[1];
 | 
|---|
| 320 | } USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO;
 | 
|---|
| 321 | 
 | 
|---|
| 322 | typedef struct _USB_NOTIFICATION {
 | 
|---|
| 323 |   USB_NOTIFICATION_TYPE  NotificationType;
 | 
|---|
| 324 | } USB_NOTIFICATION, *PUSB_NOTIFICATION;
 | 
|---|
| 325 | 
 | 
|---|
| 326 | typedef struct _USB_BUS_NOTIFICATION {
 | 
|---|
| 327 |         USB_NOTIFICATION_TYPE  NotificationType;
 | 
|---|
| 328 |         ULONG  TotalBandwidth;
 | 
|---|
| 329 |         ULONG  ConsumedBandwidth;
 | 
|---|
| 330 |         ULONG  ControllerNameLength;
 | 
|---|
| 331 | } USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION;
 | 
|---|
| 332 | 
 | 
|---|
| 333 | typedef struct _USB_CONNECTION_NOTIFICATION {
 | 
|---|
| 334 |         USB_NOTIFICATION_TYPE  NotificationType;
 | 
|---|
| 335 |         ULONG  ConnectionNumber;
 | 
|---|
| 336 |         ULONG  RequestedBandwidth;     
 | 
|---|
| 337 |         ULONG  EnumerationFailReason;
 | 
|---|
| 338 |         ULONG  PowerRequested;
 | 
|---|
| 339 |         ULONG  HubNameLength;
 | 
|---|
| 340 | } USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION;
 | 
|---|
| 341 | 
 | 
|---|
| 342 | typedef struct _USB_ROOT_HUB_NAME {
 | 
|---|
| 343 |         ULONG  ActualLength;
 | 
|---|
| 344 |         WCHAR  RootHubName[1];
 | 
|---|
| 345 | } USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;
 | 
|---|
| 346 | 
 | 
|---|
| 347 | #include <poppack.h>
 | 
|---|
| 348 | 
 | 
|---|
| 349 | #ifdef __cplusplus
 | 
|---|
| 350 | }
 | 
|---|
| 351 | #endif
 | 
|---|
| 352 | 
 | 
|---|
| 353 | #endif /* __USBIOCTL_H */
 | 
|---|