Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673/* * usbioctl.h * * USB IOCTL interface. * * This file is part of the ReactOS PSDK package. * * Contributors: * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */
#pragma once
#include "usb100.h"#include "usbiodef.h"
#ifdef __cplusplusextern "C" {#endif
#define IOCTL_INTERNAL_USB_SUBMIT_URB \ CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_RESET_PORT \ CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \ CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
#define USBD_PORT_ENABLED 1#define USBD_PORT_CONNECTED 2
#define IOCTL_INTERNAL_USB_GET_PORT_STATUS \ CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_ENABLE_PORT \ CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_HUB_COUNT \ CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_CYCLE_PORT \ CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_HUB_NAME \ CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_BUS_INFO \ CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \ CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \ CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \ CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
#if (_WIN32_WINNT >= 0x0501)
#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \ CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \ CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
#endif
#if (_WIN32_WINNT >= 0x0600)
#define IOCTL_INTERNAL_USB_NOTIFY_IDLE_READY \ CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION_EX, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_REQ_GLOBAL_SUSPEND \ CTL_CODE(FILE_DEVICE_USB, USB_REQ_GLOBAL_SUSPEND, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_REQ_GLOBAL_RESUME \ CTL_CODE(FILE_DEVICE_USB, USB_REQ_GLOBAL_RESUME, METHOD_NEITHER, FILE_ANY_ACCESS)
#ifdef USB20_APItypedef struct _USB_START_FAILDATA { ULONG LengthInBytes; NTSTATUS NtStatus; USBD_STATUS UsbdStatus; ULONG ConnectStatus; UCHAR DriverData[4];} USB_START_FAILDATA, *PUSB_START_FAILDATA;#endif
#define IOCTL_INTERNAL_USB_RECORD_FAILURE \ CTL_CODE(FILE_DEVICE_USB, USB_RECORD_FAILURE, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE_EX \ CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE_EX, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_TT_DEVICE_HANDLE \ CTL_CODE(FILE_DEVICE_USB, USB_GET_TT_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
typedef struct _USB_TOPOLOGY_ADDRESS { ULONG PciBusNumber; ULONG PciDeviceNumber; ULONG PciFunctionNumber; ULONG Reserved; USHORT RootHubPortNumber; USHORT HubPortNumber[5]; USHORT Reserved2;} USB_TOPOLOGY_ADDRESS, *PUSB_TOPOLOGY_ADDRESS;
#define IOCTL_INTERNAL_USB_GET_TOPOLOGY_ADDRESS \ CTL_CODE(FILE_DEVICE_USB, USB_GET_TOPOLOGY_ADDRESS, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_USB_GET_DEVICE_CONFIG_INFO \ CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CONFIG_INFO, METHOD_NEITHER, FILE_ANY_ACCESS)
#endif
#ifndef USB_KERNEL_IOCTL
#define IOCTL_USB_HCD_GET_STATS_1 \ CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_HCD_GET_STATS_2 \ CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_HCD_DISABLE_PORT \ CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_HCD_ENABLE_PORT \ CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_HCD_DISABLE_PORT \ CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_HCD_ENABLE_PORT \ CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
#ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF#define IOCTL_USB_DIAGNOSTIC_MODE_OFF \ CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)#endif
#ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON#define IOCTL_USB_DIAGNOSTIC_MODE_ON \ CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)#endif
#ifndef IOCTL_USB_GET_ROOT_HUB_NAME#define IOCTL_USB_GET_ROOT_HUB_NAME \ CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)#endif
#ifndef IOCTL_GET_HCD_DRIVERKEY_NAME#define IOCTL_GET_HCD_DRIVERKEY_NAME \ CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)#endif
#define IOCTL_USB_GET_NODE_INFORMATION \ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \ CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_GET_NODE_CONNECTION_NAME \ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_DIAG_IGNORE_HUBS_ON \ CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \ CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
#if (_WIN32_WINNT >= 0x0501)
#define IOCTL_USB_GET_HUB_CAPABILITIES \ CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_HUB_CYCLE_PORT \ CTL_CODE(FILE_DEVICE_USB, USB_HUB_CYCLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \ CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif
#if (_WIN32_WINNT >= 0x0600)
#define IOCTL_USB_RESET_HUB \ CTL_CODE(FILE_DEVICE_USB, USB_RESET_HUB, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_USB_GET_HUB_CAPABILITIES_EX \ CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif
#include <pshpack1.h>
typedef enum _USB_HUB_NODE { UsbHub, UsbMIParent} USB_HUB_NODE;
typedef struct _USB_HUB_INFORMATION { USB_HUB_DESCRIPTOR HubDescriptor; BOOLEAN HubIsBusPowered;} USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;
typedef struct _USB_MI_PARENT_INFORMATION { ULONG NumberOfInterfaces;} USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;
typedef struct _USB_NODE_INFORMATION { USB_HUB_NODE NodeType; union { USB_HUB_INFORMATION HubInformation; USB_MI_PARENT_INFORMATION MiParentInformation; } u;} USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;
typedef struct _USB_PIPE_INFO { USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; ULONG ScheduleOffset;} USB_PIPE_INFO, *PUSB_PIPE_INFO;
#if (_WIN32_WINNT >= 0x0600)
typedef enum _USB_CONNECTION_STATUS { NoDeviceConnected, DeviceConnected, DeviceFailedEnumeration, DeviceGeneralFailure, DeviceCausedOvercurrent, DeviceNotEnoughPower, DeviceNotEnoughBandwidth, DeviceHubNestedTooDeeply, DeviceInLegacyHub, DeviceEnumerating, DeviceReset} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
#elif (_WIN32_WINNT >= 0x0501)
typedef enum _USB_CONNECTION_STATUS { NoDeviceConnected, DeviceConnected, DeviceFailedEnumeration, DeviceGeneralFailure, DeviceCausedOvercurrent, DeviceNotEnoughPower, DeviceNotEnoughBandwidth, DeviceHubNestedTooDeeply, DeviceInLegacyHub} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
#else
typedef enum _USB_CONNECTION_STATUS { NoDeviceConnected, DeviceConnected, DeviceFailedEnumeration, DeviceGeneralFailure, DeviceCausedOvercurrent, DeviceNotEnoughPower, DeviceNotEnoughBandwidth} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
#endif
typedef struct _USB_NODE_CONNECTION_INFORMATION { ULONG ConnectionIndex; USB_DEVICE_DESCRIPTOR DeviceDescriptor; UCHAR CurrentConfigurationValue; BOOLEAN LowSpeed; BOOLEAN DeviceIsHub; USHORT DeviceAddress; ULONG NumberOfOpenPipes; USB_CONNECTION_STATUS ConnectionStatus; USB_PIPE_INFO PipeList[ANYSIZE_ARRAY];} USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;
typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME { ULONG ConnectionIndex; ULONG ActualLength; WCHAR DriverKeyName[ANYSIZE_ARRAY];} USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME;
typedef struct _USB_NODE_CONNECTION_NAME { ULONG ConnectionIndex; ULONG ActualLength; WCHAR NodeName[ANYSIZE_ARRAY];} USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME;
typedef struct _USB_HUB_NAME { ULONG ActualLength; WCHAR HubName[ANYSIZE_ARRAY];} USB_HUB_NAME, *PUSB_HUB_NAME;
typedef struct _USB_ROOT_HUB_NAME { ULONG ActualLength; WCHAR RootHubName[ANYSIZE_ARRAY];} USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;
typedef struct _USB_HCD_DRIVERKEY_NAME { ULONG ActualLength; WCHAR DriverKeyName[ANYSIZE_ARRAY];} USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;
typedef struct _USB_DESCRIPTOR_REQUEST { ULONG ConnectionIndex; struct { UCHAR bmRequest; UCHAR bRequest; USHORT wValue; USHORT wIndex; USHORT wLength; } SetupPacket; UCHAR Data[ANYSIZE_ARRAY];} USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST;
#if (_WIN32_WINNT >= 0x0501)
typedef struct _USB_HUB_CAPABILITIES { ULONG HubIs2xCapable:1;} USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;
typedef struct _USB_NODE_CONNECTION_ATTRIBUTES { ULONG ConnectionIndex; USB_CONNECTION_STATUS ConnectionStatus; ULONG PortAttributes;} USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES;
typedef struct _USB_NODE_CONNECTION_INFORMATION_EX { ULONG ConnectionIndex; USB_DEVICE_DESCRIPTOR DeviceDescriptor; UCHAR CurrentConfigurationValue; UCHAR Speed; BOOLEAN DeviceIsHub; USHORT DeviceAddress; ULONG NumberOfOpenPipes; USB_CONNECTION_STATUS ConnectionStatus; USB_PIPE_INFO PipeList[ANYSIZE_ARRAY];} USB_NODE_CONNECTION_INFORMATION_EX, *PUSB_NODE_CONNECTION_INFORMATION_EX;
C_ASSERT(sizeof(USB_NODE_CONNECTION_INFORMATION_EX) == sizeof(USB_NODE_CONNECTION_INFORMATION));
#endif
#if (_WIN32_WINNT >= 0x0600)
typedef union _USB_HUB_CAP_FLAGS { ULONG ul; struct { ULONG HubIsHighSpeedCapable:1; ULONG HubIsHighSpeed:1; ULONG HubIsMultiTtCapable:1; ULONG HubIsMultiTt:1; ULONG HubIsRoot:1; ULONG HubIsArmedWakeOnConnect:1; ULONG HubIsBusPowered:1; ULONG ReservedMBZ:25; };} USB_HUB_CAP_FLAGS, *PUSB_HUB_CAP_FLAGS;
C_ASSERT(sizeof(USB_HUB_CAP_FLAGS) == sizeof(ULONG));
typedef struct _USB_HUB_CAPABILITIES_EX { USB_HUB_CAP_FLAGS CapabilityFlags;} USB_HUB_CAPABILITIES_EX, *PUSB_HUB_CAPABILITIES_EX;
typedef struct _USB_CYCLE_PORT_PARAMS { ULONG ConnectionIndex; ULONG StatusReturned;} USB_CYCLE_PORT_PARAMS, *PUSB_CYCLE_PORT_PARAMS;
typedef struct _USB_ID_STRING { USHORT LanguageId; USHORT Pad; ULONG LengthInBytes; PWCHAR Buffer;} USB_ID_STRING, *PUSB_ID_STRING;
typedef struct _USB_HUB_DEVICE_UXD_SETTINGS { ULONG Version; GUID PnpGuid; GUID OwnerGuid; ULONG DeleteOnShutdown; ULONG DeleteOnReload; ULONG DeleteOnDisconnect; ULONG Reserved[5];} USB_HUB_DEVICE_UXD_SETTINGS, *PUSB_HUB_DEVICE_UXD_SETTINGS;
typedef struct _HUB_DEVICE_CONFIG_INFO_V1 { ULONG Version; ULONG Length; USB_HUB_CAP_FLAGS HubFlags; USB_ID_STRING HardwareIds; USB_ID_STRING CompatibleIds; USB_ID_STRING DeviceDescription; ULONG Reserved[19]; USB_HUB_DEVICE_UXD_SETTINGS UxdSettings;} HUB_DEVICE_CONFIG_INFO, *PHUB_DEVICE_CONFIG_INFO;
#endif
typedef struct _HCD_ISO_STAT_COUNTERS { USHORT LateUrbs; USHORT DoubleBufferedPackets; USHORT TransfersCF_5ms; USHORT TransfersCF_2ms; USHORT TransfersCF_1ms; USHORT MaxInterruptLatency; USHORT BadStartFrame; USHORT StaleUrbs; USHORT IsoPacketNotAccesed; USHORT IsoPacketHWError; USHORT SmallestUrbPacketCount; USHORT LargestUrbPacketCount; USHORT IsoCRC_Error; USHORT IsoOVERRUN_Error; USHORT IsoINTERNAL_Error; USHORT IsoUNKNOWN_Error; ULONG IsoBytesTransferred; USHORT LateMissedCount; USHORT HWIsoMissedCount; ULONG Reserved7[8];} HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS;
typedef struct _HCD_STAT_COUNTERS { ULONG BytesTransferred; USHORT IsoMissedCount; USHORT DataOverrunErrorCount; USHORT CrcErrorCount; USHORT ScheduleOverrunCount; USHORT TimeoutErrorCount; USHORT InternalHcErrorCount; USHORT BufferOverrunErrorCount; USHORT SWErrorCount; USHORT StallPidCount; USHORT PortDisableCount;} HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS;
typedef struct _HCD_STAT_INFORMATION_1 { ULONG Reserved1; ULONG Reserved2; ULONG ResetCounters; LARGE_INTEGER TimeRead; HCD_STAT_COUNTERS Counters;} HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1;
typedef struct _HCD_STAT_INFORMATION_2 { ULONG Reserved1; ULONG Reserved2; ULONG ResetCounters; LARGE_INTEGER TimeRead; LONG LockedMemoryUsed; HCD_STAT_COUNTERS Counters; HCD_ISO_STAT_COUNTERS IsoCounters;} HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2;
#define WMI_USB_DRIVER_INFORMATION 0#define WMI_USB_DRIVER_NOTIFICATION 1#define WMI_USB_POWER_DEVICE_ENABLE 2#define WMI_USB_HUB_NODE_INFORMATION 4
#define WMI_USB_PERFORMANCE_INFORMATION 1#define WMI_USB_DEVICE_NODE_INFORMATION 2
#if (_WIN32_WINNT >= 0x0501)
typedef enum _USB_NOTIFICATION_TYPE { EnumerationFailure = 0, InsufficentBandwidth, InsufficentPower, OverCurrent, ResetOvercurrent, AcquireBusInfo, AcquireHubName, AcquireControllerName, HubOvercurrent, HubPowerChange, HubNestedTooDeeply, ModernDeviceInLegacyHub} USB_NOTIFICATION_TYPE;
#else
typedef enum _USB_NOTIFICATION_TYPE { EnumerationFailure = 0, InsufficentBandwidth, InsufficentPower, OverCurrent, ResetOvercurrent, AcquireBusInfo, AcquireHubName, AcquireControllerName, HubOvercurrent, HubPowerChange} USB_NOTIFICATION_TYPE;
#endif
typedef struct _USB_NOTIFICATION { USB_NOTIFICATION_TYPE NotificationType;} USB_NOTIFICATION, *PUSB_NOTIFICATION;
typedef struct _USB_CONNECTION_NOTIFICATION { USB_NOTIFICATION_TYPE NotificationType; ULONG ConnectionNumber; ULONG RequestedBandwidth; ULONG EnumerationFailReason; ULONG PowerRequested; ULONG HubNameLength;} USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION;
typedef struct _USB_BUS_NOTIFICATION { USB_NOTIFICATION_TYPE NotificationType; ULONG TotalBandwidth; ULONG ConsumedBandwidth; ULONG ControllerNameLength;} USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION;
typedef struct _USB_ACQUIRE_INFO { USB_NOTIFICATION_TYPE NotificationType; ULONG TotalSize; WCHAR Buffer[ANYSIZE_ARRAY];} USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO;
#if (_WIN32_WINNT >= 0x0600)
#define USB_NODE_INFO_SIG 'USBN'
typedef enum _USB_WMI_DEVICE_NODE_TYPE { UsbDevice, HubDevice, CompositeDevice, UsbController} USB_WMI_DEVICE_NODE_TYPE, *PUSB_WMI_DEVICE_NODE_TYPE;
typedef struct _USB_DEVICE_STATE { ULONG DeviceConnected:1; ULONG DeviceStarted:1;} USB_DEVICE_STATE, *PUSB_DEVICE_STATE;
typedef struct _USB_HUB_PORT_INFORMATION { USB_DEVICE_STATE DeviceState; USHORT PortNumber; USHORT DeviceAddress; ULONG ConnectionIndex; USB_CONNECTION_STATUS ConnectionStatus;} USB_HUB_PORT_INFORMATION, *PUSB_HUB_PORT_INFORMATION;
typedef struct _USB_HUB_DEVICE_INFO { USB_HUB_DESCRIPTOR HubDescriptor; ULONG HubNumber; USHORT DeviceAddress; BOOLEAN HubIsSelfPowered; BOOLEAN HubIsRootHub; USB_HUB_CAPABILITIES HubCapabilities; ULONG NumberOfHubPorts; USB_HUB_PORT_INFORMATION PortInfo[ANYSIZE_ARRAY];} USB_HUB_DEVICE_INFO, *PUSB_HUB_DEVICE_INFO;
typedef struct _USB_COMPOSITE_FUNCTION_INFO { UCHAR FunctionNumber; UCHAR BaseInterfaceNumber; UCHAR NumberOfInterfaces; BOOLEAN FunctionIsIdle;} USB_COMPOSITE_FUNCTION_INFO, *PUSB_COMPOSITE_FUNCTION_INFO;
typedef struct _USB_COMPOSITE_DEVICE_INFO { USB_DEVICE_DESCRIPTOR DeviceDescriptor; USB_CONFIGURATION_DESCRIPTOR CurrentConfigDescriptor; UCHAR CurrentConfigurationValue; UCHAR NumberOfFunctions; USB_COMPOSITE_FUNCTION_INFO FunctionInfo[ANYSIZE_ARRAY];} USB_COMPOSITE_DEVICE_INFO, *PUSB_COMPOSITE_DEVICE_INFO;
typedef struct _USB_CONTROLLER_DEVICE_INFO { ULONG PciVendorId; ULONG PciDeviceId; ULONG PciRevision; ULONG NumberOfRootPorts; ULONG HcFeatureFlags;} USB_CONTROLLER_DEVICE_INFO, *PUSB_CONTROLLER_DEVICE_INFO;
typedef struct _USB_DEVICE_INFO { USB_DEVICE_STATE DeviceState; USHORT PortNumber; USB_DEVICE_DESCRIPTOR DeviceDescriptor; UCHAR CurrentConfigurationValue; USB_DEVICE_SPEED Speed; USHORT DeviceAddress; ULONG ConnectionIndex; USB_CONNECTION_STATUS ConnectionStatus; WCHAR PnpHardwareId[128]; WCHAR PnpCompatibleId[128]; WCHAR SerialNumberId[128]; WCHAR PnpDeviceDescription[128]; ULONG NumberOfOpenPipes; USB_PIPE_INFO PipeList[ANYSIZE_ARRAY];} USB_DEVICE_INFO, *PUSB_DEVICE_INFO;
typedef struct _USB_DEVICE_NODE_INFO { ULONG Sig; ULONG LengthInBytes; WCHAR DeviceDescription[40]; USB_WMI_DEVICE_NODE_TYPE NodeType; USB_TOPOLOGY_ADDRESS BusAddress; union{ USB_DEVICE_INFO UsbDeviceInfo; USB_HUB_DEVICE_INFO HubDeviceInfo; USB_COMPOSITE_DEVICE_INFO CompositeDeviceInfo; USB_CONTROLLER_DEVICE_INFO ControllerDeviceInfo; UCHAR DeviceInformation[4]; };} USB_DEVICE_NODE_INFO, *PUSB_DEVICE_NODE_INFO;
typedef struct _USB_DEVICE_PERFORMANCE_INFO { ULONG BulkBytes; ULONG ControlDataBytes; ULONG IsoBytes; ULONG InterruptBytes; ULONG BulkUrbCount; ULONG ControlUrbCount; ULONG IsoUrbCount; ULONG InterruptUrbCount; ULONG AllocedInterrupt[6]; ULONG AllocedIso; ULONG Total32secBandwidth; ULONG TotalTtBandwidth; WCHAR DeviceDescription[60]; USB_DEVICE_SPEED DeviceSpeed; ULONG TotalIsoLatency; ULONG DroppedIsoPackets; ULONG TransferErrors; ULONG PciInterruptCount; ULONG HcIdleState; ULONG HcAsyncIdleState; ULONG HcAsyncCacheFlushCount; ULONG HcPeriodicIdleState; ULONG HcPeriodicCacheFlushCount;} USB_DEVICE_PERFORMANCE_INFO, *PUSB_DEVICE_PERFORMANCE_INFO;
#endif
#include <poppack.h>
#endif /* USB_KERNEL_IOCTL */
#ifdef __cplusplus}#endif