home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / ddk / usbioctl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  10.4 KB  |  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. #pragma pack(push,4)
  35.  
  36. #include "ntddk.h"
  37. #include "usb100.h"
  38. #include "usbiodef.h"
  39.  
  40. #define USBD_PORT_ENABLED                 1
  41. #define USBD_PORT_CONNECTED               2
  42.  
  43. #define IOCTL_INTERNAL_USB_CYCLE_PORT \
  44.   CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
  45.  
  46. #define IOCTL_INTERNAL_USB_ENABLE_PORT \
  47.   CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
  48.  
  49. #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
  50.   CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
  51.  
  52. #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
  53.   CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
  54.  
  55. #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
  56.   CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  57.  
  58. #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
  59.   CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
  60.  
  61. #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
  62.   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
  63.  
  64. #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
  65.   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  66.  
  67. #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
  68.   CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
  69.  
  70. #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
  71.   CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
  72.  
  73. #define IOCTL_INTERNAL_USB_RESET_PORT \
  74.   CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
  75.  
  76. #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
  77.   CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
  78.  
  79. #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
  80.   CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
  81.  
  82. #define IOCTL_INTERNAL_USB_SUBMIT_URB  \
  83.   CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
  84.  
  85.  
  86. #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
  87.   CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
  88.  
  89. #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
  90.   CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
  91.  
  92. #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
  93.   CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
  94.  
  95. #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
  96.   CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
  97.  
  98. #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
  99.   CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
  100.  
  101. #define IOCTL_USB_GET_HUB_CAPABILITIES \
  102.   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
  103.  
  104. #define IOCTL_USB_GET_ROOT_HUB_NAME \
  105.   CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  106.  
  107. #define IOCTL_GET_HCD_DRIVERKEY_NAME \
  108.   CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  109.  
  110. #define IOCTL_USB_GET_NODE_INFORMATION \
  111.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
  112.  
  113. #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
  114.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
  115.  
  116. #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
  117.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
  118.  
  119. #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
  120.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  121.  
  122. #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
  123.   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
  124.  
  125. #define IOCTL_USB_HCD_DISABLE_PORT \
  126.   CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
  127.  
  128. #define IOCTL_USB_HCD_ENABLE_PORT \
  129.   CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
  130.  
  131. #define IOCTL_USB_HCD_GET_STATS_1 \
  132.   CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
  133.  
  134. #define IOCTL_USB_HCD_GET_STATS_2 \
  135.   CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
  136.  
  137.  
  138. typedef struct _USB_HUB_CAPABILITIES {
  139.   ULONG  HubIs2xCapable : 1;
  140. } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;
  141.  
  142. typedef enum _USB_CONNECTION_STATUS {
  143.     NoDeviceConnected,
  144.     DeviceConnected,
  145.     DeviceFailedEnumeration,
  146.     DeviceGeneralFailure,
  147.     DeviceCausedOvercurrent,
  148.     DeviceNotEnoughPower,
  149.     DeviceNotEnoughBandwidth,
  150.     DeviceHubNestedTooDeeply,
  151.     DeviceInLegacyHub
  152. } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
  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. #pragma pack(pop)
  348.  
  349. #ifdef __cplusplus
  350. }
  351. #endif
  352.  
  353. #endif /* __USBIOCTL_H */
  354.