| 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; |