home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / usbioctl.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  11KB  |  354 lines

  1. /*
  2.  * usbioctl.h
  3.  *
  4.  * USB IOCTL interface.
  5.  *
  6.  * This file is part of the w32api package.
  7.  *
  8.  * Contributors:
  9.  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10.  *
  11.  * THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  * This source code is offered for use in the public domain. You may
  14.  * use, modify or distribute it freely.
  15.  *
  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.
  20.  *
  21.  */
  22.  
  23. #ifndef __USBIOCTL_H
  24. #define __USBIOCTL_H
  25.  
  26. #if __GNUC__ >=3
  27. #pragma GCC system_header
  28. #endif
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. #include "ntddk.h"
  35. #include "usb100.h"
  36. #include "usbiodef.h"
  37.  
  38. #define USBD_PORT_ENABLED                 1
  39. #define USBD_PORT_CONNECTED               2
  40.  
  41. #define IOCTL_INTERNAL_USB_CYCLE_PORT \
  42.   CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
  43.  
  44. #define IOCTL_INTERNAL_USB_ENABLE_PORT \
  45.   CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
  46.  
  47. #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
  48.   CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
  49.  
  50. #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
  51.   CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
  52.  
  53. #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
  54.   CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  55.  
  56. #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
  57.   CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
  58.  
  59. #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
  60.   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
  61.  
  62. #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
  63.   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  64.  
  65. #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
  66.   CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
  67.  
  68. #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
  69.   CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
  70.  
  71. #define IOCTL_INTERNAL_USB_RESET_PORT \
  72.   CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
  73.  
  74. #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
  75.   CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
  76.  
  77. #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
  78.   CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
  79.  
  80. #define IOCTL_INTERNAL_USB_SUBMIT_URB  \
  81.   CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
  82.  
  83.  
  84. #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
  85.   CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
  86.  
  87. #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
  88.   CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
  89.  
  90. #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
  91.   CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
  92.  
  93. #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
  94.   CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
  95.  
  96. #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
  97.   CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
  98.  
  99. #define IOCTL_USB_GET_HUB_CAPABILITIES \
  100.   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
  101.  
  102. #define IOCTL_USB_GET_ROOT_HUB_NAME \
  103.   CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  104.  
  105. #define IOCTL_GET_HCD_DRIVERKEY_NAME \
  106.   CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  107.  
  108. #define IOCTL_USB_GET_NODE_INFORMATION \
  109.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
  110.  
  111. #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
  112.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
  113.  
  114. #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
  115.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
  116.  
  117. #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
  118.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  119.  
  120. #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
  121.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  122.  
  123. #define IOCTL_USB_HCD_DISABLE_PORT \
  124.   CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
  125.  
  126. #define IOCTL_USB_HCD_ENABLE_PORT \
  127.   CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
  128.  
  129. #define IOCTL_USB_HCD_GET_STATS_1 \
  130.   CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
  131.  
  132. #define IOCTL_USB_HCD_GET_STATS_2 \
  133.   CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
  134.  
  135.  
  136. typedef struct _USB_HUB_CAPABILITIES {
  137.   ULONG  HubIs2xCapable : 1;
  138. } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;
  139.  
  140. typedef enum _USB_CONNECTION_STATUS {
  141.     NoDeviceConnected,
  142.     DeviceConnected,
  143.     DeviceFailedEnumeration,
  144.     DeviceGeneralFailure,
  145.     DeviceCausedOvercurrent,
  146.     DeviceNotEnoughPower,
  147.     DeviceNotEnoughBandwidth,
  148.     DeviceHubNestedTooDeeply,
  149.     DeviceInLegacyHub
  150. } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
  151.  
  152. #include <pshpack1.h>
  153.  
  154. typedef struct _USB_DESCRIPTOR_REQUEST {
  155.     ULONG  ConnectionIndex;
  156.     struct {
  157.         UCHAR  bmRequest;
  158.         UCHAR  bRequest;
  159.         USHORT  wValue;
  160.         USHORT  wIndex;
  161.         USHORT  wLength;
  162.     } SetupPacket;
  163.     UCHAR  Data[0];
  164. } USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST;
  165.  
  166. typedef struct _USB_HCD_DRIVERKEY_NAME {
  167.     ULONG  ActualLength;
  168.     WCHAR  DriverKeyName[1];
  169. } USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;
  170.  
  171. typedef struct _HCD_ISO_STAT_COUNTERS {
  172.     USHORT  LateUrbs;
  173.     USHORT  DoubleBufferedPackets;
  174.     USHORT  TransfersCF_5ms;
  175.     USHORT  TransfersCF_2ms;
  176.     USHORT  TransfersCF_1ms;
  177.     USHORT  MaxInterruptLatency;
  178.     USHORT  BadStartFrame;
  179.     USHORT  StaleUrbs;
  180.     USHORT  IsoPacketNotAccesed;
  181.     USHORT  IsoPacketHWError;
  182.     USHORT  SmallestUrbPacketCount;
  183.     USHORT  LargestUrbPacketCount;
  184.     USHORT  IsoCRC_Error;
  185.     USHORT  IsoOVERRUN_Error;
  186.     USHORT  IsoINTERNAL_Error;
  187.     USHORT  IsoUNKNOWN_Error;
  188.     ULONG  IsoBytesTransferred;
  189.     USHORT  LateMissedCount;
  190.     USHORT  HWIsoMissedCount;
  191.     ULONG  Reserved7[8];
  192. } HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS;
  193.  
  194. typedef struct _HCD_STAT_COUNTERS {
  195.     ULONG  BytesTransferred;
  196.     USHORT  IsoMissedCount;
  197.     USHORT  DataOverrunErrorCount;
  198.     USHORT  CrcErrorCount;
  199.     USHORT  ScheduleOverrunCount;
  200.     USHORT  TimeoutErrorCount;
  201.     USHORT  InternalHcErrorCount;
  202.     USHORT  BufferOverrunErrorCount;
  203.     USHORT  SWErrorCount;
  204.     USHORT  StallPidCount;
  205.     USHORT  PortDisableCount;
  206. } HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS;
  207.  
  208. typedef struct _HCD_STAT_INFORMATION_1 {
  209.     ULONG  Reserved1;
  210.     ULONG  Reserved2;
  211.     ULONG  ResetCounters;
  212.     LARGE_INTEGER  TimeRead;
  213.     HCD_STAT_COUNTERS  Counters;
  214. } HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1;
  215.  
  216. typedef struct _HCD_STAT_INFORMATION_2 {
  217.     ULONG  Reserved1;
  218.     ULONG  Reserved2;
  219.     ULONG  ResetCounters;
  220.     LARGE_INTEGER  TimeRead;
  221.     LONG  LockedMemoryUsed;
  222.     HCD_STAT_COUNTERS  Counters;
  223.     HCD_ISO_STAT_COUNTERS  IsoCounters;
  224. } HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2;
  225.  
  226. typedef struct _USB_HUB_INFORMATION {
  227.     USB_HUB_DESCRIPTOR  HubDescriptor;
  228.     BOOLEAN  HubIsBusPowered;
  229. } USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;
  230.  
  231. typedef struct _USB_HUB_NAME {
  232.     ULONG  ActualLength;
  233.     WCHAR  HubName[1];
  234. } USB_HUB_NAME, *PUSB_HUB_NAME;
  235.  
  236. typedef enum _USB_HUB_NODE {
  237.     UsbHub,
  238.     UsbMIParent
  239. } USB_HUB_NODE;
  240.  
  241. typedef VOID STDCALL
  242. (*USB_IDLE_CALLBACK)(
  243.   PVOID  Context);
  244.  
  245. typedef struct _USB_IDLE_CALLBACK_INFO {
  246.     USB_IDLE_CALLBACK  IdleCallback;
  247.     PVOID  IdleContext;
  248. } USB_IDLE_CALLBACK_INFO, *PUSB_IDLE_CALLBACK_INFO;
  249.  
  250. typedef struct _USB_NODE_CONNECTION_ATTRIBUTES {
  251.     ULONG  ConnectionIndex;
  252.     USB_CONNECTION_STATUS  ConnectionStatus;
  253.     ULONG  PortAttributes;
  254. } USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES;
  255.  
  256. typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME {
  257.     ULONG  ConnectionIndex;
  258.     ULONG  ActualLength;
  259.     WCHAR  DriverKeyName[1];
  260. } USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME;
  261.  
  262. typedef struct _USB_PIPE_INFO {
  263.     USB_ENDPOINT_DESCRIPTOR  EndpointDescriptor;
  264.     ULONG  ScheduleOffset;
  265. } USB_PIPE_INFO, *PUSB_PIPE_INFO;
  266.  
  267. typedef struct _USB_NODE_CONNECTION_INFORMATION {
  268.     ULONG  ConnectionIndex;
  269.     USB_DEVICE_DESCRIPTOR  DeviceDescriptor;
  270.     UCHAR  CurrentConfigurationValue;
  271.     BOOLEAN  LowSpeed;
  272.     BOOLEAN  DeviceIsHub;
  273.     USHORT  DeviceAddress;
  274.     ULONG  NumberOfOpenPipes;
  275.     USB_CONNECTION_STATUS  ConnectionStatus;
  276.     USB_PIPE_INFO  PipeList[0];
  277. } USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;
  278.  
  279. typedef struct _USB_NODE_CONNECTION_NAME {
  280.     ULONG  ConnectionIndex;
  281.     ULONG  ActualLength;
  282.     WCHAR  NodeName[1];
  283. } USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME;
  284.  
  285. typedef struct _USB_MI_PARENT_INFORMATION {
  286.   ULONG  NumberOfInterfaces;
  287. } USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;
  288.  
  289. typedef struct _USB_NODE_INFORMATION {
  290.     USB_HUB_NODE  NodeType;
  291.     union {
  292.         USB_HUB_INFORMATION  HubInformation;
  293.         USB_MI_PARENT_INFORMATION  MiParentInformation;
  294.     } u;
  295. } USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;
  296.  
  297. #define WMI_USB_DRIVER_INFORMATION        0
  298. #define WMI_USB_DRIVER_NOTIFICATION       1
  299. #define WMI_USB_POWER_DEVICE_ENABLE       2
  300.  
  301. typedef enum _USB_NOTIFICATION_TYPE {
  302.     EnumerationFailure = 0,
  303.     InsufficentBandwidth,
  304.     InsufficentPower,
  305.     OverCurrent,
  306.     ResetOvercurrent,
  307.     AcquireBusInfo,
  308.     AcquireHubName,
  309.     AcquireControllerName,
  310.     HubOvercurrent,
  311.     HubPowerChange,
  312.     HubNestedTooDeeply,
  313.     ModernDeviceInLegacyHub
  314. } USB_NOTIFICATION_TYPE;
  315.  
  316. typedef struct _USB_ACQUIRE_INFO {
  317.     USB_NOTIFICATION_TYPE  NotificationType;
  318.     ULONG  TotalSize;
  319.     WCHAR  Buffer[1];
  320. } USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO;
  321.  
  322. typedef struct _USB_NOTIFICATION {
  323.   USB_NOTIFICATION_TYPE  NotificationType;
  324. } USB_NOTIFICATION, *PUSB_NOTIFICATION;
  325.  
  326. typedef struct _USB_BUS_NOTIFICATION {
  327.     USB_NOTIFICATION_TYPE  NotificationType;
  328.     ULONG  TotalBandwidth;
  329.     ULONG  ConsumedBandwidth;
  330.     ULONG  ControllerNameLength;
  331. } USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION;
  332.  
  333. typedef struct _USB_CONNECTION_NOTIFICATION {
  334.     USB_NOTIFICATION_TYPE  NotificationType;
  335.     ULONG  ConnectionNumber;
  336.     ULONG  RequestedBandwidth;     
  337.     ULONG  EnumerationFailReason;
  338.     ULONG  PowerRequested;
  339.     ULONG  HubNameLength;
  340. } USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION;
  341.  
  342. typedef struct _USB_ROOT_HUB_NAME {
  343.     ULONG  ActualLength;
  344.     WCHAR  RootHubName[1];
  345. } USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;
  346.  
  347. #include <poppack.h>
  348.  
  349. #ifdef __cplusplus
  350. }
  351. #endif
  352.  
  353. #endif /* __USBIOCTL_H */
  354.