6 * This file is part of the w32api 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.
27 #pragma GCC system_header
38 #define USBD_PORT_ENABLED 1
39 #define USBD_PORT_CONNECTED 2
41 #define IOCTL_INTERNAL_USB_CYCLE_PORT \
42 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
44 #define IOCTL_INTERNAL_USB_ENABLE_PORT \
45 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
47 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
48 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
50 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
51 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
53 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
54 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
56 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
57 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
59 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
60 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
62 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
63 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
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)
68 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
69 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
71 #define IOCTL_INTERNAL_USB_RESET_PORT \
72 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
74 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
75 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
77 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
78 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
80 #define IOCTL_INTERNAL_USB_SUBMIT_URB \
81 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
84 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
85 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
87 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
88 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
90 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
91 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
93 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
94 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
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)
99 #define IOCTL_USB_GET_HUB_CAPABILITIES \
100 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
102 #define IOCTL_USB_GET_ROOT_HUB_NAME \
103 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
105 #define IOCTL_GET_HCD_DRIVERKEY_NAME \
106 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
108 #define IOCTL_USB_GET_NODE_INFORMATION \
109 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
111 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
112 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
114 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
115 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
117 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
118 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
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)
123 #define IOCTL_USB_HCD_DISABLE_PORT \
124 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
126 #define IOCTL_USB_HCD_ENABLE_PORT \
127 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
129 #define IOCTL_USB_HCD_GET_STATS_1 \
130 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
132 #define IOCTL_USB_HCD_GET_STATS_2 \
133 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
136 typedef struct _USB_HUB_CAPABILITIES
{
137 ULONG HubIs2xCapable
: 1;
138 } USB_HUB_CAPABILITIES
, *PUSB_HUB_CAPABILITIES
;
140 typedef enum _USB_CONNECTION_STATUS
{
143 DeviceFailedEnumeration
,
144 DeviceGeneralFailure
,
145 DeviceCausedOvercurrent
,
146 DeviceNotEnoughPower
,
147 DeviceNotEnoughBandwidth
,
148 DeviceHubNestedTooDeeply
,
150 } USB_CONNECTION_STATUS
, *PUSB_CONNECTION_STATUS
;
152 #include <pshpack1.h>
154 typedef struct _USB_DESCRIPTOR_REQUEST
{
155 ULONG ConnectionIndex
;
164 } USB_DESCRIPTOR_REQUEST
, *PUSB_DESCRIPTOR_REQUEST
;
166 typedef struct _USB_HCD_DRIVERKEY_NAME
{
168 WCHAR DriverKeyName
[1];
169 } USB_HCD_DRIVERKEY_NAME
, *PUSB_HCD_DRIVERKEY_NAME
;
171 typedef struct _HCD_ISO_STAT_COUNTERS
{
173 USHORT DoubleBufferedPackets
;
174 USHORT TransfersCF_5ms
;
175 USHORT TransfersCF_2ms
;
176 USHORT TransfersCF_1ms
;
177 USHORT MaxInterruptLatency
;
178 USHORT BadStartFrame
;
180 USHORT IsoPacketNotAccesed
;
181 USHORT IsoPacketHWError
;
182 USHORT SmallestUrbPacketCount
;
183 USHORT LargestUrbPacketCount
;
185 USHORT IsoOVERRUN_Error
;
186 USHORT IsoINTERNAL_Error
;
187 USHORT IsoUNKNOWN_Error
;
188 ULONG IsoBytesTransferred
;
189 USHORT LateMissedCount
;
190 USHORT HWIsoMissedCount
;
192 } HCD_ISO_STAT_COUNTERS
, *PHCD_ISO_STAT_COUNTERS
;
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
;
204 USHORT StallPidCount
;
205 USHORT PortDisableCount
;
206 } HCD_STAT_COUNTERS
, *PHCD_STAT_COUNTERS
;
208 typedef struct _HCD_STAT_INFORMATION_1
{
212 LARGE_INTEGER TimeRead
;
213 HCD_STAT_COUNTERS Counters
;
214 } HCD_STAT_INFORMATION_1
, *PHCD_STAT_INFORMATION_1
;
216 typedef struct _HCD_STAT_INFORMATION_2
{
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
;
226 typedef struct _USB_HUB_INFORMATION
{
227 USB_HUB_DESCRIPTOR HubDescriptor
;
228 BOOLEAN HubIsBusPowered
;
229 } USB_HUB_INFORMATION
, *PUSB_HUB_INFORMATION
;
231 typedef struct _USB_HUB_NAME
{
234 } USB_HUB_NAME
, *PUSB_HUB_NAME
;
236 typedef enum _USB_HUB_NODE
{
242 (*USB_IDLE_CALLBACK
)(
245 typedef struct _USB_IDLE_CALLBACK_INFO
{
246 USB_IDLE_CALLBACK IdleCallback
;
248 } USB_IDLE_CALLBACK_INFO
, *PUSB_IDLE_CALLBACK_INFO
;
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
;
256 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME
{
257 ULONG ConnectionIndex
;
259 WCHAR DriverKeyName
[1];
260 } USB_NODE_CONNECTION_DRIVERKEY_NAME
, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME
;
262 typedef struct _USB_PIPE_INFO
{
263 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor
;
264 ULONG ScheduleOffset
;
265 } USB_PIPE_INFO
, *PUSB_PIPE_INFO
;
267 typedef struct _USB_NODE_CONNECTION_INFORMATION
{
268 ULONG ConnectionIndex
;
269 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
270 UCHAR CurrentConfigurationValue
;
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
;
279 typedef struct _USB_NODE_CONNECTION_NAME
{
280 ULONG ConnectionIndex
;
283 } USB_NODE_CONNECTION_NAME
, *PUSB_NODE_CONNECTION_NAME
;
285 typedef struct _USB_MI_PARENT_INFORMATION
{
286 ULONG NumberOfInterfaces
;
287 } USB_MI_PARENT_INFORMATION
, *PUSB_MI_PARENT_INFORMATION
;
289 typedef struct _USB_NODE_INFORMATION
{
290 USB_HUB_NODE NodeType
;
292 USB_HUB_INFORMATION HubInformation
;
293 USB_MI_PARENT_INFORMATION MiParentInformation
;
295 } USB_NODE_INFORMATION
, *PUSB_NODE_INFORMATION
;
297 #define WMI_USB_DRIVER_INFORMATION 0
298 #define WMI_USB_DRIVER_NOTIFICATION 1
299 #define WMI_USB_POWER_DEVICE_ENABLE 2
301 typedef enum _USB_NOTIFICATION_TYPE
{
302 EnumerationFailure
= 0,
303 InsufficentBandwidth
,
309 AcquireControllerName
,
313 ModernDeviceInLegacyHub
314 } USB_NOTIFICATION_TYPE
;
316 typedef struct _USB_ACQUIRE_INFO
{
317 USB_NOTIFICATION_TYPE NotificationType
;
320 } USB_ACQUIRE_INFO
, *PUSB_ACQUIRE_INFO
;
322 typedef struct _USB_NOTIFICATION
{
323 USB_NOTIFICATION_TYPE NotificationType
;
324 } USB_NOTIFICATION
, *PUSB_NOTIFICATION
;
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
;
333 typedef struct _USB_CONNECTION_NOTIFICATION
{
334 USB_NOTIFICATION_TYPE NotificationType
;
335 ULONG ConnectionNumber
;
336 ULONG RequestedBandwidth
;
337 ULONG EnumerationFailReason
;
338 ULONG PowerRequested
;
340 } USB_CONNECTION_NOTIFICATION
, *PUSB_CONNECTION_NOTIFICATION
;
342 typedef struct _USB_ROOT_HUB_NAME
{
344 WCHAR RootHubName
[1];
345 } USB_ROOT_HUB_NAME
, *PUSB_ROOT_HUB_NAME
;
353 #endif /* __USBIOCTL_H */