|
|
|
@@ -0,0 +1,705 @@
|
|
|
|
|
use shared::basetsd::ULONG64;
|
|
|
|
|
use shared::guiddef::GUID;
|
|
|
|
|
use shared::minwindef::{DWORD, UCHAR, ULONG, USHORT};
|
|
|
|
|
use shared::ntdef::{BOOLEAN, HANDLE, LARGE_INTEGER, LONG, NTSTATUS, PWCHAR, WCHAR};
|
|
|
|
|
use shared::usb::USBD_STATUS;
|
|
|
|
|
use shared::usbiodef::{
|
|
|
|
|
FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, HCD_DIAGNOSTIC_MODE_ON, HCD_DISABLE_PORT,
|
|
|
|
|
HCD_ENABLE_PORT, HCD_GET_DRIVERKEY_NAME, HCD_GET_ROOT_HUB_NAME, HCD_GET_STATS_1,
|
|
|
|
|
HCD_GET_STATS_2, USB_CYCLE_PORT, USB_DIAG_IGNORE_HUBS_OFF, USB_DIAG_IGNORE_HUBS_ON,
|
|
|
|
|
USB_ENABLE_PORT, USB_FAIL_GET_STATUS, USB_GET_BUSGUID_INFO, USB_GET_BUS_INFO,
|
|
|
|
|
USB_GET_CONTROLLER_NAME, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION,
|
|
|
|
|
USB_GET_DEVICE_CHARACTERISTICS, USB_GET_DEVICE_HANDLE, USB_GET_DEVICE_HANDLE_EX,
|
|
|
|
|
USB_GET_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC, USB_GET_HUB_CAPABILITIES,
|
|
|
|
|
USB_GET_HUB_CAPABILITIES_EX, USB_GET_HUB_CONFIG_INFO, USB_GET_HUB_COUNT,
|
|
|
|
|
USB_GET_HUB_INFORMATION_EX, USB_GET_HUB_NAME, USB_GET_NODE_CONNECTION_ATTRIBUTES,
|
|
|
|
|
USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, USB_GET_NODE_CONNECTION_INFORMATION,
|
|
|
|
|
USB_GET_NODE_CONNECTION_INFORMATION_EX, USB_GET_NODE_CONNECTION_INFORMATION_EX_V2,
|
|
|
|
|
USB_GET_NODE_CONNECTION_NAME, USB_GET_NODE_INFORMATION, USB_GET_PARENT_HUB_INFO,
|
|
|
|
|
USB_GET_PORT_CONNECTOR_PROPERTIES, USB_GET_PORT_STATUS, USB_GET_ROOTHUB_PDO,
|
|
|
|
|
USB_GET_TOPOLOGY_ADDRESS, USB_GET_TRANSPORT_CHARACTERISTICS, USB_GET_TT_DEVICE_HANDLE,
|
|
|
|
|
USB_HUB_CYCLE_PORT, USB_IDLE_NOTIFICATION, USB_IDLE_NOTIFICATION_EX,
|
|
|
|
|
USB_NOTIFY_ON_TRANSPORT_CHARACTERISTICS_CHANGE, USB_RECORD_FAILURE,
|
|
|
|
|
USB_REGISTER_COMPOSITE_DEVICE, USB_REGISTER_FOR_TRANSPORT_CHARACTERISTICS_CHANGE,
|
|
|
|
|
USB_REQUEST_REMOTE_WAKE_NOTIFICATION, USB_REQ_GLOBAL_RESUME, USB_REQ_GLOBAL_SUSPEND,
|
|
|
|
|
USB_RESET_HUB, USB_RESET_PORT, USB_START_TRACKING_FOR_TIME_SYNC,
|
|
|
|
|
USB_STOP_TRACKING_FOR_TIME_SYNC, USB_SUBMIT_URB, USB_UNREGISTER_COMPOSITE_DEVICE,
|
|
|
|
|
USB_UNREGISTER_FOR_TRANSPORT_CHARACTERISTICS_CHANGE,
|
|
|
|
|
};
|
|
|
|
|
use shared::usbspec::{
|
|
|
|
|
USB_30_HUB_DESCRIPTOR, USB_CONFIGURATION_DESCRIPTOR, USB_DEVICE_DESCRIPTOR, USB_DEVICE_SPEED,
|
|
|
|
|
USB_ENDPOINT_DESCRIPTOR, USB_HUB_DESCRIPTOR,
|
|
|
|
|
};
|
|
|
|
|
use um::winioctl::{FILE_ANY_ACCESS, FILE_DEVICE_USBEX, METHOD_BUFFERED, METHOD_NEITHER};
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_SUBMIT_URB: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_RESET_PORT: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const USBD_PORT_ENABLED: DWORD = 0x00000001;
|
|
|
|
|
pub const USBD_PORT_CONNECTED: DWORD = 0x00000002;
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_PORT_STATUS: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_ENABLE_PORT: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_HUB_COUNT: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_CYCLE_PORT: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_HUB_NAME: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_BUS_INFO: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_BUSGUID_INFO: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_NOTIFY_IDLE_READY: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION_EX, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_REQ_GLOBAL_SUSPEND: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_REQ_GLOBAL_SUSPEND, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_REQ_GLOBAL_RESUME: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_REQ_GLOBAL_RESUME, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
STRUCT!{struct USB_START_FAILDATA {
|
|
|
|
|
LengthInBytes: ULONG,
|
|
|
|
|
NtStatus: NTSTATUS,
|
|
|
|
|
UsbdStatus: USBD_STATUS,
|
|
|
|
|
ConnectStatus: ULONG,
|
|
|
|
|
DriverData: [UCHAR; 4],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_START_FAILDATA = *mut USB_START_FAILDATA;
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_RECORD_FAILURE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_RECORD_FAILURE, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE_EX: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE_EX, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_TT_DEVICE_HANDLE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_TT_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
STRUCT!{struct USB_TOPOLOGY_ADDRESS {
|
|
|
|
|
PciBusNumber: ULONG,
|
|
|
|
|
PciDeviceNumber: ULONG,
|
|
|
|
|
PciFunctionNumber: ULONG,
|
|
|
|
|
Reserved: ULONG,
|
|
|
|
|
RootHubPortNumber: USHORT,
|
|
|
|
|
HubPortNumber: [USHORT; 5],
|
|
|
|
|
Reserved2: USHORT,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_TOPOLOGY_ADDRESS = *mut USB_TOPOLOGY_ADDRESS;
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_TOPOLOGY_ADDRESS: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_TOPOLOGY_ADDRESS, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_GET_DEVICE_CONFIG_INFO: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_HUB_CONFIG_INFO, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USBEX, USB_REGISTER_COMPOSITE_DEVICE, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USBEX, USB_UNREGISTER_COMPOSITE_DEVICE, METHOD_NEITHER,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USBEX, USB_REQUEST_REMOTE_WAKE_NOTIFICATION, METHOD_NEITHER,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_INTERNAL_USB_FAIL_GET_STATUS_FROM_DEVICE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_FAIL_GET_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_HCD_GET_STATS_1: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_HCD_GET_STATS_2: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_HCD_DISABLE_PORT: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_HCD_ENABLE_PORT: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_DIAGNOSTIC_MODE_ON: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_DIAGNOSTIC_MODE_OFF: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_ROOT_HUB_NAME: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_GET_HCD_DRIVERKEY_NAME: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_NODE_INFORMATION: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_NODE_CONNECTION_INFORMATION: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_NODE_CONNECTION_NAME: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_DIAG_IGNORE_HUBS_ON: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_DIAG_IGNORE_HUBS_OFF: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_HUB_CAPABILITIES: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_HUB_CYCLE_PORT: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_HUB_CYCLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_RESET_HUB: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_RESET_HUB, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_HUB_CAPABILITIES_EX: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_HUB_INFORMATION_EX: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_HUB_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_PORT_CONNECTOR_PROPERTIES: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_PORT_CONNECTOR_PROPERTIES, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX_V2, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_TRANSPORT_CHARACTERISTICS: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_TRANSPORT_CHARACTERISTICS, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_REGISTER_FOR_TRANSPORT_CHARACTERISTICS_CHANGE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_REGISTER_FOR_TRANSPORT_CHARACTERISTICS_CHANGE,
|
|
|
|
|
METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_NOTIFY_ON_TRANSPORT_CHARACTERISTICS_CHANGE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_NOTIFY_ON_TRANSPORT_CHARACTERISTICS_CHANGE, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_UNREGISTER_FOR_TRANSPORT_CHARACTERISTICS_CHANGE: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_UNREGISTER_FOR_TRANSPORT_CHARACTERISTICS_CHANGE,
|
|
|
|
|
METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_START_TRACKING_FOR_TIME_SYNC: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_START_TRACKING_FOR_TIME_SYNC, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_STOP_TRACKING_FOR_TIME_SYNC: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_STOP_TRACKING_FOR_TIME_SYNC, METHOD_BUFFERED,
|
|
|
|
|
FILE_ANY_ACCESS);
|
|
|
|
|
pub const IOCTL_USB_GET_DEVICE_CHARACTERISTICS: DWORD
|
|
|
|
|
= CTL_CODE!(FILE_DEVICE_USB, USB_GET_DEVICE_CHARACTERISTICS, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
|
|
|
|
ENUM!{enum USB_HUB_NODE {
|
|
|
|
|
UsbHub,
|
|
|
|
|
UsbMIParent,
|
|
|
|
|
}}
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_HUB_INFORMATION {
|
|
|
|
|
HubDescriptor: USB_HUB_DESCRIPTOR,
|
|
|
|
|
HubIsBusPowered: BOOLEAN,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_HUB_INFORMATION = *mut USB_HUB_INFORMATION;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_MI_PARENT_INFORMATION {
|
|
|
|
|
NumberOfInterfaces: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_MI_PARENT_INFORMATION = *mut USB_MI_PARENT_INFORMATION;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_NODE_INFORMATION {
|
|
|
|
|
NodeType: USB_HUB_NODE,
|
|
|
|
|
u: USB_NODE_INFORMATION_u,
|
|
|
|
|
}}
|
|
|
|
|
UNION!{union USB_NODE_INFORMATION_u {
|
|
|
|
|
[u8; 72],
|
|
|
|
|
HubInformation HubInformation_mut: USB_HUB_INFORMATION,
|
|
|
|
|
MiParentInformation MiParentInformation_mut: USB_MI_PARENT_INFORMATION,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_NODE_INFORMATION = *mut USB_NODE_INFORMATION;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_PIPE_INFO {
|
|
|
|
|
EndpointDescriptor: USB_ENDPOINT_DESCRIPTOR,
|
|
|
|
|
ScheduleOffset: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_PIPE_INFO = *mut USB_PIPE_INFO;
|
|
|
|
|
ENUM!{enum USB_CONNECTION_STATUS {
|
|
|
|
|
NoDeviceConnected,
|
|
|
|
|
DeviceConnected,
|
|
|
|
|
DeviceFailedEnumeration,
|
|
|
|
|
DeviceGeneralFailure,
|
|
|
|
|
DeviceCausedOvercurrent,
|
|
|
|
|
DeviceNotEnoughPower,
|
|
|
|
|
DeviceNotEnoughBandwidth,
|
|
|
|
|
DeviceHubNestedTooDeeply,
|
|
|
|
|
DeviceInLegacyHub,
|
|
|
|
|
DeviceEnumerating,
|
|
|
|
|
DeviceReset,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_CONNECTION_STATUS = *mut USB_CONNECTION_STATUS;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_NODE_CONNECTION_INFORMATION {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
DeviceDescriptor: USB_DEVICE_DESCRIPTOR,
|
|
|
|
|
CurrentConfigurationValue: UCHAR,
|
|
|
|
|
LowSpeed: BOOLEAN,
|
|
|
|
|
DeviceIsHub: BOOLEAN,
|
|
|
|
|
DeviceAddress: USHORT,
|
|
|
|
|
NumberOfOpenPipes: ULONG,
|
|
|
|
|
ConnectionStatus: USB_CONNECTION_STATUS,
|
|
|
|
|
PipeList: [USB_PIPE_INFO; 0],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_NODE_CONNECTION_INFORMATION = *mut USB_NODE_CONNECTION_INFORMATION;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_NODE_CONNECTION_DRIVERKEY_NAME {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
ActualLength: ULONG,
|
|
|
|
|
DriverKeyName: [WCHAR; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_NODE_CONNECTION_DRIVERKEY_NAME = *mut USB_NODE_CONNECTION_DRIVERKEY_NAME;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_NODE_CONNECTION_NAME {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
ActualLength: ULONG,
|
|
|
|
|
NodeName: [WCHAR; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_NODE_CONNECTION_NAME = *mut USB_NODE_CONNECTION_NAME;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_HUB_NAME {
|
|
|
|
|
ActualLength: ULONG,
|
|
|
|
|
HubName: [WCHAR; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_HUB_NAME = *mut USB_HUB_NAME;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_ROOT_HUB_NAME {
|
|
|
|
|
ActualLength: ULONG,
|
|
|
|
|
RootHubName: [WCHAR; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_ROOT_HUB_NAME = *mut USB_ROOT_HUB_NAME;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_HCD_DRIVERKEY_NAME {
|
|
|
|
|
ActualLength: ULONG,
|
|
|
|
|
DriverKeyName: [WCHAR; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_HCD_DRIVERKEY_NAME = *mut USB_HCD_DRIVERKEY_NAME;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_DESCRIPTOR_REQUEST {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
SetupPacket: USB_DESCRIPTOR_REQUEST_SetupPacket,
|
|
|
|
|
Data: [UCHAR; 0],
|
|
|
|
|
}}
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_DESCRIPTOR_REQUEST_SetupPacket {
|
|
|
|
|
bmRequest: UCHAR,
|
|
|
|
|
bRequest: UCHAR,
|
|
|
|
|
wValue: USHORT,
|
|
|
|
|
wIndex: USHORT,
|
|
|
|
|
wLength: USHORT,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_DESCRIPTOR_REQUEST = *mut USB_DESCRIPTOR_REQUEST;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_HUB_CAPABILITIES {
|
|
|
|
|
bitfield: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
BITFIELD!{USB_HUB_CAPABILITIES bitfield: ULONG [
|
|
|
|
|
HubIs2xCapable set_HubIs2xCapable[0..1],
|
|
|
|
|
]}
|
|
|
|
|
pub type PUSB_HUB_CAPABILITIES = *mut USB_HUB_CAPABILITIES;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_NODE_CONNECTION_ATTRIBUTES {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
ConnectionStatus: USB_CONNECTION_STATUS,
|
|
|
|
|
PortAttributes: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_NODE_CONNECTION_ATTRIBUTES = *mut USB_NODE_CONNECTION_ATTRIBUTES;
|
|
|
|
|
STRUCT!{#[repr(packed)] struct USB_NODE_CONNECTION_INFORMATION_EX {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
DeviceDescriptor: USB_DEVICE_DESCRIPTOR,
|
|
|
|
|
CurrentConfigurationValue: UCHAR,
|
|
|
|
|
Speed: UCHAR,
|
|
|
|
|
DeviceIsHub: BOOLEAN,
|
|
|
|
|
DeviceAddress: USHORT,
|
|
|
|
|
NumberOfOpenPipes: ULONG,
|
|
|
|
|
ConnectionStatus: USB_CONNECTION_STATUS,
|
|
|
|
|
PipeList: [USB_PIPE_INFO; 0],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_NODE_CONNECTION_INFORMATION_EX = *mut USB_NODE_CONNECTION_INFORMATION_EX;
|
|
|
|
|
STRUCT!{struct USB_HUB_CAP_FLAGS {
|
|
|
|
|
ul: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
BITFIELD!{USB_HUB_CAP_FLAGS ul: ULONG [
|
|
|
|
|
HubIsHighSpeedCapable set_HubIsHighSpeedCapable[0..1],
|
|
|
|
|
HubIsHighSpeed set_HubIsHighSpeed[1..2],
|
|
|
|
|
HubIsMultiTtCapable set_HubIsMultiTtCapable[2..3],
|
|
|
|
|
HubIsMultiTt set_HubIsMultiTt[3..4],
|
|
|
|
|
HubIsRoot set_HubIsRoot[4..5],
|
|
|
|
|
HubIsArmedWakeOnConnect set_HubIsArmedWakeOnConnect[5..6],
|
|
|
|
|
HubIsBusPowered set_HubIsBusPowered[6..7],
|
|
|
|
|
ReservedMBZ set_ReservedMBZ[7..32],
|
|
|
|
|
]}
|
|
|
|
|
pub type PUSB_HUB_CAP_FLAGS = *mut USB_HUB_CAP_FLAGS;
|
|
|
|
|
STRUCT!{struct USB_HUB_CAPABILITIES_EX {
|
|
|
|
|
CapabilityFlags: USB_HUB_CAP_FLAGS,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_HUB_CAPABILITIES_EX = *mut USB_HUB_CAPABILITIES_EX;
|
|
|
|
|
STRUCT!{struct USB_CYCLE_PORT_PARAMS {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
StatusReturned: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_CYCLE_PORT_PARAMS = *mut USB_CYCLE_PORT_PARAMS;
|
|
|
|
|
STRUCT!{struct USB_ID_STRING {
|
|
|
|
|
LanguageId: USHORT,
|
|
|
|
|
Pad: USHORT,
|
|
|
|
|
LengthInBytes: ULONG,
|
|
|
|
|
Buffer: PWCHAR,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_ID_STRING = *mut USB_ID_STRING;
|
|
|
|
|
STRUCT!{struct USB_HUB_DEVICE_UXD_SETTINGS {
|
|
|
|
|
Version: ULONG,
|
|
|
|
|
PnpGuid: GUID,
|
|
|
|
|
OwnerGuid: GUID,
|
|
|
|
|
DeleteOnShutdown: ULONG,
|
|
|
|
|
DeleteOnReload: ULONG,
|
|
|
|
|
DeleteOnDisconnect: ULONG,
|
|
|
|
|
Reserved: [ULONG; 5],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_HUB_DEVICE_UXD_SETTINGS = *mut USB_HUB_DEVICE_UXD_SETTINGS;
|
|
|
|
|
STRUCT!{struct HUB_DEVICE_CONFIG_INFO {
|
|
|
|
|
Version: ULONG,
|
|
|
|
|
Length: ULONG,
|
|
|
|
|
HubFlags: USB_HUB_CAP_FLAGS,
|
|
|
|
|
HardwareIds: USB_ID_STRING,
|
|
|
|
|
CompatibleIds: USB_ID_STRING,
|
|
|
|
|
DeviceDescription: USB_ID_STRING,
|
|
|
|
|
Reserved: [ULONG; 19],
|
|
|
|
|
UxdSettings: USB_HUB_DEVICE_UXD_SETTINGS,
|
|
|
|
|
}}
|
|
|
|
|
pub type PHUB_DEVICE_CONFIG_INFO = *mut HUB_DEVICE_CONFIG_INFO;
|
|
|
|
|
STRUCT!{struct HCD_STAT_COUNTERS {
|
|
|
|
|
BytesTransferred: ULONG,
|
|
|
|
|
IsoMissedCount: USHORT,
|
|
|
|
|
DataOverrunErrorCount: USHORT,
|
|
|
|
|
CrcErrorCount: USHORT,
|
|
|
|
|
ScheduleOverrunCount: USHORT,
|
|
|
|
|
TimeoutErrorCount: USHORT,
|
|
|
|
|
InternalHcErrorCount: USHORT,
|
|
|
|
|
BufferOverrunErrorCount: USHORT,
|
|
|
|
|
SWErrorCount: USHORT,
|
|
|
|
|
StallPidCount: USHORT,
|
|
|
|
|
PortDisableCount: USHORT,
|
|
|
|
|
}}
|
|
|
|
|
pub type PHCD_STAT_COUNTERS = *mut HCD_STAT_COUNTERS;
|
|
|
|
|
STRUCT!{struct HCD_ISO_STAT_COUNTERS {
|
|
|
|
|
LateUrbs: USHORT,
|
|
|
|
|
DoubleBufferedPackets: USHORT,
|
|
|
|
|
TransfersCF_5ms: USHORT,
|
|
|
|
|
TransfersCF_2ms: USHORT,
|
|
|
|
|
TransfersCF_1ms: USHORT,
|
|
|
|
|
MaxInterruptLatency: USHORT,
|
|
|
|
|
BadStartFrame: USHORT,
|
|
|
|
|
StaleUrbs: USHORT,
|
|
|
|
|
IsoPacketNotAccesed: USHORT,
|
|
|
|
|
IsoPacketHWError: USHORT,
|
|
|
|
|
SmallestUrbPacketCount: USHORT,
|
|
|
|
|
LargestUrbPacketCount: USHORT,
|
|
|
|
|
IsoCRC_Error: USHORT,
|
|
|
|
|
IsoOVERRUN_Error: USHORT,
|
|
|
|
|
IsoINTERNAL_Error: USHORT,
|
|
|
|
|
IsoUNKNOWN_Error: USHORT,
|
|
|
|
|
IsoBytesTransferred: ULONG,
|
|
|
|
|
LateMissedCount: USHORT,
|
|
|
|
|
HWIsoMissedCount: USHORT,
|
|
|
|
|
Reserved7: [ULONG; 8],
|
|
|
|
|
}}
|
|
|
|
|
pub type PHCD_ISO_STAT_COUNTERS = *mut HCD_ISO_STAT_COUNTERS;
|
|
|
|
|
STRUCT!{struct HCD_STAT_INFORMATION_1 {
|
|
|
|
|
Reserved1: ULONG,
|
|
|
|
|
Reserved2: ULONG,
|
|
|
|
|
ResetCounters: ULONG,
|
|
|
|
|
TimeRead: LARGE_INTEGER,
|
|
|
|
|
Counters: HCD_STAT_COUNTERS,
|
|
|
|
|
}}
|
|
|
|
|
pub type PHCD_STAT_INFORMATION_1 = *mut HCD_STAT_INFORMATION_1;
|
|
|
|
|
STRUCT!{struct HCD_STAT_INFORMATION_2 {
|
|
|
|
|
Reserved1: ULONG,
|
|
|
|
|
Reserved2: ULONG,
|
|
|
|
|
ResetCounters: ULONG,
|
|
|
|
|
TimeRead: LARGE_INTEGER,
|
|
|
|
|
LockedMemoryUsed: LONG,
|
|
|
|
|
Counters: HCD_STAT_COUNTERS,
|
|
|
|
|
IsoCounters: HCD_ISO_STAT_COUNTERS,
|
|
|
|
|
}}
|
|
|
|
|
pub type PHCD_STAT_INFORMATION_2 = *mut HCD_STAT_INFORMATION_2;
|
|
|
|
|
pub const WMI_USB_DRIVER_INFORMATION: ULONG = 0;
|
|
|
|
|
pub const WMI_USB_DRIVER_NOTIFICATION: ULONG = 1;
|
|
|
|
|
pub const WMI_USB_POWER_DEVICE_ENABLE: ULONG = 2;
|
|
|
|
|
pub const WMI_USB_HUB_NODE_INFORMATION: ULONG = 4;
|
|
|
|
|
pub const WMI_USB_PERFORMANCE_INFORMATION: ULONG = 1;
|
|
|
|
|
pub const WMI_USB_DEVICE_NODE_INFORMATION: ULONG = 2;
|
|
|
|
|
ENUM!{enum USB_NOTIFICATION_TYPE {
|
|
|
|
|
EnumerationFailure = 0,
|
|
|
|
|
InsufficentBandwidth,
|
|
|
|
|
InsufficentPower,
|
|
|
|
|
OverCurrent,
|
|
|
|
|
ResetOvercurrent,
|
|
|
|
|
AcquireBusInfo,
|
|
|
|
|
AcquireHubName,
|
|
|
|
|
AcquireControllerName,
|
|
|
|
|
HubOvercurrent,
|
|
|
|
|
HubPowerChange,
|
|
|
|
|
HubNestedTooDeeply,
|
|
|
|
|
ModernDeviceInLegacyHub,
|
|
|
|
|
}}
|
|
|
|
|
STRUCT!{struct USB_NOTIFICATION {
|
|
|
|
|
NotificationType: USB_NOTIFICATION_TYPE,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_NOTIFICATION = *mut USB_NOTIFICATION;
|
|
|
|
|
STRUCT!{struct USB_CONNECTION_NOTIFICATION {
|
|
|
|
|
NotificationType: USB_NOTIFICATION_TYPE,
|
|
|
|
|
ConnectionNumber: ULONG,
|
|
|
|
|
RequestedBandwidth: ULONG,
|
|
|
|
|
EnumerationFailReason: ULONG,
|
|
|
|
|
PowerRequested: ULONG,
|
|
|
|
|
HubNameLength: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_CONNECTION_NOTIFICATION = *mut USB_CONNECTION_NOTIFICATION;
|
|
|
|
|
STRUCT!{struct USB_BUS_NOTIFICATION {
|
|
|
|
|
NotificationType: USB_NOTIFICATION_TYPE,
|
|
|
|
|
TotalBandwidth: ULONG,
|
|
|
|
|
ConsumedBandwidth: ULONG,
|
|
|
|
|
ControllerNameLength: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_BUS_NOTIFICATION = *mut USB_BUS_NOTIFICATION;
|
|
|
|
|
STRUCT!{struct USB_ACQUIRE_INFO {
|
|
|
|
|
NotificationType: USB_NOTIFICATION_TYPE,
|
|
|
|
|
TotalSize: ULONG,
|
|
|
|
|
Buffer: [WCHAR; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_ACQUIRE_INFO = *mut USB_ACQUIRE_INFO;
|
|
|
|
|
ENUM!{enum USB_WMI_DEVICE_NODE_TYPE {
|
|
|
|
|
UsbDevice,
|
|
|
|
|
HubDevice,
|
|
|
|
|
CompositeDevice,
|
|
|
|
|
UsbController,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_WMI_DEVICE_NODE_TYPE = *mut USB_WMI_DEVICE_NODE_TYPE;
|
|
|
|
|
STRUCT!{struct USB_DEVICE_STATE {
|
|
|
|
|
bitfield: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
BITFIELD!{USB_DEVICE_STATE bitfield: ULONG [
|
|
|
|
|
DeviceConnected set_DeviceConnected[0..1],
|
|
|
|
|
DeviceStarted set_DeviceStarted[1..2],
|
|
|
|
|
]}
|
|
|
|
|
pub type PUSB_DEVICE_STATE = *mut USB_DEVICE_STATE;
|
|
|
|
|
STRUCT!{struct USB_HUB_PORT_INFORMATION {
|
|
|
|
|
DeviceState: USB_DEVICE_STATE,
|
|
|
|
|
PortNumber: USHORT,
|
|
|
|
|
DeviceAddress: USHORT,
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
ConnectionStatus: USB_CONNECTION_STATUS,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_HUB_PORT_INFORMATION = *mut USB_HUB_PORT_INFORMATION;
|
|
|
|
|
STRUCT!{struct USB_HUB_DEVICE_INFO {
|
|
|
|
|
HubDescriptor: USB_HUB_DESCRIPTOR,
|
|
|
|
|
HubNumber: ULONG,
|
|
|
|
|
DeviceAddress: USHORT,
|
|
|
|
|
HubIsSelfPowered: BOOLEAN,
|
|
|
|
|
HubIsRootHub: BOOLEAN,
|
|
|
|
|
HubCapabilities: USB_HUB_CAPABILITIES,
|
|
|
|
|
NumberOfHubPorts: ULONG,
|
|
|
|
|
PortInfo: [USB_HUB_PORT_INFORMATION; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_HUB_DEVICE_INFO = *mut USB_HUB_DEVICE_INFO;
|
|
|
|
|
STRUCT!{struct USB_COMPOSITE_FUNCTION_INFO {
|
|
|
|
|
FunctionNumber: UCHAR,
|
|
|
|
|
BaseInterfaceNumber: UCHAR,
|
|
|
|
|
NumberOfInterfaces: UCHAR,
|
|
|
|
|
FunctionIsIdle: BOOLEAN,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_COMPOSITE_FUNCTION_INFO = *mut USB_COMPOSITE_FUNCTION_INFO;
|
|
|
|
|
STRUCT!{struct USB_COMPOSITE_DEVICE_INFO {
|
|
|
|
|
DeviceDescriptor: USB_DEVICE_DESCRIPTOR,
|
|
|
|
|
CurrentConfigDescriptor: USB_CONFIGURATION_DESCRIPTOR,
|
|
|
|
|
CurrentConfigurationValue: UCHAR,
|
|
|
|
|
NumberOfFunctions: UCHAR,
|
|
|
|
|
FunctionInfo: [USB_COMPOSITE_FUNCTION_INFO; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_COMPOSITE_DEVICE_INFO = *mut USB_COMPOSITE_DEVICE_INFO;
|
|
|
|
|
STRUCT!{struct USB_CONTROLLER_DEVICE_INFO {
|
|
|
|
|
PciVendorId: ULONG,
|
|
|
|
|
PciDeviceId: ULONG,
|
|
|
|
|
PciRevision: ULONG,
|
|
|
|
|
NumberOfRootPorts: ULONG,
|
|
|
|
|
HcFeatureFlags: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_CONTROLLER_DEVICE_INFO = *mut USB_CONTROLLER_DEVICE_INFO;
|
|
|
|
|
STRUCT!{struct USB_DEVICE_INFO {
|
|
|
|
|
DeviceState: USB_DEVICE_STATE,
|
|
|
|
|
PortNumber: USHORT,
|
|
|
|
|
DeviceDescriptor: USB_DEVICE_DESCRIPTOR,
|
|
|
|
|
CurrentConfigurationValue: UCHAR,
|
|
|
|
|
Speed: USB_DEVICE_SPEED,
|
|
|
|
|
DeviceAddress: USHORT,
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
ConnectionStatus: USB_CONNECTION_STATUS,
|
|
|
|
|
PnpHardwareId: [WCHAR; 128],
|
|
|
|
|
PnpCompatibleId: [WCHAR; 128],
|
|
|
|
|
SerialNumberId: [WCHAR; 128],
|
|
|
|
|
PnpDeviceDescription: [WCHAR; 128],
|
|
|
|
|
NumberOfOpenPipes: ULONG,
|
|
|
|
|
PipeList: [USB_PIPE_INFO; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_DEVICE_INFO = *mut USB_DEVICE_INFO;
|
|
|
|
|
STRUCT!{struct USB_DEVICE_NODE_INFO {
|
|
|
|
|
Sig: ULONG,
|
|
|
|
|
LengthInBytes: ULONG,
|
|
|
|
|
DeviceDescription: [WCHAR; 40],
|
|
|
|
|
NodeType: USB_WMI_DEVICE_NODE_TYPE,
|
|
|
|
|
BusAddress: USB_TOPOLOGY_ADDRESS,
|
|
|
|
|
u: USB_DEVICE_NODE_INFO_u,
|
|
|
|
|
}}
|
|
|
|
|
UNION!{union USB_DEVICE_NODE_INFO_u {
|
|
|
|
|
[u8; 1078],
|
|
|
|
|
UsbDeviceInfo UsbDeviceInfo_mut: USB_DEVICE_INFO,
|
|
|
|
|
HubDeviceInfo HubDeviceInfo_mut: USB_HUB_DEVICE_INFO,
|
|
|
|
|
CompositeDeviceInfo CompositeDeviceInfo_mut: USB_COMPOSITE_DEVICE_INFO,
|
|
|
|
|
ControllerDeviceInfo ControllerDeviceInfo_mut: USB_CONTROLLER_DEVICE_INFO,
|
|
|
|
|
DeviceInformation DeviceInformation_mut: [UCHAR; 4],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_DEVICE_NODE_INFO = *mut USB_DEVICE_NODE_INFO;
|
|
|
|
|
STRUCT!{struct USB_DEVICE_PERFORMANCE_INFO {
|
|
|
|
|
BulkBytes: ULONG,
|
|
|
|
|
ControlDataBytes: ULONG,
|
|
|
|
|
IsoBytes: ULONG,
|
|
|
|
|
InterruptBytes: ULONG,
|
|
|
|
|
BulkUrbCount: ULONG,
|
|
|
|
|
ControlUrbCount: ULONG,
|
|
|
|
|
IsoUrbCount: ULONG,
|
|
|
|
|
InterruptUrbCount: ULONG,
|
|
|
|
|
AllocedInterrupt: [ULONG; 6],
|
|
|
|
|
AllocedIso: ULONG,
|
|
|
|
|
Total32secBandwidth: ULONG,
|
|
|
|
|
TotalTtBandwidth: ULONG,
|
|
|
|
|
DeviceDescription: [WCHAR; 60],
|
|
|
|
|
DeviceSpeed: USB_DEVICE_SPEED,
|
|
|
|
|
TotalIsoLatency: ULONG,
|
|
|
|
|
DroppedIsoPackets: ULONG,
|
|
|
|
|
TransferErrors: ULONG,
|
|
|
|
|
PciInterruptCount: ULONG,
|
|
|
|
|
HcIdleState: ULONG,
|
|
|
|
|
HcAsyncIdleState: ULONG,
|
|
|
|
|
HcAsyncCacheFlushCount: ULONG,
|
|
|
|
|
HcPeriodicIdleState: ULONG,
|
|
|
|
|
HcPeriodicCacheFlushCount: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_DEVICE_PERFORMANCE_INFO = *mut USB_DEVICE_PERFORMANCE_INFO;
|
|
|
|
|
ENUM!{enum USB_HUB_TYPE {
|
|
|
|
|
UsbRootHub = 1,
|
|
|
|
|
Usb20Hub = 2,
|
|
|
|
|
Usb30Hub = 3,
|
|
|
|
|
}}
|
|
|
|
|
STRUCT!{struct USB_HUB_INFORMATION_EX {
|
|
|
|
|
HubType: USB_HUB_TYPE,
|
|
|
|
|
HighestPortNumber: USHORT,
|
|
|
|
|
u: USB_HUB_INFORMATION_EX_u,
|
|
|
|
|
}}
|
|
|
|
|
UNION!{union USB_HUB_INFORMATION_EX_u {
|
|
|
|
|
[u8; 71],
|
|
|
|
|
UsbHubDescriptor UsbHubDescriptor_mut: USB_HUB_DESCRIPTOR,
|
|
|
|
|
Usb30HubDescriptor Usb30HubDescriptor_mut: USB_30_HUB_DESCRIPTOR,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_HUB_INFORMATION_EX = *mut USB_HUB_INFORMATION_EX;
|
|
|
|
|
STRUCT!{struct USB_PORT_PROPERTIES {
|
|
|
|
|
ul: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
BITFIELD!{USB_PORT_PROPERTIES ul: ULONG [
|
|
|
|
|
PortIsUserConnectable set_PortIsUserConnectable[0..1],
|
|
|
|
|
PortIsDebugCapable set_PortIsDebugCapable[1..2],
|
|
|
|
|
PortHasMultipleCompanions set_PortHasMultipleCompanions[2..3],
|
|
|
|
|
PortConnectorIsTypeC set_PortConnectorIsTypeC[3..4],
|
|
|
|
|
ReservedMBZ set_ReservedMBZ[4..32],
|
|
|
|
|
]}
|
|
|
|
|
pub type PUSB_PORT_PROPERTIES = *mut USB_PORT_PROPERTIES;
|
|
|
|
|
STRUCT!{struct USB_PORT_CONNECTOR_PROPERTIES {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
ActualLength: ULONG,
|
|
|
|
|
UsbPortProperties: USB_PORT_PROPERTIES,
|
|
|
|
|
CompanionIndex: USHORT,
|
|
|
|
|
CompanionPortNumber: USHORT,
|
|
|
|
|
CompanionHubSymbolicLinkName: [WCHAR; 1],
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_PORT_CONNECTOR_PROPERTIES = *mut USB_PORT_CONNECTOR_PROPERTIES;
|
|
|
|
|
STRUCT!{struct USB_PROTOCOLS {
|
|
|
|
|
ul: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
BITFIELD!{USB_PROTOCOLS ul: ULONG [
|
|
|
|
|
Usb110 set_Usb110[0..1],
|
|
|
|
|
Usb200 set_Usb200[1..2],
|
|
|
|
|
Usb300 set_Usb300[2..3],
|
|
|
|
|
ReservedMBZ set_ReservedMBZ[3..32],
|
|
|
|
|
]}
|
|
|
|
|
pub type PUSB_PROTOCOLS = *mut USB_PROTOCOLS;
|
|
|
|
|
STRUCT!{struct USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS {
|
|
|
|
|
ul: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
BITFIELD!{USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS ul: ULONG [
|
|
|
|
|
DeviceIsOperatingAtSuperSpeedOrHigher set_DeviceIsOperatingAtSuperSpeedOrHigher[0..1],
|
|
|
|
|
DeviceIsSuperSpeedCapableOrHigher set_DeviceIsSuperSpeedCapableOrHigher[1..2],
|
|
|
|
|
DeviceIsOperatingAtSuperSpeedPlusOrHigher set_DeviceIsOperatingAtSuperSpeedPlusOrHigher[2..3],
|
|
|
|
|
DeviceIsSuperSpeedPlusCapableOrHigher set_DeviceIsSuperSpeedPlusCapableOrHigher[3..4],
|
|
|
|
|
ReservedMBZ set_ReservedMBZ[4..32],
|
|
|
|
|
]}
|
|
|
|
|
pub type PUSB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS
|
|
|
|
|
= *mut USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS;
|
|
|
|
|
STRUCT!{struct USB_NODE_CONNECTION_INFORMATION_EX_V2 {
|
|
|
|
|
ConnectionIndex: ULONG,
|
|
|
|
|
Length: ULONG,
|
|
|
|
|
SupportedUsbProtocols: USB_PROTOCOLS,
|
|
|
|
|
Flags: USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_NODE_CONNECTION_INFORMATION_EX_V2 = *mut USB_NODE_CONNECTION_INFORMATION_EX_V2;
|
|
|
|
|
pub const USB_TRANSPORT_CHARACTERISTICS_VERSION_1: ULONG = 0x01;
|
|
|
|
|
pub const USB_TRANSPORT_CHARACTERISTICS_LATENCY_AVAILABLE: ULONG = 0x1;
|
|
|
|
|
pub const USB_TRANSPORT_CHARACTERISTICS_BANDWIDTH_AVAILABLE: ULONG = 0x2;
|
|
|
|
|
STRUCT!{struct USB_TRANSPORT_CHARACTERISTICS {
|
|
|
|
|
Version: ULONG,
|
|
|
|
|
TransportCharacteristicsFlags: ULONG,
|
|
|
|
|
CurrentRoundtripLatencyInMilliSeconds: ULONG64,
|
|
|
|
|
MaxPotentialBandwidth: ULONG64,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_TRANSPORT_CHARACTERISTICS = *mut USB_TRANSPORT_CHARACTERISTICS;
|
|
|
|
|
pub const USB_REGISTER_FOR_TRANSPORT_LATENCY_CHANGE: ULONG = 0x1;
|
|
|
|
|
pub const USB_REGISTER_FOR_TRANSPORT_BANDWIDTH_CHANGE: ULONG = 0x2;
|
|
|
|
|
DECLARE_HANDLE!(USB_CHANGE_REGISTRATION_HANDLE, USB_CHANGE_REGISTRATION_HANDLE__);
|
|
|
|
|
STRUCT!{struct USB_TRANSPORT_CHARACTERISTICS_CHANGE_REGISTRATION {
|
|
|
|
|
ChangeNotificationInputFlags: ULONG,
|
|
|
|
|
Handle: USB_CHANGE_REGISTRATION_HANDLE,
|
|
|
|
|
UsbTransportCharacteristics: USB_TRANSPORT_CHARACTERISTICS,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_TRANSPORT_CHARACTERISTICS_CHANGE_REGISTRATION
|
|
|
|
|
= *mut USB_TRANSPORT_CHARACTERISTICS_CHANGE_REGISTRATION;
|
|
|
|
|
STRUCT!{struct USB_TRANSPORT_CHARACTERISTICS_CHANGE_NOTIFICATION {
|
|
|
|
|
Handle: USB_CHANGE_REGISTRATION_HANDLE,
|
|
|
|
|
UsbTransportCharacteristics: USB_TRANSPORT_CHARACTERISTICS,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_TRANSPORT_CHARACTERISTICS_CHANGE_NOTIFICATION
|
|
|
|
|
= *mut USB_TRANSPORT_CHARACTERISTICS_CHANGE_NOTIFICATION;
|
|
|
|
|
STRUCT!{struct USB_TRANSPORT_CHARACTERISTICS_CHANGE_UNREGISTRATION {
|
|
|
|
|
Handle: USB_CHANGE_REGISTRATION_HANDLE,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_TRANSPORT_CHARACTERISTICS_CHANGE_UNREGISTRATION
|
|
|
|
|
= *mut USB_TRANSPORT_CHARACTERISTICS_CHANGE_UNREGISTRATION;
|
|
|
|
|
pub const USB_DEVICE_CHARACTERISTICS_VERSION_1: ULONG = 0x01;
|
|
|
|
|
pub const USB_DEVICE_CHARACTERISTICS_MAXIMUM_PATH_DELAYS_AVAILABLE: ULONG = 0x1;
|
|
|
|
|
STRUCT!{struct USB_DEVICE_CHARACTERISTICS {
|
|
|
|
|
Version: ULONG,
|
|
|
|
|
Reserved: [ULONG; 2],
|
|
|
|
|
UsbDeviceCharacteristicsFlags: ULONG,
|
|
|
|
|
MaximumSendPathDelayInMilliSeconds: ULONG,
|
|
|
|
|
MaximumCompletionPathDelayInMilliSeconds: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_DEVICE_CHARACTERISTICS = *mut USB_DEVICE_CHARACTERISTICS;
|
|
|
|
|
STRUCT!{struct USB_START_TRACKING_FOR_TIME_SYNC_INFORMATION {
|
|
|
|
|
TimeTrackingHandle: HANDLE,
|
|
|
|
|
IsStartupDelayTolerable: BOOLEAN,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_START_TRACKING_FOR_TIME_SYNC_INFORMATION
|
|
|
|
|
= *mut USB_START_TRACKING_FOR_TIME_SYNC_INFORMATION;
|
|
|
|
|
STRUCT!{struct USB_STOP_TRACKING_FOR_TIME_SYNC_INFORMATION {
|
|
|
|
|
TimeTrackingHandle: HANDLE,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_STOP_TRACKING_FOR_TIME_SYNC_INFORMATION
|
|
|
|
|
= *mut USB_STOP_TRACKING_FOR_TIME_SYNC_INFORMATION;
|
|
|
|
|
STRUCT!{struct USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION {
|
|
|
|
|
TimeTrackingHandle: HANDLE,
|
|
|
|
|
InputFrameNumber: ULONG,
|
|
|
|
|
InputMicroFrameNumber: ULONG,
|
|
|
|
|
QueryPerformanceCounterAtInputFrameOrMicroFrame: LARGE_INTEGER,
|
|
|
|
|
QueryPerformanceCounterFrequency: LARGE_INTEGER,
|
|
|
|
|
PredictedAccuracyInMicroSeconds: ULONG,
|
|
|
|
|
CurrentGenerationID: ULONG,
|
|
|
|
|
CurrentQueryPerformanceCounter: LARGE_INTEGER,
|
|
|
|
|
CurrentHardwareFrameNumber: ULONG,
|
|
|
|
|
CurrentHardwareMicroFrameNumber: ULONG,
|
|
|
|
|
CurrentUSBFrameNumber: ULONG,
|
|
|
|
|
}}
|
|
|
|
|
pub type PUSB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION
|
|
|
|
|
= *mut USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION;
|