source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/usbioctl.h@ 1180

Last change on this file since 1180 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File size: 20.3 KB
Line 
1/**
2 * usbioctl.h
3 *
4 * USB IOCTL interface.#ifndef __USBIOCTL_H__
5 *
6 * This file is part of the mingw-w64 runtime package.
7 * No warranty is given; refer to the file DISCLAIMER within this package.
8 *
9 * This file is based on the ReactOS PSDK file usbdi.h header.
10 * Original contributed by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 *
12 * Added winapi-family check, Windows 8 additions by Kai Tietz.
13 */
14
15#ifndef __USBIOCTL_H__
16#define __USBIOCTL_H__
17
18#include <minwindef.h>
19#include <winapifamily.h>
20
21#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
22
23#ifndef FAR
24#define FAR
25#endif
26
27#include "usb200.h"
28#include "usbiodef.h"
29
30#define IOCTL_INTERNAL_USB_SUBMIT_URB CTL_CODE (FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
31#define IOCTL_INTERNAL_USB_RESET_PORT CTL_CODE (FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
32#define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO CTL_CODE (FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
33
34#define USBD_PORT_ENABLED 0x00000001
35#define USBD_PORT_CONNECTED 0x00000002
36
37#define IOCTL_INTERNAL_USB_GET_PORT_STATUS CTL_CODE (FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
38#define IOCTL_INTERNAL_USB_ENABLE_PORT CTL_CODE (FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
39#define IOCTL_INTERNAL_USB_GET_HUB_COUNT CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
40#define IOCTL_INTERNAL_USB_CYCLE_PORT CTL_CODE (FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
41#define IOCTL_INTERNAL_USB_GET_HUB_NAME CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
42#define IOCTL_INTERNAL_USB_GET_BUS_INFO CTL_CODE (FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
43#define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME CTL_CODE (FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
44#define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO CTL_CODE (FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
45#define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO CTL_CODE (FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
46#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION CTL_CODE (FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
47#define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE CTL_CODE (FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
48
49#if _WIN32_WINNT >= 0x0600
50#define IOCTL_INTERNAL_USB_NOTIFY_IDLE_READY CTL_CODE (FILE_DEVICE_USB, USB_IDLE_NOTIFICATION_EX, METHOD_NEITHER, FILE_ANY_ACCESS)
51#define IOCTL_INTERNAL_USB_REQ_GLOBAL_SUSPEND CTL_CODE (FILE_DEVICE_USB, USB_REQ_GLOBAL_SUSPEND, METHOD_NEITHER, FILE_ANY_ACCESS)
52#define IOCTL_INTERNAL_USB_REQ_GLOBAL_RESUME CTL_CODE (FILE_DEVICE_USB, USB_REQ_GLOBAL_RESUME, METHOD_NEITHER, FILE_ANY_ACCESS)
53
54#ifdef USB20_API
55typedef struct _USB_START_FAILDATA {
56 ULONG LengthInBytes;
57 NTSTATUS NtStatus;
58 USBD_STATUS UsbdStatus;
59 ULONG ConnectStatus;
60 UCHAR DriverData[4];
61} USB_START_FAILDATA,*PUSB_START_FAILDATA;
62#endif
63
64#define IOCTL_INTERNAL_USB_RECORD_FAILURE CTL_CODE (FILE_DEVICE_USB, USB_RECORD_FAILURE, METHOD_NEITHER, FILE_ANY_ACCESS)
65#define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE_EX CTL_CODE (FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE_EX, METHOD_NEITHER, FILE_ANY_ACCESS)
66#define IOCTL_INTERNAL_USB_GET_TT_DEVICE_HANDLE CTL_CODE (FILE_DEVICE_USB, USB_GET_TT_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
67
68typedef struct _USB_TOPOLOGY_ADDRESS {
69 ULONG PciBusNumber;
70 ULONG PciDeviceNumber;
71 ULONG PciFunctionNumber;
72 ULONG Reserved;
73 USHORT RootHubPortNumber;
74 USHORT HubPortNumber[5];
75 USHORT Reserved2;
76} USB_TOPOLOGY_ADDRESS,*PUSB_TOPOLOGY_ADDRESS;
77
78#define IOCTL_INTERNAL_USB_GET_TOPOLOGY_ADDRESS CTL_CODE (FILE_DEVICE_USB, USB_GET_TOPOLOGY_ADDRESS, METHOD_NEITHER, FILE_ANY_ACCESS)
79#define IOCTL_INTERNAL_USB_GET_DEVICE_CONFIG_INFO CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_CONFIG_INFO, METHOD_NEITHER, FILE_ANY_ACCESS)
80#endif
81#if NTDDI_VERSION >= 0x06020000
82#define IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE CTL_CODE (FILE_DEVICE_USBEX, USB_REGISTER_COMPOSITE_DEVICE, METHOD_NEITHER, FILE_ANY_ACCESS)
83#define IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE CTL_CODE (FILE_DEVICE_USBEX, USB_UNREGISTER_COMPOSITE_DEVICE, METHOD_NEITHER, FILE_ANY_ACCESS)
84#define IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION CTL_CODE (FILE_DEVICE_USBEX, USB_REQUEST_REMOTE_WAKE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
85#endif
86
87#ifndef USB_KERNEL_IOCTL
88#define IOCTL_USB_HCD_GET_STATS_1 CTL_CODE (FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
89#define IOCTL_USB_HCD_GET_STATS_2 CTL_CODE (FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
90#define IOCTL_USB_HCD_DISABLE_PORT CTL_CODE (FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
91#define IOCTL_USB_HCD_ENABLE_PORT CTL_CODE (FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
92#ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON
93#define IOCTL_USB_DIAGNOSTIC_MODE_ON CTL_CODE (FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
94#endif
95#ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF
96#define IOCTL_USB_DIAGNOSTIC_MODE_OFF CTL_CODE (FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
97#endif
98#ifndef IOCTL_USB_GET_ROOT_HUB_NAME
99#define IOCTL_USB_GET_ROOT_HUB_NAME CTL_CODE (FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
100#endif
101#ifndef IOCTL_GET_HCD_DRIVERKEY_NAME
102#define IOCTL_GET_HCD_DRIVERKEY_NAME CTL_CODE (FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
103#endif
104#define IOCTL_USB_GET_NODE_INFORMATION CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
105#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
106#define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION CTL_CODE (FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
107#define IOCTL_USB_GET_NODE_CONNECTION_NAME CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
108#define IOCTL_USB_DIAG_IGNORE_HUBS_ON CTL_CODE (FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
109#define IOCTL_USB_DIAG_IGNORE_HUBS_OFF CTL_CODE (FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
110#define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
111#define IOCTL_USB_GET_HUB_CAPABILITIES CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
112#define IOCTL_USB_HUB_CYCLE_PORT CTL_CODE (FILE_DEVICE_USB, USB_HUB_CYCLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
113#define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
114#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
115#if _WIN32_WINNT >= 0x0600
116#define IOCTL_USB_RESET_HUB CTL_CODE (FILE_DEVICE_USB, USB_RESET_HUB, METHOD_BUFFERED, FILE_ANY_ACCESS)
117#define IOCTL_USB_GET_HUB_CAPABILITIES_EX CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
118#endif
119#if NTDDI_VERSION >= 0x06020000
120#define IOCTL_USB_GET_HUB_INFORMATION_EX CTL_CODE (FILE_DEVICE_USB, USB_GET_HUB_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
121#define IOCTL_USB_GET_PORT_CONNECTOR_PROPERTIES CTL_CODE (FILE_DEVICE_USB, USB_GET_PORT_CONNECTOR_PROPERTIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
122#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 CTL_CODE (FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX_V2, METHOD_BUFFERED, FILE_ANY_ACCESS)
123#endif
124
125#include <pshpack1.h>
126
127typedef enum _USB_HUB_NODE {
128 UsbHub,
129 UsbMIParent
130} USB_HUB_NODE;
131
132typedef struct _USB_HUB_INFORMATION {
133 USB_HUB_DESCRIPTOR HubDescriptor;
134 BOOLEAN HubIsBusPowered;
135} USB_HUB_INFORMATION,*PUSB_HUB_INFORMATION;
136
137typedef struct _USB_MI_PARENT_INFORMATION {
138 ULONG NumberOfInterfaces;
139} USB_MI_PARENT_INFORMATION,*PUSB_MI_PARENT_INFORMATION;
140
141typedef struct _USB_NODE_INFORMATION {
142 USB_HUB_NODE NodeType;
143 union {
144 USB_HUB_INFORMATION HubInformation;
145 USB_MI_PARENT_INFORMATION MiParentInformation;
146 } u;
147} USB_NODE_INFORMATION,*PUSB_NODE_INFORMATION;
148
149typedef struct _USB_PIPE_INFO {
150 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
151 ULONG ScheduleOffset;
152} USB_PIPE_INFO,*PUSB_PIPE_INFO;
153
154#if _WIN32_WINNT >= 0x0600
155typedef enum _USB_CONNECTION_STATUS {
156 NoDeviceConnected,
157 DeviceConnected,
158 DeviceFailedEnumeration,
159 DeviceGeneralFailure,
160 DeviceCausedOvercurrent,
161 DeviceNotEnoughPower,
162 DeviceNotEnoughBandwidth,
163 DeviceHubNestedTooDeeply,
164 DeviceInLegacyHub,
165 DeviceEnumerating,
166 DeviceReset
167} USB_CONNECTION_STATUS,*PUSB_CONNECTION_STATUS;
168#else
169typedef enum _USB_CONNECTION_STATUS {
170 NoDeviceConnected,
171 DeviceConnected,
172
173 DeviceFailedEnumeration,
174 DeviceGeneralFailure,
175 DeviceCausedOvercurrent,
176 DeviceNotEnoughPower,
177 DeviceNotEnoughBandwidth,
178 DeviceHubNestedTooDeeply,
179 DeviceInLegacyHub
180} USB_CONNECTION_STATUS,*PUSB_CONNECTION_STATUS;
181#endif
182
183typedef struct _USB_NODE_CONNECTION_INFORMATION {
184 ULONG ConnectionIndex;
185 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
186 UCHAR CurrentConfigurationValue;
187 BOOLEAN LowSpeed;
188 BOOLEAN DeviceIsHub;
189 USHORT DeviceAddress;
190 ULONG NumberOfOpenPipes;
191 USB_CONNECTION_STATUS ConnectionStatus;
192 USB_PIPE_INFO PipeList[0];
193} USB_NODE_CONNECTION_INFORMATION,*PUSB_NODE_CONNECTION_INFORMATION;
194
195typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME {
196 ULONG ConnectionIndex;
197 ULONG ActualLength;
198 WCHAR DriverKeyName[1];
199} USB_NODE_CONNECTION_DRIVERKEY_NAME,*PUSB_NODE_CONNECTION_DRIVERKEY_NAME;
200
201typedef struct _USB_NODE_CONNECTION_NAME {
202 ULONG ConnectionIndex;
203 ULONG ActualLength;
204 WCHAR NodeName[1];
205} USB_NODE_CONNECTION_NAME,*PUSB_NODE_CONNECTION_NAME;
206
207typedef struct _USB_HUB_NAME {
208 ULONG ActualLength;
209 WCHAR HubName[1];
210} USB_HUB_NAME,*PUSB_HUB_NAME;
211
212typedef struct _USB_ROOT_HUB_NAME {
213 ULONG ActualLength;
214 WCHAR RootHubName[1];
215} USB_ROOT_HUB_NAME,*PUSB_ROOT_HUB_NAME;
216
217typedef struct _USB_HCD_DRIVERKEY_NAME {
218 ULONG ActualLength;
219 WCHAR DriverKeyName[1];
220} USB_HCD_DRIVERKEY_NAME,*PUSB_HCD_DRIVERKEY_NAME;
221
222typedef struct _USB_DESCRIPTOR_REQUEST {
223 ULONG ConnectionIndex;
224 struct {
225 UCHAR bmRequest;
226 UCHAR bRequest;
227 USHORT wValue;
228 USHORT wIndex;
229 USHORT wLength;
230 } SetupPacket;
231 UCHAR Data[0];
232} USB_DESCRIPTOR_REQUEST,*PUSB_DESCRIPTOR_REQUEST;
233
234typedef struct _USB_HUB_CAPABILITIES {
235 ULONG HubIs2xCapable:1;
236} USB_HUB_CAPABILITIES,*PUSB_HUB_CAPABILITIES;
237
238typedef struct _USB_NODE_CONNECTION_ATTRIBUTES {
239 ULONG ConnectionIndex;
240 USB_CONNECTION_STATUS ConnectionStatus;
241 ULONG PortAttributes;
242} USB_NODE_CONNECTION_ATTRIBUTES,*PUSB_NODE_CONNECTION_ATTRIBUTES;
243
244typedef struct _USB_NODE_CONNECTION_INFORMATION_EX {
245 ULONG ConnectionIndex;
246 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
247 UCHAR CurrentConfigurationValue;
248 UCHAR Speed;
249 BOOLEAN DeviceIsHub;
250 USHORT DeviceAddress;
251 ULONG NumberOfOpenPipes;
252 USB_CONNECTION_STATUS ConnectionStatus;
253 USB_PIPE_INFO PipeList[0];
254} USB_NODE_CONNECTION_INFORMATION_EX,*PUSB_NODE_CONNECTION_INFORMATION_EX;
255
256#if _WIN32_WINNT >= 0x0600
257typedef union _USB_HUB_CAP_FLAGS {
258 ULONG ul;
259 __C89_NAMELESS struct {
260 ULONG HubIsHighSpeedCapable:1;
261 ULONG HubIsHighSpeed:1;
262 ULONG HubIsMultiTtCapable:1;
263 ULONG HubIsMultiTt:1;
264 ULONG HubIsRoot:1;
265 ULONG HubIsArmedWakeOnConnect:1;
266 ULONG HubIsBusPowered:1;
267 ULONG ReservedMBZ:25;
268 };
269} USB_HUB_CAP_FLAGS,*PUSB_HUB_CAP_FLAGS;
270
271typedef struct _USB_HUB_CAPABILITIES_EX {
272 USB_HUB_CAP_FLAGS CapabilityFlags;
273} USB_HUB_CAPABILITIES_EX,*PUSB_HUB_CAPABILITIES_EX;
274
275typedef struct _USB_CYCLE_PORT_PARAMS {
276 ULONG ConnectionIndex;
277 ULONG StatusReturned;
278} USB_CYCLE_PORT_PARAMS,*PUSB_CYCLE_PORT_PARAMS;
279
280typedef struct _USB_ID_STRING {
281 USHORT LanguageId;
282 USHORT Pad;
283 ULONG LengthInBytes;
284 PWCHAR Buffer;
285} USB_ID_STRING,*PUSB_ID_STRING;
286
287typedef struct _USB_HUB_DEVICE_UXD_SETTINGS {
288 ULONG Version;
289 GUID PnpGuid;
290 GUID OwnerGuid;
291 ULONG DeleteOnShutdown;
292 ULONG DeleteOnReload;
293 ULONG DeleteOnDisconnect;
294 ULONG Reserved[5];
295} USB_HUB_DEVICE_UXD_SETTINGS,*PUSB_HUB_DEVICE_UXD_SETTINGS;
296
297typedef struct _HUB_DEVICE_CONFIG_INFO_V1 {
298 ULONG Version;
299 ULONG Length;
300 USB_HUB_CAP_FLAGS HubFlags;
301 USB_ID_STRING HardwareIds;
302 USB_ID_STRING CompatibleIds;
303 USB_ID_STRING DeviceDescription;
304 ULONG Reserved[19];
305 USB_HUB_DEVICE_UXD_SETTINGS UxdSettings;
306} HUB_DEVICE_CONFIG_INFO,*PHUB_DEVICE_CONFIG_INFO;
307#endif
308
309typedef struct _HCD_STAT_COUNTERS {
310 ULONG BytesTransferred;
311 USHORT IsoMissedCount;
312 USHORT DataOverrunErrorCount;
313 USHORT CrcErrorCount;
314 USHORT ScheduleOverrunCount;
315 USHORT TimeoutErrorCount;
316 USHORT InternalHcErrorCount;
317 USHORT BufferOverrunErrorCount;
318 USHORT SWErrorCount;
319 USHORT StallPidCount;
320 USHORT PortDisableCount;
321} HCD_STAT_COUNTERS,*PHCD_STAT_COUNTERS;
322
323typedef struct _HCD_ISO_STAT_COUNTERS {
324 USHORT LateUrbs;
325 USHORT DoubleBufferedPackets;
326 USHORT TransfersCF_5ms;
327 USHORT TransfersCF_2ms;
328 USHORT TransfersCF_1ms;
329 USHORT MaxInterruptLatency;
330 USHORT BadStartFrame;
331 USHORT StaleUrbs;
332 USHORT IsoPacketNotAccesed;
333 USHORT IsoPacketHWError;
334 USHORT SmallestUrbPacketCount;
335 USHORT LargestUrbPacketCount;
336 USHORT IsoCRC_Error;
337 USHORT IsoOVERRUN_Error;
338 USHORT IsoINTERNAL_Error;
339 USHORT IsoUNKNOWN_Error;
340 ULONG IsoBytesTransferred;
341 USHORT LateMissedCount;
342 USHORT HWIsoMissedCount;
343 ULONG Reserved7[8];
344} HCD_ISO_STAT_COUNTERS,*PHCD_ISO_STAT_COUNTERS;
345
346typedef struct _HCD_STAT_INFORMATION_1 {
347 ULONG Reserved1;
348 ULONG Reserved2;
349 ULONG ResetCounters;
350 LARGE_INTEGER TimeRead;
351 HCD_STAT_COUNTERS Counters;
352} HCD_STAT_INFORMATION_1,*PHCD_STAT_INFORMATION_1;
353
354typedef struct _HCD_STAT_INFORMATION_2 {
355 ULONG Reserved1;
356 ULONG Reserved2;
357 ULONG ResetCounters;
358 LARGE_INTEGER TimeRead;
359 LONG LockedMemoryUsed;
360 HCD_STAT_COUNTERS Counters;
361 HCD_ISO_STAT_COUNTERS IsoCounters;
362} HCD_STAT_INFORMATION_2,*PHCD_STAT_INFORMATION_2;
363
364#define WMI_USB_DRIVER_INFORMATION 0
365#define WMI_USB_DRIVER_NOTIFICATION 1
366#define WMI_USB_POWER_DEVICE_ENABLE 2
367#define WMI_USB_HUB_NODE_INFORMATION 4
368
369#define WMI_USB_PERFORMANCE_INFORMATION 1
370#define WMI_USB_DEVICE_NODE_INFORMATION 2
371
372typedef enum _USB_NOTIFICATION_TYPE {
373 EnumerationFailure = 0,
374 InsufficentBandwidth,
375 InsufficentPower,
376 OverCurrent,
377 ResetOvercurrent,
378 AcquireBusInfo,
379 AcquireHubName,
380 AcquireControllerName,
381 HubOvercurrent,
382 HubPowerChange,
383 HubNestedTooDeeply,
384 ModernDeviceInLegacyHub
385} USB_NOTIFICATION_TYPE;
386
387typedef struct _USB_NOTIFICATION {
388 USB_NOTIFICATION_TYPE NotificationType;
389} USB_NOTIFICATION,*PUSB_NOTIFICATION;
390
391typedef struct _USB_CONNECTION_NOTIFICATION {
392 USB_NOTIFICATION_TYPE NotificationType;
393 ULONG ConnectionNumber;
394 ULONG RequestedBandwidth;
395 ULONG EnumerationFailReason;
396 ULONG PowerRequested;
397 ULONG HubNameLength;
398} USB_CONNECTION_NOTIFICATION,*PUSB_CONNECTION_NOTIFICATION;
399
400typedef struct _USB_BUS_NOTIFICATION {
401 USB_NOTIFICATION_TYPE NotificationType;
402 ULONG TotalBandwidth;
403 ULONG ConsumedBandwidth;
404 ULONG ControllerNameLength;
405} USB_BUS_NOTIFICATION,*PUSB_BUS_NOTIFICATION;
406
407typedef struct _USB_ACQUIRE_INFO {
408 USB_NOTIFICATION_TYPE NotificationType;
409 ULONG TotalSize;
410 WCHAR Buffer[1];
411} USB_ACQUIRE_INFO,*PUSB_ACQUIRE_INFO;
412
413#if _WIN32_WINNT >= 0x0600
414#define USB_NODE_INFO_SIG 'USBN'
415
416typedef enum _USB_WMI_DEVICE_NODE_TYPE {
417 UsbDevice,
418 HubDevice,
419 CompositeDevice,
420 UsbController
421} USB_WMI_DEVICE_NODE_TYPE,*PUSB_WMI_DEVICE_NODE_TYPE;
422
423typedef struct _USB_DEVICE_STATE {
424 ULONG DeviceConnected:1;
425 ULONG DeviceStarted:1;
426} USB_DEVICE_STATE,*PUSB_DEVICE_STATE;
427
428typedef struct _USB_HUB_PORT_INFORMATION {
429 USB_DEVICE_STATE DeviceState;
430 USHORT PortNumber;
431 USHORT DeviceAddress;
432 ULONG ConnectionIndex;
433 USB_CONNECTION_STATUS ConnectionStatus;
434} USB_HUB_PORT_INFORMATION,*PUSB_HUB_PORT_INFORMATION;
435
436typedef struct _USB_HUB_DEVICE_INFO {
437 USB_HUB_DESCRIPTOR HubDescriptor;
438 ULONG HubNumber;
439 USHORT DeviceAddress;
440 BOOLEAN HubIsSelfPowered;
441 BOOLEAN HubIsRootHub;
442 USB_HUB_CAPABILITIES HubCapabilities;
443 ULONG NumberOfHubPorts;
444 USB_HUB_PORT_INFORMATION PortInfo[1];
445} USB_HUB_DEVICE_INFO,*PUSB_HUB_DEVICE_INFO;
446
447typedef struct _USB_COMPOSITE_FUNCTION_INFO {
448 UCHAR FunctionNumber;
449 UCHAR BaseInterfaceNumber;
450 UCHAR NumberOfInterfaces;
451 BOOLEAN FunctionIsIdle;
452} USB_COMPOSITE_FUNCTION_INFO,*PUSB_COMPOSITE_FUNCTION_INFO;
453
454typedef struct _USB_COMPOSITE_DEVICE_INFO {
455 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
456 USB_CONFIGURATION_DESCRIPTOR CurrentConfigDescriptor;
457 UCHAR CurrentConfigurationValue;
458 UCHAR NumberOfFunctions;
459 USB_COMPOSITE_FUNCTION_INFO FunctionInfo[1];
460} USB_COMPOSITE_DEVICE_INFO,*PUSB_COMPOSITE_DEVICE_INFO;
461
462typedef struct _USB_CONTROLLER_DEVICE_INFO {
463 ULONG PciVendorId;
464 ULONG PciDeviceId;
465 ULONG PciRevision;
466 ULONG NumberOfRootPorts;
467 ULONG HcFeatureFlags;
468} USB_CONTROLLER_DEVICE_INFO,*PUSB_CONTROLLER_DEVICE_INFO;
469
470typedef struct _USB_DEVICE_INFO {
471 USB_DEVICE_STATE DeviceState;
472 USHORT PortNumber;
473 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
474 UCHAR CurrentConfigurationValue;
475 USB_DEVICE_SPEED Speed;
476 USHORT DeviceAddress;
477 ULONG ConnectionIndex;
478 USB_CONNECTION_STATUS ConnectionStatus;
479 WCHAR PnpHardwareId[128];
480 WCHAR PnpCompatibleId[128];
481 WCHAR SerialNumberId[128];
482 WCHAR PnpDeviceDescription[128];
483 ULONG NumberOfOpenPipes;
484 USB_PIPE_INFO PipeList[1];
485} USB_DEVICE_INFO,*PUSB_DEVICE_INFO;
486
487typedef struct _USB_DEVICE_NODE_INFO {
488 ULONG Sig;
489 ULONG LengthInBytes;
490 WCHAR DeviceDescription[40];
491 USB_WMI_DEVICE_NODE_TYPE NodeType;
492 USB_TOPOLOGY_ADDRESS BusAddress;
493 __C89_NAMELESS union {
494 USB_DEVICE_INFO UsbDeviceInfo;
495 USB_HUB_DEVICE_INFO HubDeviceInfo;
496 USB_COMPOSITE_DEVICE_INFO CompositeDeviceInfo;
497 USB_CONTROLLER_DEVICE_INFO ControllerDeviceInfo;
498 UCHAR DeviceInformation[4];
499 };
500} USB_DEVICE_NODE_INFO,*PUSB_DEVICE_NODE_INFO;
501
502typedef struct _USB_DEVICE_PERFORMANCE_INFO {
503 ULONG BulkBytes;
504 ULONG ControlDataBytes;
505 ULONG IsoBytes;
506 ULONG InterruptBytes;
507 ULONG BulkUrbCount;
508 ULONG ControlUrbCount;
509 ULONG IsoUrbCount;
510 ULONG InterruptUrbCount;
511 ULONG AllocedInterrupt[6];
512 ULONG AllocedIso;
513 ULONG Total32secBandwidth;
514 ULONG TotalTtBandwidth;
515 WCHAR DeviceDescription[60];
516 USB_DEVICE_SPEED DeviceSpeed;
517 ULONG TotalIsoLatency;
518 ULONG DroppedIsoPackets;
519 ULONG TransferErrors;
520 ULONG PciInterruptCount;
521 ULONG HcIdleState;
522 ULONG HcAsyncIdleState;
523 ULONG HcAsyncCacheFlushCount;
524 ULONG HcPeriodicIdleState;
525 ULONG HcPeriodicCacheFlushCount;
526} USB_DEVICE_PERFORMANCE_INFO,*PUSB_DEVICE_PERFORMANCE_INFO;
527#endif
528
529#if NTDDI_VERSION >= 0x06020000
530typedef enum _USB_HUB_TYPE {
531 UsbRootHub = 1,
532 Usb20Hub = 2,
533 Usb30Hub = 3
534} USB_HUB_TYPE;
535
536typedef struct _USB_HUB_INFORMATION_EX {
537 USB_HUB_TYPE HubType;
538 USHORT HighestPortNumber;
539 union {
540 USB_HUB_DESCRIPTOR UsbHubDescriptor;
541 USB_30_HUB_DESCRIPTOR Usb30HubDescriptor;
542 } u;
543} USB_HUB_INFORMATION_EX,*PUSB_HUB_INFORMATION_EX;
544
545typedef union _USB_PORT_PROPERTIES {
546 ULONG ul;
547 __C89_NAMELESS struct {
548 ULONG PortIsUserConnectable :1;
549 ULONG PortIsDebugCapable :1;
550 ULONG ReservedMBZ :30;
551 };
552} USB_PORT_PROPERTIES,*PUSB_PORT_PROPERTIES;
553
554typedef struct _USB_PORT_CONNECTOR_PROPERTIES {
555 ULONG ConnectionIndex;
556 ULONG ActualLength;
557 USB_PORT_PROPERTIES UsbPortProperties;
558 USHORT CompanionIndex;
559 USHORT CompanionPortNumber;
560 WCHAR CompanionHubSymbolicLinkName[1];
561} USB_PORT_CONNECTOR_PROPERTIES,*PUSB_PORT_CONNECTOR_PROPERTIES;
562
563typedef union _USB_PROTOCOLS {
564 ULONG ul;
565 __C89_NAMELESS struct {
566 ULONG Usb110 :1;
567 ULONG Usb200 :1;
568 ULONG Usb300 :1;
569 ULONG ReservedMBZ :29;
570 };
571} USB_PROTOCOLS,*PUSB_PROTOCOLS;
572
573typedef union _USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS {
574 ULONG ul;
575 __C89_NAMELESS struct {
576 ULONG DeviceIsOperatingAtSuperSpeedOrHigher :1;
577 ULONG DeviceIsSuperSpeedCapableOrHigher :1;
578 ULONG DeviceIsOperatingAtSuperSpeedPlusOrHigher :1;
579 ULONG DeviceIsSuperSpeedPlusCapableOrHigher :1;
580 ULONG ReservedMBZ :28;
581 };
582} USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS,*PUSB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS;
583
584typedef struct _USB_NODE_CONNECTION_INFORMATION_EX_V2 {
585 ULONG ConnectionIndex;
586 ULONG Length;
587 USB_PROTOCOLS SupportedUsbProtocols;
588 USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS Flags;
589} USB_NODE_CONNECTION_INFORMATION_EX_V2,*PUSB_NODE_CONNECTION_INFORMATION_EX_V2;
590#endif
591
592#include <poppack.h>
593
594#endif
595
596#endif
597#endif
Note: See TracBrowser for help on using the repository browser.