6 * This file is part of the ReactOS PSDK package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
32 #define IOCTL_INTERNAL_USB_SUBMIT_URB \
33 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
35 #define IOCTL_INTERNAL_USB_RESET_PORT \
36 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
38 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
39 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
41 #define USBD_PORT_ENABLED 1
42 #define USBD_PORT_CONNECTED 2
44 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
45 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
47 #define IOCTL_INTERNAL_USB_ENABLE_PORT \
48 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
50 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
51 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
53 #define IOCTL_INTERNAL_USB_CYCLE_PORT \
54 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
56 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
57 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
59 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
60 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
62 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
63 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
65 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
66 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
68 #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
69 CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
71 #if (_WIN32_WINNT >= 0x0501)
73 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
74 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
76 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
77 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
81 #if (_WIN32_WINNT >= 0x0600)
83 #define IOCTL_INTERNAL_USB_NOTIFY_IDLE_READY \
84 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION_EX, METHOD_NEITHER, FILE_ANY_ACCESS)
86 #define IOCTL_INTERNAL_USB_REQ_GLOBAL_SUSPEND \
87 CTL_CODE(FILE_DEVICE_USB, USB_REQ_GLOBAL_SUSPEND, METHOD_NEITHER, FILE_ANY_ACCESS)
89 #define IOCTL_INTERNAL_USB_REQ_GLOBAL_RESUME \
90 CTL_CODE(FILE_DEVICE_USB, USB_REQ_GLOBAL_RESUME, METHOD_NEITHER, FILE_ANY_ACCESS)
93 typedef struct _USB_START_FAILDATA
{
96 USBD_STATUS UsbdStatus
;
99 } USB_START_FAILDATA
, *PUSB_START_FAILDATA
;
102 #define IOCTL_INTERNAL_USB_RECORD_FAILURE \
103 CTL_CODE(FILE_DEVICE_USB, USB_RECORD_FAILURE, METHOD_NEITHER, FILE_ANY_ACCESS)
105 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE_EX \
106 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE_EX, METHOD_NEITHER, FILE_ANY_ACCESS)
108 #define IOCTL_INTERNAL_USB_GET_TT_DEVICE_HANDLE \
109 CTL_CODE(FILE_DEVICE_USB, USB_GET_TT_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
111 typedef struct _USB_TOPOLOGY_ADDRESS
{
113 ULONG PciDeviceNumber
;
114 ULONG PciFunctionNumber
;
116 USHORT RootHubPortNumber
;
117 USHORT HubPortNumber
[5];
119 } USB_TOPOLOGY_ADDRESS
, *PUSB_TOPOLOGY_ADDRESS
;
121 #define IOCTL_INTERNAL_USB_GET_TOPOLOGY_ADDRESS \
122 CTL_CODE(FILE_DEVICE_USB, USB_GET_TOPOLOGY_ADDRESS, METHOD_NEITHER, FILE_ANY_ACCESS)
124 #define IOCTL_INTERNAL_USB_GET_DEVICE_CONFIG_INFO \
125 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CONFIG_INFO, METHOD_NEITHER, FILE_ANY_ACCESS)
129 #ifndef USB_KERNEL_IOCTL
131 #define IOCTL_USB_HCD_GET_STATS_1 \
132 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
134 #define IOCTL_USB_HCD_GET_STATS_2 \
135 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
137 #define IOCTL_USB_HCD_DISABLE_PORT \
138 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
140 #define IOCTL_USB_HCD_ENABLE_PORT \
141 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
143 #define IOCTL_USB_HCD_DISABLE_PORT \
144 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
146 #define IOCTL_USB_HCD_ENABLE_PORT \
147 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
149 #ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF
150 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
151 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
154 #ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON
155 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
156 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
159 #ifndef IOCTL_USB_GET_ROOT_HUB_NAME
160 #define IOCTL_USB_GET_ROOT_HUB_NAME \
161 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
164 #ifndef IOCTL_GET_HCD_DRIVERKEY_NAME
165 #define IOCTL_GET_HCD_DRIVERKEY_NAME \
166 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
169 #define IOCTL_USB_GET_NODE_INFORMATION \
170 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
172 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
173 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
175 #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
176 CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
178 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
179 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
181 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
182 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
184 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
185 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
187 #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
188 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
190 #if (_WIN32_WINNT >= 0x0501)
192 #define IOCTL_USB_GET_HUB_CAPABILITIES \
193 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
195 #define IOCTL_USB_HUB_CYCLE_PORT \
196 CTL_CODE(FILE_DEVICE_USB, USB_HUB_CYCLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
198 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
199 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
201 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \
202 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
206 #if (_WIN32_WINNT >= 0x0600)
208 #define IOCTL_USB_RESET_HUB \
209 CTL_CODE(FILE_DEVICE_USB, USB_RESET_HUB, METHOD_BUFFERED, FILE_ANY_ACCESS)
211 #define IOCTL_USB_GET_HUB_CAPABILITIES_EX \
212 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
216 #include <pshpack1.h>
218 typedef enum _USB_HUB_NODE
{
223 typedef struct _USB_HUB_INFORMATION
{
224 USB_HUB_DESCRIPTOR HubDescriptor
;
225 BOOLEAN HubIsBusPowered
;
226 } USB_HUB_INFORMATION
, *PUSB_HUB_INFORMATION
;
228 typedef struct _USB_MI_PARENT_INFORMATION
{
229 ULONG NumberOfInterfaces
;
230 } USB_MI_PARENT_INFORMATION
, *PUSB_MI_PARENT_INFORMATION
;
232 typedef struct _USB_NODE_INFORMATION
{
233 USB_HUB_NODE NodeType
;
235 USB_HUB_INFORMATION HubInformation
;
236 USB_MI_PARENT_INFORMATION MiParentInformation
;
238 } USB_NODE_INFORMATION
, *PUSB_NODE_INFORMATION
;
240 typedef struct _USB_PIPE_INFO
{
241 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor
;
242 ULONG ScheduleOffset
;
243 } USB_PIPE_INFO
, *PUSB_PIPE_INFO
;
245 #if (_WIN32_WINNT >= 0x0600)
247 typedef enum _USB_CONNECTION_STATUS
{
250 DeviceFailedEnumeration
,
251 DeviceGeneralFailure
,
252 DeviceCausedOvercurrent
,
253 DeviceNotEnoughPower
,
254 DeviceNotEnoughBandwidth
,
255 DeviceHubNestedTooDeeply
,
259 } USB_CONNECTION_STATUS
, *PUSB_CONNECTION_STATUS
;
261 #elif (_WIN32_WINNT >= 0x0501)
263 typedef enum _USB_CONNECTION_STATUS
{
266 DeviceFailedEnumeration
,
267 DeviceGeneralFailure
,
268 DeviceCausedOvercurrent
,
269 DeviceNotEnoughPower
,
270 DeviceNotEnoughBandwidth
,
271 DeviceHubNestedTooDeeply
,
273 } USB_CONNECTION_STATUS
, *PUSB_CONNECTION_STATUS
;
277 typedef enum _USB_CONNECTION_STATUS
{
280 DeviceFailedEnumeration
,
281 DeviceGeneralFailure
,
282 DeviceCausedOvercurrent
,
283 DeviceNotEnoughPower
,
284 DeviceNotEnoughBandwidth
285 } USB_CONNECTION_STATUS
, *PUSB_CONNECTION_STATUS
;
289 typedef struct _USB_NODE_CONNECTION_INFORMATION
{
290 ULONG ConnectionIndex
;
291 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
292 UCHAR CurrentConfigurationValue
;
295 USHORT DeviceAddress
;
296 ULONG NumberOfOpenPipes
;
297 USB_CONNECTION_STATUS ConnectionStatus
;
298 USB_PIPE_INFO PipeList
[0];
299 } USB_NODE_CONNECTION_INFORMATION
, *PUSB_NODE_CONNECTION_INFORMATION
;
301 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME
{
302 ULONG ConnectionIndex
;
304 WCHAR DriverKeyName
[1];
305 } USB_NODE_CONNECTION_DRIVERKEY_NAME
, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME
;
307 typedef struct _USB_NODE_CONNECTION_NAME
{
308 ULONG ConnectionIndex
;
311 } USB_NODE_CONNECTION_NAME
, *PUSB_NODE_CONNECTION_NAME
;
313 typedef struct _USB_HUB_NAME
{
316 } USB_HUB_NAME
, *PUSB_HUB_NAME
;
318 typedef struct _USB_ROOT_HUB_NAME
{
320 WCHAR RootHubName
[1];
321 } USB_ROOT_HUB_NAME
, *PUSB_ROOT_HUB_NAME
;
323 typedef struct _USB_HCD_DRIVERKEY_NAME
{
325 WCHAR DriverKeyName
[1];
326 } USB_HCD_DRIVERKEY_NAME
, *PUSB_HCD_DRIVERKEY_NAME
;
328 typedef struct _USB_DESCRIPTOR_REQUEST
{
329 ULONG ConnectionIndex
;
338 } USB_DESCRIPTOR_REQUEST
, *PUSB_DESCRIPTOR_REQUEST
;
340 #if (_WIN32_WINNT >= 0x0501)
342 typedef struct _USB_HUB_CAPABILITIES
{
343 ULONG HubIs2xCapable
:1;
344 } USB_HUB_CAPABILITIES
, *PUSB_HUB_CAPABILITIES
;
346 typedef struct _USB_NODE_CONNECTION_ATTRIBUTES
{
347 ULONG ConnectionIndex
;
348 USB_CONNECTION_STATUS ConnectionStatus
;
349 ULONG PortAttributes
;
350 } USB_NODE_CONNECTION_ATTRIBUTES
, *PUSB_NODE_CONNECTION_ATTRIBUTES
;
352 typedef struct _USB_NODE_CONNECTION_INFORMATION_EX
{
353 ULONG ConnectionIndex
;
354 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
355 UCHAR CurrentConfigurationValue
;
358 USHORT DeviceAddress
;
359 ULONG NumberOfOpenPipes
;
360 USB_CONNECTION_STATUS ConnectionStatus
;
361 USB_PIPE_INFO PipeList
[0];
362 } USB_NODE_CONNECTION_INFORMATION_EX
, *PUSB_NODE_CONNECTION_INFORMATION_EX
;
364 C_ASSERT(sizeof(USB_NODE_CONNECTION_INFORMATION_EX
) == sizeof(USB_NODE_CONNECTION_INFORMATION
));
368 #if (_WIN32_WINNT >= 0x0600)
370 typedef union _USB_HUB_CAP_FLAGS
{
373 ULONG HubIsHighSpeedCapable
:1;
374 ULONG HubIsHighSpeed
:1;
375 ULONG HubIsMultiTtCapable
:1;
376 ULONG HubIsMultiTt
:1;
378 ULONG HubIsArmedWakeOnConnect
:1;
379 ULONG HubIsBusPowered
:1;
380 ULONG ReservedMBZ
:25;
382 } USB_HUB_CAP_FLAGS
, *PUSB_HUB_CAP_FLAGS
;
384 C_ASSERT(sizeof(USB_HUB_CAP_FLAGS
) == sizeof(ULONG
));
386 typedef struct _USB_HUB_CAPABILITIES_EX
{
387 USB_HUB_CAP_FLAGS CapabilityFlags
;
388 } USB_HUB_CAPABILITIES_EX
, *PUSB_HUB_CAPABILITIES_EX
;
390 typedef struct _USB_CYCLE_PORT_PARAMS
{
391 ULONG ConnectionIndex
;
392 ULONG StatusReturned
;
393 } USB_CYCLE_PORT_PARAMS
, *PUSB_CYCLE_PORT_PARAMS
;
395 typedef struct _USB_ID_STRING
{
400 } USB_ID_STRING
, *PUSB_ID_STRING
;
402 typedef struct _USB_HUB_DEVICE_UXD_SETTINGS
{
406 ULONG DeleteOnShutdown
;
407 ULONG DeleteOnReload
;
408 ULONG DeleteOnDisconnect
;
410 } USB_HUB_DEVICE_UXD_SETTINGS
, *PUSB_HUB_DEVICE_UXD_SETTINGS
;
412 typedef struct _HUB_DEVICE_CONFIG_INFO_V1
{
415 USB_HUB_CAP_FLAGS HubFlags
;
416 USB_ID_STRING HardwareIds
;
417 USB_ID_STRING CompatibleIds
;
418 USB_ID_STRING DeviceDescription
;
420 USB_HUB_DEVICE_UXD_SETTINGS UxdSettings
;
421 } HUB_DEVICE_CONFIG_INFO
, *PHUB_DEVICE_CONFIG_INFO
;
425 typedef struct _HCD_ISO_STAT_COUNTERS
{
427 USHORT DoubleBufferedPackets
;
428 USHORT TransfersCF_5ms
;
429 USHORT TransfersCF_2ms
;
430 USHORT TransfersCF_1ms
;
431 USHORT MaxInterruptLatency
;
432 USHORT BadStartFrame
;
434 USHORT IsoPacketNotAccesed
;
435 USHORT IsoPacketHWError
;
436 USHORT SmallestUrbPacketCount
;
437 USHORT LargestUrbPacketCount
;
439 USHORT IsoOVERRUN_Error
;
440 USHORT IsoINTERNAL_Error
;
441 USHORT IsoUNKNOWN_Error
;
442 ULONG IsoBytesTransferred
;
443 USHORT LateMissedCount
;
444 USHORT HWIsoMissedCount
;
446 } HCD_ISO_STAT_COUNTERS
, *PHCD_ISO_STAT_COUNTERS
;
448 typedef struct _HCD_STAT_COUNTERS
{
449 ULONG BytesTransferred
;
450 USHORT IsoMissedCount
;
451 USHORT DataOverrunErrorCount
;
452 USHORT CrcErrorCount
;
453 USHORT ScheduleOverrunCount
;
454 USHORT TimeoutErrorCount
;
455 USHORT InternalHcErrorCount
;
456 USHORT BufferOverrunErrorCount
;
458 USHORT StallPidCount
;
459 USHORT PortDisableCount
;
460 } HCD_STAT_COUNTERS
, *PHCD_STAT_COUNTERS
;
462 typedef struct _HCD_STAT_INFORMATION_1
{
466 LARGE_INTEGER TimeRead
;
467 HCD_STAT_COUNTERS Counters
;
468 } HCD_STAT_INFORMATION_1
, *PHCD_STAT_INFORMATION_1
;
470 typedef struct _HCD_STAT_INFORMATION_2
{
474 LARGE_INTEGER TimeRead
;
475 LONG LockedMemoryUsed
;
476 HCD_STAT_COUNTERS Counters
;
477 HCD_ISO_STAT_COUNTERS IsoCounters
;
478 } HCD_STAT_INFORMATION_2
, *PHCD_STAT_INFORMATION_2
;
480 #define WMI_USB_DRIVER_INFORMATION 0
481 #define WMI_USB_DRIVER_NOTIFICATION 1
482 #define WMI_USB_POWER_DEVICE_ENABLE 2
483 #define WMI_USB_HUB_NODE_INFORMATION 4
485 #define WMI_USB_PERFORMANCE_INFORMATION 1
486 #define WMI_USB_DEVICE_NODE_INFORMATION 2
488 #if (_WIN32_WINNT >= 0x0501)
490 typedef enum _USB_NOTIFICATION_TYPE
{
491 EnumerationFailure
= 0,
492 InsufficentBandwidth
,
498 AcquireControllerName
,
502 ModernDeviceInLegacyHub
503 } USB_NOTIFICATION_TYPE
;
507 typedef enum _USB_NOTIFICATION_TYPE
{
508 EnumerationFailure
= 0,
509 InsufficentBandwidth
,
515 AcquireControllerName
,
518 } USB_NOTIFICATION_TYPE
;
522 typedef struct _USB_NOTIFICATION
{
523 USB_NOTIFICATION_TYPE NotificationType
;
524 } USB_NOTIFICATION
, *PUSB_NOTIFICATION
;
526 typedef struct _USB_CONNECTION_NOTIFICATION
{
527 USB_NOTIFICATION_TYPE NotificationType
;
528 ULONG ConnectionNumber
;
529 ULONG RequestedBandwidth
;
530 ULONG EnumerationFailReason
;
531 ULONG PowerRequested
;
533 } USB_CONNECTION_NOTIFICATION
, *PUSB_CONNECTION_NOTIFICATION
;
535 typedef struct _USB_BUS_NOTIFICATION
{
536 USB_NOTIFICATION_TYPE NotificationType
;
537 ULONG TotalBandwidth
;
538 ULONG ConsumedBandwidth
;
539 ULONG ControllerNameLength
;
540 } USB_BUS_NOTIFICATION
, *PUSB_BUS_NOTIFICATION
;
542 typedef struct _USB_ACQUIRE_INFO
{
543 USB_NOTIFICATION_TYPE NotificationType
;
546 } USB_ACQUIRE_INFO
, *PUSB_ACQUIRE_INFO
;
548 #if (_WIN32_WINNT >= 0x0600)
550 #define USB_NODE_INFO_SIG 'USBN'
552 typedef enum _USB_WMI_DEVICE_NODE_TYPE
{
557 } USB_WMI_DEVICE_NODE_TYPE
, *PUSB_WMI_DEVICE_NODE_TYPE
;
559 typedef struct _USB_DEVICE_STATE
{
560 ULONG DeviceConnected
:1;
561 ULONG DeviceStarted
:1;
562 } USB_DEVICE_STATE
, *PUSB_DEVICE_STATE
;
564 typedef struct _USB_HUB_PORT_INFORMATION
{
565 USB_DEVICE_STATE DeviceState
;
567 USHORT DeviceAddress
;
568 ULONG ConnectionIndex
;
569 USB_CONNECTION_STATUS ConnectionStatus
;
570 } USB_HUB_PORT_INFORMATION
, *PUSB_HUB_PORT_INFORMATION
;
572 typedef struct _USB_HUB_DEVICE_INFO
{
573 USB_HUB_DESCRIPTOR HubDescriptor
;
575 USHORT DeviceAddress
;
576 BOOLEAN HubIsSelfPowered
;
577 BOOLEAN HubIsRootHub
;
578 USB_HUB_CAPABILITIES HubCapabilities
;
579 ULONG NumberOfHubPorts
;
580 USB_HUB_PORT_INFORMATION PortInfo
[1];
581 } USB_HUB_DEVICE_INFO
, *PUSB_HUB_DEVICE_INFO
;
583 typedef struct _USB_COMPOSITE_FUNCTION_INFO
{
584 UCHAR FunctionNumber
;
585 UCHAR BaseInterfaceNumber
;
586 UCHAR NumberOfInterfaces
;
587 BOOLEAN FunctionIsIdle
;
588 } USB_COMPOSITE_FUNCTION_INFO
, *PUSB_COMPOSITE_FUNCTION_INFO
;
590 typedef struct _USB_COMPOSITE_DEVICE_INFO
{
591 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
592 USB_CONFIGURATION_DESCRIPTOR CurrentConfigDescriptor
;
593 UCHAR CurrentConfigurationValue
;
594 UCHAR NumberOfFunctions
;
595 USB_COMPOSITE_FUNCTION_INFO FunctionInfo
[1];
596 } USB_COMPOSITE_DEVICE_INFO
, *PUSB_COMPOSITE_DEVICE_INFO
;
598 typedef struct _USB_CONTROLLER_DEVICE_INFO
{
602 ULONG NumberOfRootPorts
;
603 ULONG HcFeatureFlags
;
604 } USB_CONTROLLER_DEVICE_INFO
, *PUSB_CONTROLLER_DEVICE_INFO
;
606 typedef struct _USB_DEVICE_INFO
{
607 USB_DEVICE_STATE DeviceState
;
609 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
610 UCHAR CurrentConfigurationValue
;
611 USB_DEVICE_SPEED Speed
;
612 USHORT DeviceAddress
;
613 ULONG ConnectionIndex
;
614 USB_CONNECTION_STATUS ConnectionStatus
;
615 WCHAR PnpHardwareId
[128];
616 WCHAR PnpCompatibleId
[128];
617 WCHAR SerialNumberId
[128];
618 WCHAR PnpDeviceDescription
[128];
619 ULONG NumberOfOpenPipes
;
620 USB_PIPE_INFO PipeList
[1];
621 } USB_DEVICE_INFO
, *PUSB_DEVICE_INFO
;
623 typedef struct _USB_DEVICE_NODE_INFO
{
626 WCHAR DeviceDescription
[40];
627 USB_WMI_DEVICE_NODE_TYPE NodeType
;
628 USB_TOPOLOGY_ADDRESS BusAddress
;
630 USB_DEVICE_INFO UsbDeviceInfo
;
631 USB_HUB_DEVICE_INFO HubDeviceInfo
;
632 USB_COMPOSITE_DEVICE_INFO CompositeDeviceInfo
;
633 USB_CONTROLLER_DEVICE_INFO ControllerDeviceInfo
;
634 UCHAR DeviceInformation
[4];
636 } USB_DEVICE_NODE_INFO
, *PUSB_DEVICE_NODE_INFO
;
638 typedef struct _USB_DEVICE_PERFORMANCE_INFO
{
640 ULONG ControlDataBytes
;
642 ULONG InterruptBytes
;
644 ULONG ControlUrbCount
;
646 ULONG InterruptUrbCount
;
647 ULONG AllocedInterrupt
[6];
649 ULONG Total32secBandwidth
;
650 ULONG TotalTtBandwidth
;
651 WCHAR DeviceDescription
[60];
652 USB_DEVICE_SPEED DeviceSpeed
;
653 ULONG TotalIsoLatency
;
654 ULONG DroppedIsoPackets
;
655 ULONG TransferErrors
;
656 ULONG PciInterruptCount
;
658 ULONG HcAsyncIdleState
;
659 ULONG HcAsyncCacheFlushCount
;
660 ULONG HcPeriodicIdleState
;
661 ULONG HcPeriodicCacheFlushCount
;
662 } USB_DEVICE_PERFORMANCE_INFO
, *PUSB_DEVICE_PERFORMANCE_INFO
;
668 #endif /* USB_KERNEL_IOCTL */