summaryrefslogtreecommitdiff
path: root/vendor/winapi/src/shared/usbioctl.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2024-01-08 00:21:28 +0300
committerValentin Popov <valentin@popov.link>2024-01-08 00:21:28 +0300
commit1b6a04ca5504955c571d1c97504fb45ea0befee4 (patch)
tree7579f518b23313e8a9748a88ab6173d5e030b227 /vendor/winapi/src/shared/usbioctl.rs
parent5ecd8cf2cba827454317368b68571df0d13d7842 (diff)
downloadfparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.tar.xz
fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.zip
Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
Diffstat (limited to 'vendor/winapi/src/shared/usbioctl.rs')
-rw-r--r--vendor/winapi/src/shared/usbioctl.rs705
1 files changed, 705 insertions, 0 deletions
diff --git a/vendor/winapi/src/shared/usbioctl.rs b/vendor/winapi/src/shared/usbioctl.rs
new file mode 100644
index 0000000..a7906fe
--- /dev/null
+++ b/vendor/winapi/src/shared/usbioctl.rs
@@ -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!{#[repr(packed)] 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!{#[repr(packed)] struct USB_HUB_CAPABILITIES_EX {
+ CapabilityFlags: USB_HUB_CAP_FLAGS,
+}}
+pub type PUSB_HUB_CAPABILITIES_EX = *mut USB_HUB_CAPABILITIES_EX;
+STRUCT!{#[repr(packed)] struct USB_CYCLE_PORT_PARAMS {
+ ConnectionIndex: ULONG,
+ StatusReturned: ULONG,
+}}
+pub type PUSB_CYCLE_PORT_PARAMS = *mut USB_CYCLE_PORT_PARAMS;
+STRUCT!{#[repr(packed)] struct USB_ID_STRING {
+ LanguageId: USHORT,
+ Pad: USHORT,
+ LengthInBytes: ULONG,
+ Buffer: PWCHAR,
+}}
+pub type PUSB_ID_STRING = *mut USB_ID_STRING;
+STRUCT!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] struct USB_NOTIFICATION {
+ NotificationType: USB_NOTIFICATION_TYPE,
+}}
+pub type PUSB_NOTIFICATION = *mut USB_NOTIFICATION;
+STRUCT!{#[repr(packed)] 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!{#[repr(packed)] struct USB_BUS_NOTIFICATION {
+ NotificationType: USB_NOTIFICATION_TYPE,
+ TotalBandwidth: ULONG,
+ ConsumedBandwidth: ULONG,
+ ControllerNameLength: ULONG,
+}}
+pub type PUSB_BUS_NOTIFICATION = *mut USB_BUS_NOTIFICATION;
+STRUCT!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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!{#[repr(packed)] 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;