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
37 #define USBD_PORT_ENABLED 1
38 #define USBD_PORT_CONNECTED 2
40 #define IOCTL_INTERNAL_USB_CYCLE_PORT \
41 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
43 #define IOCTL_INTERNAL_USB_ENABLE_PORT \
44 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
46 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
47 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
49 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
50 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
52 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
53 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
55 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
56 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
58 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
59 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
61 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
62 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
64 #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
65 CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
67 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
68 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
70 #define IOCTL_INTERNAL_USB_RESET_PORT \
71 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
73 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
74 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
76 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
77 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
79 #define IOCTL_INTERNAL_USB_SUBMIT_URB \
80 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
83 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
84 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
86 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
87 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
89 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
90 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
92 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
93 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
95 #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
96 CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
98 #define IOCTL_USB_GET_HUB_CAPABILITIES \
99 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
101 #define IOCTL_USB_GET_ROOT_HUB_NAME \
102 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
104 #define IOCTL_GET_HCD_DRIVERKEY_NAME \
105 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
107 #define IOCTL_USB_GET_NODE_INFORMATION \
108 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
110 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
111 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
113 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
114 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
116 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
117 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
119 #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
120 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
122 #define IOCTL_USB_HCD_DISABLE_PORT \
123 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
125 #define IOCTL_USB_HCD_ENABLE_PORT \
126 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
128 #define IOCTL_USB_HCD_GET_STATS_1 \
129 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
131 #define IOCTL_USB_HCD_GET_STATS_2 \
132 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
135 typedef struct _USB_HUB_CAPABILITIES
{
136 ULONG HubIs2xCapable
: 1;
137 } USB_HUB_CAPABILITIES
, *PUSB_HUB_CAPABILITIES
;
139 typedef enum _USB_CONNECTION_STATUS
{
142 DeviceFailedEnumeration
,
143 DeviceGeneralFailure
,
144 DeviceCausedOvercurrent
,
145 DeviceNotEnoughPower
,
146 DeviceNotEnoughBandwidth
,
147 DeviceHubNestedTooDeeply
,
149 } USB_CONNECTION_STATUS
, *PUSB_CONNECTION_STATUS
;
151 #include <pshpack1.h>
153 typedef struct _USB_DESCRIPTOR_REQUEST
{
154 ULONG ConnectionIndex
;
163 } USB_DESCRIPTOR_REQUEST
, *PUSB_DESCRIPTOR_REQUEST
;
165 typedef struct _USB_HCD_DRIVERKEY_NAME
{
167 WCHAR DriverKeyName
[1];
168 } USB_HCD_DRIVERKEY_NAME
, *PUSB_HCD_DRIVERKEY_NAME
;
170 typedef struct _HCD_ISO_STAT_COUNTERS
{
172 USHORT DoubleBufferedPackets
;
173 USHORT TransfersCF_5ms
;
174 USHORT TransfersCF_2ms
;
175 USHORT TransfersCF_1ms
;
176 USHORT MaxInterruptLatency
;
177 USHORT BadStartFrame
;
179 USHORT IsoPacketNotAccesed
;
180 USHORT IsoPacketHWError
;
181 USHORT SmallestUrbPacketCount
;
182 USHORT LargestUrbPacketCount
;
184 USHORT IsoOVERRUN_Error
;
185 USHORT IsoINTERNAL_Error
;
186 USHORT IsoUNKNOWN_Error
;
187 ULONG IsoBytesTransferred
;
188 USHORT LateMissedCount
;
189 USHORT HWIsoMissedCount
;
191 } HCD_ISO_STAT_COUNTERS
, *PHCD_ISO_STAT_COUNTERS
;
193 typedef struct _HCD_STAT_COUNTERS
{
194 ULONG BytesTransferred
;
195 USHORT IsoMissedCount
;
196 USHORT DataOverrunErrorCount
;
197 USHORT CrcErrorCount
;
198 USHORT ScheduleOverrunCount
;
199 USHORT TimeoutErrorCount
;
200 USHORT InternalHcErrorCount
;
201 USHORT BufferOverrunErrorCount
;
203 USHORT StallPidCount
;
204 USHORT PortDisableCount
;
205 } HCD_STAT_COUNTERS
, *PHCD_STAT_COUNTERS
;
207 typedef struct _HCD_STAT_INFORMATION_1
{
211 LARGE_INTEGER TimeRead
;
212 HCD_STAT_COUNTERS Counters
;
213 } HCD_STAT_INFORMATION_1
, *PHCD_STAT_INFORMATION_1
;
215 typedef struct _HCD_STAT_INFORMATION_2
{
219 LARGE_INTEGER TimeRead
;
220 LONG LockedMemoryUsed
;
221 HCD_STAT_COUNTERS Counters
;
222 HCD_ISO_STAT_COUNTERS IsoCounters
;
223 } HCD_STAT_INFORMATION_2
, *PHCD_STAT_INFORMATION_2
;
225 typedef struct _USB_HUB_INFORMATION
{
226 USB_HUB_DESCRIPTOR HubDescriptor
;
227 BOOLEAN HubIsBusPowered
;
228 } USB_HUB_INFORMATION
, *PUSB_HUB_INFORMATION
;
230 typedef struct _USB_HUB_NAME
{
233 } USB_HUB_NAME
, *PUSB_HUB_NAME
;
235 typedef enum _USB_HUB_NODE
{
241 (*USB_IDLE_CALLBACK
)(
244 typedef struct _USB_IDLE_CALLBACK_INFO
{
245 USB_IDLE_CALLBACK IdleCallback
;
247 } USB_IDLE_CALLBACK_INFO
, *PUSB_IDLE_CALLBACK_INFO
;
249 typedef struct _USB_NODE_CONNECTION_ATTRIBUTES
{
250 ULONG ConnectionIndex
;
251 USB_CONNECTION_STATUS ConnectionStatus
;
252 ULONG PortAttributes
;
253 } USB_NODE_CONNECTION_ATTRIBUTES
, *PUSB_NODE_CONNECTION_ATTRIBUTES
;
255 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME
{
256 ULONG ConnectionIndex
;
258 WCHAR DriverKeyName
[1];
259 } USB_NODE_CONNECTION_DRIVERKEY_NAME
, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME
;
261 typedef struct _USB_PIPE_INFO
{
262 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor
;
263 ULONG ScheduleOffset
;
264 } USB_PIPE_INFO
, *PUSB_PIPE_INFO
;
266 typedef struct _USB_NODE_CONNECTION_INFORMATION
{
267 ULONG ConnectionIndex
;
268 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
269 UCHAR CurrentConfigurationValue
;
272 USHORT DeviceAddress
;
273 ULONG NumberOfOpenPipes
;
274 USB_CONNECTION_STATUS ConnectionStatus
;
275 USB_PIPE_INFO PipeList
[0];
276 } USB_NODE_CONNECTION_INFORMATION
, *PUSB_NODE_CONNECTION_INFORMATION
;
278 typedef struct _USB_NODE_CONNECTION_NAME
{
279 ULONG ConnectionIndex
;
282 } USB_NODE_CONNECTION_NAME
, *PUSB_NODE_CONNECTION_NAME
;
284 typedef struct _USB_MI_PARENT_INFORMATION
{
285 ULONG NumberOfInterfaces
;
286 } USB_MI_PARENT_INFORMATION
, *PUSB_MI_PARENT_INFORMATION
;
288 typedef struct _USB_NODE_INFORMATION
{
289 USB_HUB_NODE NodeType
;
291 USB_HUB_INFORMATION HubInformation
;
292 USB_MI_PARENT_INFORMATION MiParentInformation
;
294 } USB_NODE_INFORMATION
, *PUSB_NODE_INFORMATION
;
296 #define WMI_USB_DRIVER_INFORMATION 0
297 #define WMI_USB_DRIVER_NOTIFICATION 1
298 #define WMI_USB_POWER_DEVICE_ENABLE 2
300 typedef enum _USB_NOTIFICATION_TYPE
{
301 EnumerationFailure
= 0,
302 InsufficentBandwidth
,
308 AcquireControllerName
,
312 ModernDeviceInLegacyHub
313 } USB_NOTIFICATION_TYPE
;
315 typedef struct _USB_ACQUIRE_INFO
{
316 USB_NOTIFICATION_TYPE NotificationType
;
319 } USB_ACQUIRE_INFO
, *PUSB_ACQUIRE_INFO
;
321 typedef struct _USB_NOTIFICATION
{
322 USB_NOTIFICATION_TYPE NotificationType
;
323 } USB_NOTIFICATION
, *PUSB_NOTIFICATION
;
325 typedef struct _USB_BUS_NOTIFICATION
{
326 USB_NOTIFICATION_TYPE NotificationType
;
327 ULONG TotalBandwidth
;
328 ULONG ConsumedBandwidth
;
329 ULONG ControllerNameLength
;
330 } USB_BUS_NOTIFICATION
, *PUSB_BUS_NOTIFICATION
;
332 typedef struct _USB_CONNECTION_NOTIFICATION
{
333 USB_NOTIFICATION_TYPE NotificationType
;
334 ULONG ConnectionNumber
;
335 ULONG RequestedBandwidth
;
336 ULONG EnumerationFailReason
;
337 ULONG PowerRequested
;
339 } USB_CONNECTION_NOTIFICATION
, *PUSB_CONNECTION_NOTIFICATION
;
341 typedef struct _USB_ROOT_HUB_NAME
{
343 WCHAR RootHubName
[1];
344 } USB_ROOT_HUB_NAME
, *PUSB_ROOT_HUB_NAME
;
352 #endif /* __USBIOCTL_H */