/* * usbuser.h * * USB user mode IOCTL interface * * This file is part of the w32api package. * * Contributors: * Created by Casper S. Hornstrup * * 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. * */ #ifndef __USBUSER_H #define __USBUSER_H #if __GNUC__ >=3 #pragma GCC system_header #endif #ifdef __cplusplus extern "C" { #endif #include "ntddk.h" #include "usb.h" #include "usbiodef.h" #include #define USBUSER_VERSION 0x0004 #define IOCTL_USB_USER_REQUEST USB_CTL(HCD_USER_REQUEST) #ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON #define IOCTL_USB_DIAGNOSTIC_MODE_ON USB_CTL(HCD_DIAGNOSTIC_MODE_ON) #endif #ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF #define IOCTL_USB_DIAGNOSTIC_MODE_OFF USB_CTL(HCD_DIAGNOSTIC_MODE_OFF) #endif #ifndef IOCTL_USB_GET_ROOT_HUB_NAME #define IOCTL_USB_GET_ROOT_HUB_NAME USB_CTL(HCD_GET_ROOT_HUB_NAME) #endif #ifndef IOCTL_GET_HCD_DRIVERKEY_NAME #define IOCTL_GET_HCD_DRIVERKEY_NAME USB_CTL(HCD_GET_DRIVERKEY_NAME) #endif typedef enum _USB_USER_ERROR_CODE { UsbUserSuccess = 0, UsbUserNotSupported, UsbUserInvalidRequestCode, UsbUserFeatureDisabled, UsbUserInvalidHeaderParameter, UsbUserInvalidParameter, UsbUserMiniportError, UsbUserBufferTooSmall, UsbUserErrorNotMapped, UsbUserDeviceNotStarted, UsbUserNoDeviceConnected } USB_USER_ERROR_CODE; #define USBUSER_GET_CONTROLLER_INFO_0 0x00000001 #define USBUSER_GET_CONTROLLER_DRIVER_KEY 0x00000002 #define USBUSER_PASS_THRU 0x00000003 #define USBUSER_GET_POWER_STATE_MAP 0x00000004 #define USBUSER_GET_BANDWIDTH_INFORMATION 0x00000005 #define USBUSER_GET_BUS_STATISTICS_0 0x00000006 #define USBUSER_GET_ROOTHUB_SYMBOLIC_NAME 0x00000007 #define USBUSER_GET_USB_DRIVER_VERSION 0x00000008 #define USBUSER_GET_USB2_HW_VERSION 0x00000009 #define USBUSER_OP_SEND_ONE_PACKET 0x10000001 #define USBUSER_OP_RAW_RESET_PORT 0x20000001 #define USBUSER_OP_OPEN_RAW_DEVICE 0x20000002 #define USBUSER_OP_CLOSE_RAW_DEVICE 0x20000003 #define USBUSER_OP_SEND_RAW_COMMAND 0x20000004 #define USBUSER_INVALID_REQUEST 0xFFFFFFF0 #define USBUSER_OP_MASK_DEVONLY_API 0x10000000 #define USBUSER_OP_MASK_HCTEST_API 0x20000000 #define USB_PACKETFLAG_LOW_SPEED 0x00000001 #define USB_PACKETFLAG_FULL_SPEED 0x00000002 #define USB_PACKETFLAG_HIGH_SPEED 0x00000004 #define USB_PACKETFLAG_ASYNC_IN 0x00000008 #define USB_PACKETFLAG_ASYNC_OUT 0x00000010 #define USB_PACKETFLAG_ISO_IN 0x00000020 #define USB_PACKETFLAG_ISO_OUT 0x00000040 #define USB_PACKETFLAG_SETUP 0x00000080 #define USB_PACKETFLAG_TOGGLE0 0x00000100 #define USB_PACKETFLAG_TOGGLE1 0x00000200 typedef struct _PACKET_PARAMETERS { UCHAR DeviceAddress; UCHAR EndpointAddress; USHORT MaximumPacketSize; ULONG Timeout; ULONG Flags; ULONG DataLength; USHORT HubDeviceAddress; USHORT PortTTNumber; UCHAR ErrorCount; UCHAR Pad[3]; USBD_STATUS UsbdStatusCode; UCHAR Data[4]; } PACKET_PARAMETERS, *PPACKET_PARAMETERS; typedef struct _RAW_RESET_PORT_PARAMETERS { USHORT PortNumber; USHORT PortStatus; } RAW_RESET_PORT_PARAMETERS, *PRAW_RESET_PORT_PARAMETERS; typedef struct _USB_BANDWIDTH_INFO { ULONG DeviceCount; ULONG TotalBusBandwidth; ULONG Total32secBandwidth; ULONG AllocedBulkAndControl; ULONG AllocedIso; ULONG AllocedInterrupt_1ms; ULONG AllocedInterrupt_2ms; ULONG AllocedInterrupt_4ms; ULONG AllocedInterrupt_8ms; ULONG AllocedInterrupt_16ms; ULONG AllocedInterrupt_32ms; } USB_BANDWIDTH_INFO, *PUSB_BANDWIDTH_INFO; typedef struct _USBUSER_REQUEST_HEADER { ULONG UsbUserRequest; USB_USER_ERROR_CODE UsbUserStatusCode; ULONG RequestBufferLength; ULONG ActualBufferLength; } USBUSER_REQUEST_HEADER, *PUSBUSER_REQUEST_HEADER; typedef struct _USBUSER_BANDWIDTH_INFO_REQUEST { USBUSER_REQUEST_HEADER Header; USB_BANDWIDTH_INFO BandwidthInformation; } USBUSER_BANDWIDTH_INFO_REQUEST, *PUSBUSER_BANDWIDTH_INFO_REQUEST; typedef struct _USB_BUS_STATISTICS_0 { ULONG DeviceCount; LARGE_INTEGER CurrentSystemTime; ULONG CurrentUsbFrame; ULONG BulkBytes; ULONG IsoBytes; ULONG InterruptBytes; ULONG ControlDataBytes; ULONG PciInterruptCount; ULONG HardResetCount; ULONG WorkerSignalCount; ULONG CommonBufferBytes; ULONG WorkerIdleTimeMs; BOOLEAN RootHubEnabled; UCHAR RootHubDevicePowerState; UCHAR Unused; UCHAR NameIndex; } USB_BUS_STATISTICS_0, *PUSB_BUS_STATISTICS_0; typedef struct _USBUSER_BUS_STATISTICS_0_REQUEST { USBUSER_REQUEST_HEADER Header; USB_BUS_STATISTICS_0 BusStatistics0; } USBUSER_BUS_STATISTICS_0_REQUEST, *PUSBUSER_BUS_STATISTICS_0_REQUEST; /* USB_CONTROLLER_INFO_0.HcFeatureFlags constants */ #define USB_HC_FEATURE_FLAG_PORT_POWER_SWITCHING 0x00000001 #define USB_HC_FEATURE_FLAG_SEL_SUSPEND 0x00000002 #define USB_HC_FEATURE_LEGACY_BIOS 0x00000004 typedef struct _USB_CLOSE_RAW_DEVICE_PARAMETERS { ULONG xxx; } USB_CLOSE_RAW_DEVICE_PARAMETERS , *PUSB_CLOSE_RAW_DEVICE_PARAMETERS; typedef struct _USBUSER_CLOSE_RAW_DEVICE { USBUSER_REQUEST_HEADER Header; USB_CLOSE_RAW_DEVICE_PARAMETERS Parameters; } USBUSER_CLOSE_RAW_DEVICE, *PUSBUSER_CLOSE_RAW_DEVICE; typedef struct _USB_CONTROLLER_INFO_0 { ULONG PciVendorId; ULONG PciDeviceId; ULONG PciRevision; ULONG NumberOfRootPorts; USB_CONTROLLER_FLAVOR ControllerFlavor; ULONG HcFeatureFlags; } USB_CONTROLLER_INFO_0 , *PUSB_CONTROLLER_INFO_0; typedef struct _USBUSER_CONTROLLER_INFO_0 { USBUSER_REQUEST_HEADER Header; USB_CONTROLLER_INFO_0 Info0; } USBUSER_CONTROLLER_INFO_0, *PUSBUSER_CONTROLLER_INFO_0; typedef struct _USB_DRIVER_VERSION_PARAMETERS { ULONG DriverTrackingCode; ULONG USBDI_Version; ULONG USBUSER_Version; BOOLEAN CheckedPortDriver; BOOLEAN CheckedMiniportDriver; USHORT USB_Version; } USB_DRIVER_VERSION_PARAMETERS , *PUSB_DRIVER_VERSION_PARAMETERS; typedef struct _USBUSER_GET_DRIVER_VERSION { USBUSER_REQUEST_HEADER Header; USB_DRIVER_VERSION_PARAMETERS Parameters; } USBUSER_GET_DRIVER_VERSION, *PUSBUSER_GET_DRIVER_VERSION; typedef struct _USB_OPEN_RAW_DEVICE_PARAMETERS { USHORT PortStatus; USHORT MaxPacketEp0; } USB_OPEN_RAW_DEVICE_PARAMETERS , *PUSB_OPEN_RAW_DEVICE_PARAMETERS; typedef struct _USBUSER_OPEN_RAW_DEVICE { USBUSER_REQUEST_HEADER Header; USB_OPEN_RAW_DEVICE_PARAMETERS Parameters; } USBUSER_OPEN_RAW_DEVICE, *PUSBUSER_OPEN_RAW_DEVICE; typedef enum _WDMUSB_POWER_STATE { WdmUsbPowerNotMapped = 0, WdmUsbPowerSystemUnspecified = 100, WdmUsbPowerSystemWorking, WdmUsbPowerSystemSleeping1, WdmUsbPowerSystemSleeping2, WdmUsbPowerSystemSleeping3, WdmUsbPowerSystemHibernate, WdmUsbPowerSystemShutdown, WdmUsbPowerDeviceUnspecified = 200, WdmUsbPowerDeviceD0, WdmUsbPowerDeviceD1, WdmUsbPowerDeviceD2, WdmUsbPowerDeviceD3 } WDMUSB_POWER_STATE; typedef struct _USB_POWER_INFO { WDMUSB_POWER_STATE SystemState; WDMUSB_POWER_STATE HcDevicePowerState; WDMUSB_POWER_STATE HcDeviceWake; WDMUSB_POWER_STATE HcSystemWake; WDMUSB_POWER_STATE RhDevicePowerState; WDMUSB_POWER_STATE RhDeviceWake; WDMUSB_POWER_STATE RhSystemWake; WDMUSB_POWER_STATE LastSystemSleepState; BOOLEAN CanWakeup; BOOLEAN IsPowered; } USB_POWER_INFO, *PUSB_POWER_INFO; typedef struct _USBUSER_POWER_INFO_REQUEST { USBUSER_REQUEST_HEADER Header; USB_POWER_INFO PowerInformation; } USBUSER_POWER_INFO_REQUEST, *PUSBUSER_POWER_INFO_REQUEST; typedef struct _USB_UNICODE_NAME { ULONG Length; WCHAR String[1]; } USB_UNICODE_NAME, *PUSB_UNICODE_NAME; typedef struct _USBUSER_CONTROLLER_UNICODE_NAME { USBUSER_REQUEST_HEADER Header; USB_UNICODE_NAME UnicodeName; } USBUSER_CONTROLLER_UNICODE_NAME, *PUSBUSER_CONTROLLER_UNICODE_NAME; typedef struct _USB_PASS_THRU_PARAMETERS { GUID FunctionGUID; ULONG ParameterLength; UCHAR Parameters[4]; } USB_PASS_THRU_PARAMETERS, *PUSB_PASS_THRU_PARAMETERS; typedef struct _USBUSER_PASS_THRU_REQUEST { USBUSER_REQUEST_HEADER Header; USB_PASS_THRU_PARAMETERS PassThru; } USBUSER_PASS_THRU_REQUEST, *PUSBUSER_PASS_THRU_REQUEST; typedef struct _USBUSER_RAW_RESET_ROOT_PORT { USBUSER_REQUEST_HEADER Header; RAW_RESET_PORT_PARAMETERS Parameters; } USBUSER_RAW_RESET_ROOT_PORT, *PUSBUSER_RAW_RESET_ROOT_PORT; typedef struct _USBUSER_SEND_ONE_PACKET { USBUSER_REQUEST_HEADER Header; PACKET_PARAMETERS PacketParameters; } USBUSER_SEND_ONE_PACKET, *PUSBUSER_SEND_ONE_PACKET; typedef struct _USB_SEND_RAW_COMMAND_PARAMETERS { UCHAR Usb_bmRequest; UCHAR Usb_bRequest; USHORT Usb_wVlaue; USHORT Usb_wIndex; USHORT Usb_wLength; USHORT DeviceAddress; USHORT MaximumPacketSize; ULONG Timeout; ULONG DataLength; USBD_STATUS UsbdStatusCode; UCHAR Data[4]; } USB_SEND_RAW_COMMAND_PARAMETERS, *PUSB_SEND_RAW_COMMAND_PARAMETERS; typedef struct _USBUSER_SEND_RAW_COMMAND { USBUSER_REQUEST_HEADER Header; USB_SEND_RAW_COMMAND_PARAMETERS Parameters; } USBUSER_SEND_RAW_COMMAND, *PUSBUSER_SEND_RAW_COMMAND; /* USB_USB2HW_VERSION_PARAMETERS.Usb2HwRevision constants */ #define USB2HW_UNKNOWN 0x00 #define USB2HW_A0 0xA0 #define USB2HW_A1 0xA1 #define USB2HW_B0 0xB0 typedef struct _USB_USB2HW_VERSION_PARAMETERS { UCHAR Usb2HwRevision; } USB_USB2HW_VERSION_PARAMETERS, *PUSB_USB2HW_VERSION_PARAMETERS; typedef struct _USBUSER_GET_USB2HW_VERSION { USBUSER_REQUEST_HEADER Header; USB_USB2HW_VERSION_PARAMETERS Parameters; } USBUSER_GET_USB2HW_VERSION, *PUSBUSER_GET_USB2HW_VERSION; #include #ifdef __cplusplus } #endif #endif /* __USBUSER_H */