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.
33 #define USBD_PORT_ENABLED 1
34 #define USBD_PORT_CONNECTED 2
36 #define IOCTL_INTERNAL_USB_CYCLE_PORT \
37 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
39 #define IOCTL_INTERNAL_USB_ENABLE_PORT \
40 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
42 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
43 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
45 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
46 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
48 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
49 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
51 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
52 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
54 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
55 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
57 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
58 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
60 #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
61 CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
63 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
64 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
66 #define IOCTL_INTERNAL_USB_RESET_PORT \
67 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
69 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
70 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
72 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
73 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
75 #define IOCTL_INTERNAL_USB_SUBMIT_URB \
76 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
79 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
80 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
82 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
83 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
85 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
86 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
88 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
89 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
91 #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
92 CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
94 #define IOCTL_USB_GET_HUB_CAPABILITIES \
95 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
97 #define IOCTL_USB_GET_ROOT_HUB_NAME \
98 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
100 #define IOCTL_GET_HCD_DRIVERKEY_NAME \
101 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
103 #define IOCTL_USB_GET_NODE_INFORMATION \
104 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
106 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
107 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
109 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
110 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
112 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
113 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
115 #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
116 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
118 #define IOCTL_USB_HCD_DISABLE_PORT \
119 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
121 #define IOCTL_USB_HCD_ENABLE_PORT \
122 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
124 #define IOCTL_USB_HCD_GET_STATS_1 \
125 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
127 #define IOCTL_USB_HCD_GET_STATS_2 \
128 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
131 typedef struct _USB_HUB_CAPABILITIES
{
132 ULONG HubIs2xCapable
: 1;
133 } USB_HUB_CAPABILITIES
, *PUSB_HUB_CAPABILITIES
;
135 typedef enum _USB_CONNECTION_STATUS
{
138 DeviceFailedEnumeration
,
139 DeviceGeneralFailure
,
140 DeviceCausedOvercurrent
,
141 DeviceNotEnoughPower
,
142 DeviceNotEnoughBandwidth
,
143 DeviceHubNestedTooDeeply
,
145 } USB_CONNECTION_STATUS
, *PUSB_CONNECTION_STATUS
;
147 #include <pshpack1.h>
149 typedef struct _USB_DESCRIPTOR_REQUEST
{
150 ULONG ConnectionIndex
;
159 } USB_DESCRIPTOR_REQUEST
, *PUSB_DESCRIPTOR_REQUEST
;
161 typedef struct _USB_HCD_DRIVERKEY_NAME
{
163 WCHAR DriverKeyName
[1];
164 } USB_HCD_DRIVERKEY_NAME
, *PUSB_HCD_DRIVERKEY_NAME
;
166 typedef struct _HCD_ISO_STAT_COUNTERS
{
168 USHORT DoubleBufferedPackets
;
169 USHORT TransfersCF_5ms
;
170 USHORT TransfersCF_2ms
;
171 USHORT TransfersCF_1ms
;
172 USHORT MaxInterruptLatency
;
173 USHORT BadStartFrame
;
175 USHORT IsoPacketNotAccesed
;
176 USHORT IsoPacketHWError
;
177 USHORT SmallestUrbPacketCount
;
178 USHORT LargestUrbPacketCount
;
180 USHORT IsoOVERRUN_Error
;
181 USHORT IsoINTERNAL_Error
;
182 USHORT IsoUNKNOWN_Error
;
183 ULONG IsoBytesTransferred
;
184 USHORT LateMissedCount
;
185 USHORT HWIsoMissedCount
;
187 } HCD_ISO_STAT_COUNTERS
, *PHCD_ISO_STAT_COUNTERS
;
189 typedef struct _HCD_STAT_COUNTERS
{
190 ULONG BytesTransferred
;
191 USHORT IsoMissedCount
;
192 USHORT DataOverrunErrorCount
;
193 USHORT CrcErrorCount
;
194 USHORT ScheduleOverrunCount
;
195 USHORT TimeoutErrorCount
;
196 USHORT InternalHcErrorCount
;
197 USHORT BufferOverrunErrorCount
;
199 USHORT StallPidCount
;
200 USHORT PortDisableCount
;
201 } HCD_STAT_COUNTERS
, *PHCD_STAT_COUNTERS
;
203 typedef struct _HCD_STAT_INFORMATION_1
{
207 LARGE_INTEGER TimeRead
;
208 HCD_STAT_COUNTERS Counters
;
209 } HCD_STAT_INFORMATION_1
, *PHCD_STAT_INFORMATION_1
;
211 typedef struct _HCD_STAT_INFORMATION_2
{
215 LARGE_INTEGER TimeRead
;
216 LONG LockedMemoryUsed
;
217 HCD_STAT_COUNTERS Counters
;
218 HCD_ISO_STAT_COUNTERS IsoCounters
;
219 } HCD_STAT_INFORMATION_2
, *PHCD_STAT_INFORMATION_2
;
221 typedef struct _USB_HUB_INFORMATION
{
222 USB_HUB_DESCRIPTOR HubDescriptor
;
223 BOOLEAN HubIsBusPowered
;
224 } USB_HUB_INFORMATION
, *PUSB_HUB_INFORMATION
;
226 typedef struct _USB_HUB_NAME
{
229 } USB_HUB_NAME
, *PUSB_HUB_NAME
;
231 typedef enum _USB_HUB_NODE
{
237 (*USB_IDLE_CALLBACK
)(
240 typedef struct _USB_IDLE_CALLBACK_INFO
{
241 USB_IDLE_CALLBACK IdleCallback
;
243 } USB_IDLE_CALLBACK_INFO
, *PUSB_IDLE_CALLBACK_INFO
;
245 typedef struct _USB_NODE_CONNECTION_ATTRIBUTES
{
246 ULONG ConnectionIndex
;
247 USB_CONNECTION_STATUS ConnectionStatus
;
248 ULONG PortAttributes
;
249 } USB_NODE_CONNECTION_ATTRIBUTES
, *PUSB_NODE_CONNECTION_ATTRIBUTES
;
251 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME
{
252 ULONG ConnectionIndex
;
254 WCHAR DriverKeyName
[1];
255 } USB_NODE_CONNECTION_DRIVERKEY_NAME
, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME
;
257 typedef struct _USB_PIPE_INFO
{
258 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor
;
259 ULONG ScheduleOffset
;
260 } USB_PIPE_INFO
, *PUSB_PIPE_INFO
;
262 typedef struct _USB_NODE_CONNECTION_INFORMATION
{
263 ULONG ConnectionIndex
;
264 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
265 UCHAR CurrentConfigurationValue
;
268 USHORT DeviceAddress
;
269 ULONG NumberOfOpenPipes
;
270 USB_CONNECTION_STATUS ConnectionStatus
;
271 USB_PIPE_INFO PipeList
[0];
272 } USB_NODE_CONNECTION_INFORMATION
, *PUSB_NODE_CONNECTION_INFORMATION
;
274 typedef struct _USB_NODE_CONNECTION_NAME
{
275 ULONG ConnectionIndex
;
278 } USB_NODE_CONNECTION_NAME
, *PUSB_NODE_CONNECTION_NAME
;
280 typedef struct _USB_MI_PARENT_INFORMATION
{
281 ULONG NumberOfInterfaces
;
282 } USB_MI_PARENT_INFORMATION
, *PUSB_MI_PARENT_INFORMATION
;
284 typedef struct _USB_NODE_INFORMATION
{
285 USB_HUB_NODE NodeType
;
287 USB_HUB_INFORMATION HubInformation
;
288 USB_MI_PARENT_INFORMATION MiParentInformation
;
290 } USB_NODE_INFORMATION
, *PUSB_NODE_INFORMATION
;
292 #define WMI_USB_DRIVER_INFORMATION 0
293 #define WMI_USB_DRIVER_NOTIFICATION 1
294 #define WMI_USB_POWER_DEVICE_ENABLE 2
296 typedef enum _USB_NOTIFICATION_TYPE
{
297 EnumerationFailure
= 0,
298 InsufficentBandwidth
,
304 AcquireControllerName
,
308 ModernDeviceInLegacyHub
309 } USB_NOTIFICATION_TYPE
;
311 typedef struct _USB_ACQUIRE_INFO
{
312 USB_NOTIFICATION_TYPE NotificationType
;
315 } USB_ACQUIRE_INFO
, *PUSB_ACQUIRE_INFO
;
317 typedef struct _USB_NOTIFICATION
{
318 USB_NOTIFICATION_TYPE NotificationType
;
319 } USB_NOTIFICATION
, *PUSB_NOTIFICATION
;
321 typedef struct _USB_BUS_NOTIFICATION
{
322 USB_NOTIFICATION_TYPE NotificationType
;
323 ULONG TotalBandwidth
;
324 ULONG ConsumedBandwidth
;
325 ULONG ControllerNameLength
;
326 } USB_BUS_NOTIFICATION
, *PUSB_BUS_NOTIFICATION
;
328 typedef struct _USB_CONNECTION_NOTIFICATION
{
329 USB_NOTIFICATION_TYPE NotificationType
;
330 ULONG ConnectionNumber
;
331 ULONG RequestedBandwidth
;
332 ULONG EnumerationFailReason
;
333 ULONG PowerRequested
;
335 } USB_CONNECTION_NOTIFICATION
, *PUSB_CONNECTION_NOTIFICATION
;
337 typedef struct _USB_ROOT_HUB_NAME
{
339 WCHAR RootHubName
[1];
340 } USB_ROOT_HUB_NAME
, *PUSB_ROOT_HUB_NAME
;
348 #endif /* __USBIOCTL_H */