Embed:
(wiki syntax)
Show/hide line numbers
usbioctl.h
00001 /* 00002 * usbioctl.h 00003 * 00004 * USB IOCTL interface. 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __USBIOCTL_H 00024 #define __USBIOCTL_H 00025 00026 #if __GNUC__ >=3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #ifdef __cplusplus 00031 extern "C" { 00032 #endif 00033 00034 #include "ntddk.h" 00035 #include "usb100.h" 00036 #include "usbiodef.h" 00037 00038 #define USBD_PORT_ENABLED 1 00039 #define USBD_PORT_CONNECTED 2 00040 00041 #define IOCTL_INTERNAL_USB_CYCLE_PORT \ 00042 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 00043 00044 #define IOCTL_INTERNAL_USB_ENABLE_PORT \ 00045 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 00046 00047 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \ 00048 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 00049 00050 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \ 00051 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 00052 00053 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \ 00054 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00055 00056 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \ 00057 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS) 00058 00059 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \ 00060 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS) 00061 00062 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \ 00063 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00064 00065 #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \ 00066 CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 00067 00068 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \ 00069 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS) 00070 00071 #define IOCTL_INTERNAL_USB_RESET_PORT \ 00072 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 00073 00074 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \ 00075 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS) 00076 00077 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \ 00078 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS) 00079 00080 #define IOCTL_INTERNAL_USB_SUBMIT_URB \ 00081 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS) 00082 00083 00084 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \ 00085 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS) 00086 00087 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \ 00088 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS) 00089 00090 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \ 00091 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS) 00092 00093 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \ 00094 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS) 00095 00096 #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \ 00097 CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS) 00098 00099 #define IOCTL_USB_GET_HUB_CAPABILITIES \ 00100 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS) 00101 00102 #define IOCTL_USB_GET_ROOT_HUB_NAME \ 00103 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00104 00105 #define IOCTL_GET_HCD_DRIVERKEY_NAME \ 00106 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00107 00108 #define IOCTL_USB_GET_NODE_INFORMATION \ 00109 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) 00110 00111 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \ 00112 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) 00113 00114 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \ 00115 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS) 00116 00117 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \ 00118 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00119 00120 #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \ 00121 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00122 00123 #define IOCTL_USB_HCD_DISABLE_PORT \ 00124 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 00125 00126 #define IOCTL_USB_HCD_ENABLE_PORT \ 00127 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 00128 00129 #define IOCTL_USB_HCD_GET_STATS_1 \ 00130 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS) 00131 00132 #define IOCTL_USB_HCD_GET_STATS_2 \ 00133 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS) 00134 00135 00136 typedef struct _USB_HUB_CAPABILITIES { 00137 ULONG HubIs2xCapable : 1; 00138 } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES; 00139 00140 typedef enum _USB_CONNECTION_STATUS { 00141 NoDeviceConnected, 00142 DeviceConnected, 00143 DeviceFailedEnumeration, 00144 DeviceGeneralFailure, 00145 DeviceCausedOvercurrent, 00146 DeviceNotEnoughPower, 00147 DeviceNotEnoughBandwidth, 00148 DeviceHubNestedTooDeeply, 00149 DeviceInLegacyHub 00150 } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS; 00151 00152 #include <pshpack1.h> 00153 00154 typedef struct _USB_DESCRIPTOR_REQUEST { 00155 ULONG ConnectionIndex; 00156 struct { 00157 UCHAR bmRequest; 00158 UCHAR bRequest; 00159 USHORT wValue; 00160 USHORT wIndex; 00161 USHORT wLength; 00162 } SetupPacket; 00163 UCHAR Data[0]; 00164 } USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST; 00165 00166 typedef struct _USB_HCD_DRIVERKEY_NAME { 00167 ULONG ActualLength; 00168 WCHAR DriverKeyName[1]; 00169 } USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME; 00170 00171 typedef struct _HCD_ISO_STAT_COUNTERS { 00172 USHORT LateUrbs; 00173 USHORT DoubleBufferedPackets; 00174 USHORT TransfersCF_5ms; 00175 USHORT TransfersCF_2ms; 00176 USHORT TransfersCF_1ms; 00177 USHORT MaxInterruptLatency; 00178 USHORT BadStartFrame; 00179 USHORT StaleUrbs; 00180 USHORT IsoPacketNotAccesed; 00181 USHORT IsoPacketHWError; 00182 USHORT SmallestUrbPacketCount; 00183 USHORT LargestUrbPacketCount; 00184 USHORT IsoCRC_Error; 00185 USHORT IsoOVERRUN_Error; 00186 USHORT IsoINTERNAL_Error; 00187 USHORT IsoUNKNOWN_Error; 00188 ULONG IsoBytesTransferred; 00189 USHORT LateMissedCount; 00190 USHORT HWIsoMissedCount; 00191 ULONG Reserved7[8]; 00192 } HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS; 00193 00194 typedef struct _HCD_STAT_COUNTERS { 00195 ULONG BytesTransferred; 00196 USHORT IsoMissedCount; 00197 USHORT DataOverrunErrorCount; 00198 USHORT CrcErrorCount; 00199 USHORT ScheduleOverrunCount; 00200 USHORT TimeoutErrorCount; 00201 USHORT InternalHcErrorCount; 00202 USHORT BufferOverrunErrorCount; 00203 USHORT SWErrorCount; 00204 USHORT StallPidCount; 00205 USHORT PortDisableCount; 00206 } HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS; 00207 00208 typedef struct _HCD_STAT_INFORMATION_1 { 00209 ULONG Reserved1; 00210 ULONG Reserved2; 00211 ULONG ResetCounters; 00212 LARGE_INTEGER TimeRead; 00213 HCD_STAT_COUNTERS Counters; 00214 } HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1; 00215 00216 typedef struct _HCD_STAT_INFORMATION_2 { 00217 ULONG Reserved1; 00218 ULONG Reserved2; 00219 ULONG ResetCounters; 00220 LARGE_INTEGER TimeRead; 00221 LONG LockedMemoryUsed; 00222 HCD_STAT_COUNTERS Counters; 00223 HCD_ISO_STAT_COUNTERS IsoCounters; 00224 } HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2; 00225 00226 typedef struct _USB_HUB_INFORMATION { 00227 USB_HUB_DESCRIPTOR HubDescriptor; 00228 BOOLEAN HubIsBusPowered; 00229 } USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION; 00230 00231 typedef struct _USB_HUB_NAME { 00232 ULONG ActualLength; 00233 WCHAR HubName[1]; 00234 } USB_HUB_NAME, *PUSB_HUB_NAME; 00235 00236 typedef enum _USB_HUB_NODE { 00237 UsbHub, 00238 UsbMIParent 00239 } USB_HUB_NODE; 00240 00241 typedef VOID STDCALL 00242 (*USB_IDLE_CALLBACK)( 00243 PVOID Context); 00244 00245 typedef struct _USB_IDLE_CALLBACK_INFO { 00246 USB_IDLE_CALLBACK IdleCallback; 00247 PVOID IdleContext; 00248 } USB_IDLE_CALLBACK_INFO, *PUSB_IDLE_CALLBACK_INFO; 00249 00250 typedef struct _USB_NODE_CONNECTION_ATTRIBUTES { 00251 ULONG ConnectionIndex; 00252 USB_CONNECTION_STATUS ConnectionStatus; 00253 ULONG PortAttributes; 00254 } USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES; 00255 00256 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME { 00257 ULONG ConnectionIndex; 00258 ULONG ActualLength; 00259 WCHAR DriverKeyName[1]; 00260 } USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME; 00261 00262 typedef struct _USB_PIPE_INFO { 00263 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; 00264 ULONG ScheduleOffset; 00265 } USB_PIPE_INFO, *PUSB_PIPE_INFO; 00266 00267 typedef struct _USB_NODE_CONNECTION_INFORMATION { 00268 ULONG ConnectionIndex; 00269 USB_DEVICE_DESCRIPTOR DeviceDescriptor; 00270 UCHAR CurrentConfigurationValue; 00271 BOOLEAN LowSpeed; 00272 BOOLEAN DeviceIsHub; 00273 USHORT DeviceAddress; 00274 ULONG NumberOfOpenPipes; 00275 USB_CONNECTION_STATUS ConnectionStatus; 00276 USB_PIPE_INFO PipeList[0]; 00277 } USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION; 00278 00279 typedef struct _USB_NODE_CONNECTION_NAME { 00280 ULONG ConnectionIndex; 00281 ULONG ActualLength; 00282 WCHAR NodeName[1]; 00283 } USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME; 00284 00285 typedef struct _USB_MI_PARENT_INFORMATION { 00286 ULONG NumberOfInterfaces; 00287 } USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION; 00288 00289 typedef struct _USB_NODE_INFORMATION { 00290 USB_HUB_NODE NodeType; 00291 union { 00292 USB_HUB_INFORMATION HubInformation; 00293 USB_MI_PARENT_INFORMATION MiParentInformation; 00294 } u; 00295 } USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION; 00296 00297 #define WMI_USB_DRIVER_INFORMATION 0 00298 #define WMI_USB_DRIVER_NOTIFICATION 1 00299 #define WMI_USB_POWER_DEVICE_ENABLE 2 00300 00301 typedef enum _USB_NOTIFICATION_TYPE { 00302 EnumerationFailure = 0, 00303 InsufficentBandwidth, 00304 InsufficentPower, 00305 OverCurrent, 00306 ResetOvercurrent, 00307 AcquireBusInfo, 00308 AcquireHubName, 00309 AcquireControllerName, 00310 HubOvercurrent, 00311 HubPowerChange, 00312 HubNestedTooDeeply, 00313 ModernDeviceInLegacyHub 00314 } USB_NOTIFICATION_TYPE; 00315 00316 typedef struct _USB_ACQUIRE_INFO { 00317 USB_NOTIFICATION_TYPE NotificationType; 00318 ULONG TotalSize; 00319 WCHAR Buffer[1]; 00320 } USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO; 00321 00322 typedef struct _USB_NOTIFICATION { 00323 USB_NOTIFICATION_TYPE NotificationType; 00324 } USB_NOTIFICATION, *PUSB_NOTIFICATION; 00325 00326 typedef struct _USB_BUS_NOTIFICATION { 00327 USB_NOTIFICATION_TYPE NotificationType; 00328 ULONG TotalBandwidth; 00329 ULONG ConsumedBandwidth; 00330 ULONG ControllerNameLength; 00331 } USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION; 00332 00333 typedef struct _USB_CONNECTION_NOTIFICATION { 00334 USB_NOTIFICATION_TYPE NotificationType; 00335 ULONG ConnectionNumber; 00336 ULONG RequestedBandwidth; 00337 ULONG EnumerationFailReason; 00338 ULONG PowerRequested; 00339 ULONG HubNameLength; 00340 } USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION; 00341 00342 typedef struct _USB_ROOT_HUB_NAME { 00343 ULONG ActualLength; 00344 WCHAR RootHubName[1]; 00345 } USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME; 00346 00347 #include <poppack.h> 00348 00349 #ifdef __cplusplus 00350 } 00351 #endif 00352 00353 #endif /* __USBIOCTL_H */
Generated on Tue Jul 12 2022 19:59:55 by
1.7.2