📄 usbuser.h
字号:
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
USBUSER.H
Abstract:
This file contains USER Mode IOCTLS supported by
the USB PORT or (HC - Host Controller) driver.
Environment:
user mode
Revision History:
--*/
#ifndef __USBUSER_H__
#define __USBUSER_H__
#include "usbiodef.h"
#include <PSHPACK1.H>
#define USBUSER_VERSION 0x00000004
#define IOCTL_USB_USER_REQUEST USB_CTL(HCD_USER_REQUEST)
/*
The following were used by test applications and are no
longer supported (they have been replaced with USBUSER Opcodes):
#define IOCTL_USB_HCD_GET_STATS_1 USB_CTL(HCD_GET_STATS_1)
#define IOCTL_USB_HCD_GET_STATS_2 USB_CTL(HCD_GET_STATS_2)
#define IOCTL_USB_HCD_DISABLE_PORT USB_CTL(HCD_DISABLE_PORT)
#define IOCTL_USB_HCD_ENABLE_PORT USB_CTL(HCD_ENABLE_PORT)
*/
/*
The following are used by the 'USBDIAG' driver
*/
#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
/*
define error codes
*/
typedef enum _USB_USER_ERROR_CODE {
UsbUserSuccess = 0,
UsbUserNotSupported,
UsbUserInvalidRequestCode,
UsbUserFeatureDisabled,
UsbUserInvalidHeaderParameter,
UsbUserInvalidParameter,
UsbUserMiniportError,
UsbUserBufferTooSmall,
UsbUserErrorNotMapped,
UsbUserDeviceNotStarted,
UsbUserNoDeviceConnected
} USB_USER_ERROR_CODE;
/*
define USB USER request Codes
*/
/*
The following APIS are enabled always
*/
#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
/*
The following APIs are only enabled when the
devlopr key is set in the registry.
*/
#define USBUSER_OP_SEND_ONE_PACKET 0x10000001
/*
The following APIs are only enabled when the
root hub is disabled.
*/
#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
/*
Common Header used by all USBUSER APIS
*/
typedef struct _USBUSER_REQUEST_HEADER {
/*
API Requested
*/
ULONG UsbUserRequest;
/*
status code returned by port driver
*/
USB_USER_ERROR_CODE UsbUserStatusCode;
/*
size of client input/output buffer
we always use the same buffer for input
and output
*/
ULONG RequestBufferLength;
/*
size of buffer required to get all of the data
*/
ULONG ActualBufferLength;
} USBUSER_REQUEST_HEADER, *PUSBUSER_REQUEST_HEADER;
/*****************************************************
API - Send a single usb packet on the bus
USBUSER_OP_SEND_ONE_PACKET
This API is used to implement the 'single step'
USB transaction development tool.
*******************************************************/
/*
transaction speed
*/
#define USB_PACKETFLAG_LOW_SPEED 0x00000001
#define USB_PACKETFLAG_FULL_SPEED 0x00000002
#define USB_PACKETFLAG_HIGH_SPEED 0x00000004
/*
transaction type async(bulk, control, interrupt) or iso
*/
#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
/*
transaction data toggle
*/
#define USB_PACKETFLAG_TOGGLE0 0x00000100
#define USB_PACKETFLAG_TOGGLE1 0x00000200
typedef struct _PACKET_PARAMETERS {
UCHAR DeviceAddress;
UCHAR EndpointAddress;
USHORT MaximumPacketSize;
/* timeout in ms, zero means default */
/* default timeout is 10 ms */
ULONG Timeout;
ULONG Flags;
ULONG DataLength;
/* for 2.0 hubs */
USHORT HubDeviceAddress;
USHORT PortTTNumber;
UCHAR ErrorCount;
UCHAR Pad[3];
USBD_STATUS UsbdStatusCode;
UCHAR Data[4];
} PACKET_PARAMETERS, *PPACKET_PARAMETERS;
typedef struct _USBUSER_SEND_ONE_PACKET {
USBUSER_REQUEST_HEADER Header;
PACKET_PARAMETERS PacketParameters;
} USBUSER_SEND_ONE_PACKET, *PUSBUSER_SEND_ONE_PACKET;
/*****************************************************
API - Test Reset Root Port
USBUSER_OP_RAW_RESET_PORT
******************************************************/
typedef struct _RAW_RESET_PORT_PARAMETERS {
USHORT PortNumber;
USHORT PortStatus;
} RAW_RESET_PORT_PARAMETERS, *PRAW_RESET_PORT_PARAMETERS;
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;
/****************************************************
API - Get Controller Information
Return some information about the controller
USBUSER_GET_CONTROLLER_INFO_0
****************************************************/
/* these flags indicate features of the HC */
#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_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;
/****************************************************
API - Get Controller Driver Key
Returns the driver key in the registry associated
with this controller.
The key is returned NULL terminated, KeyLength
is the length of the key in bytes including the
UNICODE_NULL
USBUSER_GET_CONTROLLER_DRIVER_KEY
API - Get Root Hub Name
The following structure is used to return unicode
names from the port driver
****************************************************/
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;
/****************************************************
API - PassThru
allows for vendor specific APIs to be passed to
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -