13#define NDEBUG_USBHUB_IOCTL
30 DPRINT(
"USBH_SelectConfigOrInterfaceComplete ... \n");
32 if (
Irp->PendingReturned)
57 DPRINT1(
"USBH_SelectConfigOrInterfaceComplete: TimeoutContext != NULL. FIXME\n");
74 DPRINT1(
"USBH_SelectConfigOrInterfaceComplete: Status = 0x%lx, UsbdStatus = 0x%lx\n",
Status, Urb->
UrbHeader.Status);
77 DPRINT1(
"USBH_SelectConfigOrInterfaceComplete: USBD_STATUS_NO_BANDWIDTH. FIXME\n");
99 HubExtension = PortExtension->HubExtension;
104 DPRINT_IOCTL(
"USBH_PdoUrbFilter: Device - %p, Irp - %p, Urb - %p\n",
127 IsValidConfig =
TRUE;
131 DPRINT1(
"USBH_PdoUrbFilter: Not valid Cfg. bDescriptorType\n");
132 IsValidConfig =
FALSE;
138 DPRINT1(
"USBH_PdoUrbFilter: Size Cfg. descriptor is too small\n");
139 IsValidConfig =
FALSE;
151 PortExtension->MaxPower = MaxPower;
157 DPRINT1(
"USBH_PdoUrbFilter: USBH_InvalidatePortDeviceState() UNIMPLEMENTED. FIXME\n");
196 case URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR:
197 DPRINT1(
"USBH_PdoUrbFilter: URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR UNIMPLEMENTED. FIXME\n");
219 HubExtension = PortExtension->HubExtension;
223 if (PortExtension->DeviceHandle ==
NULL)
230 Urb->
UrbHeader.UsbdDeviceHandle = PortExtension->DeviceHandle;
248 DPRINT(
"USBH_PdoIoctlGetPortStatus ... \n");
250 HubExtension = PortExtension->HubExtension;
260 ASSERT(PortExtension->PortNumber > 0);
261 PortData = &HubExtension->
PortData[PortExtension->PortNumber - 1];
264 PortExtension->PortNumber,
273 if (PortExtension->Common.SelfDevice == PortData->
DeviceObject)
314 DPRINT(
"USBH_ResetPortWorker ... \n");
363 KeSetEvent(&HubExtension->PendingRequestEvent,
370 PortExtension->
PortPdoFlags &= ~USBHUB_PDO_FLAG_PORT_RESSETING;
387 HubExtension = PortExtension->HubExtension;
389 DPRINT(
"USBH_PdoIoctlResetPort ... \n");
402 (
PVOID *)&HubWorkItemBuffer,
416 HubWorkItemBuffer->
Irp =
Irp;
437 DPRINT(
"USBH_PortIdleNotificationCancelRoutine ... \n");
439 PortExtension =
Device->DeviceExtension;
440 PortExtension->
PortPdoFlags &= ~USBHUB_PDO_FLAG_IDLE_NOTIFICATION;
469 (
PVOID *)&HubWorkItemBuffer,
474 HubWorkItemBuffer->
Irp =
Irp;
492 PUSB_IDLE_CALLBACK_INFO IdleCallbackInfo;
496 DPRINT(
"USBH_PortIdleNotificationRequest ... \n");
498 HubExtension = PortExtension->HubExtension;
502 if (PortExtension->IdleNotificationIrp)
513 if (!IdleCallbackInfo || !IdleCallbackInfo->IdleCallback)
546 PortExtension->IdleNotificationIrp =
Irp;
552 DPRINT(
"USBH_PortIdleNotificationRequest: IdleNotificationIrp - %p\n",
553 PortExtension->IdleNotificationIrp);
580 DPRINT(
"USBH_IoctlGetNodeName ... \n");
584 ConnectionName =
Irp->AssociatedIrp.SystemBuffer;
597 ConnectionName->
ConnectionIndex > HubExtension->HubDescriptor->bNumberOfPorts)
604 PortDevice = HubExtension->PortData[ConnectionName->
ConnectionIndex - 1].DeviceObject;
693 DPRINT(
"USBH_IoctlGetNodeInformation ... \n");
697 NodeInfo =
Irp->AssociatedIrp.SystemBuffer;
714 HubExtension->HubDescriptor,
718 HubExtension->HubConfigDescriptor);
738 USB_HUB_CAPABILITIES HubCaps;
740 DPRINT(
"USBH_IoctlGetHubCapabilities ... \n");
783 ULONG ConnectionIndex;
790 DPRINT(
"USBH_IoctlGetNodeConnectionAttributes ... \n");
795 if (
BufferLength <
sizeof(USB_NODE_CONNECTION_ATTRIBUTES))
803 ConnectionIndex =
Attributes->ConnectionIndex;
805 Attributes->ConnectionIndex = ConnectionIndex;
809 NumPorts = HubExtension->HubDescriptor->bNumberOfPorts;
812 ConnectionIndex == 0 ||
813 ConnectionIndex > NumPorts)
818 PortData = HubExtension->PortData + (ConnectionIndex - 1);
823 Irp->IoStatus.Information =
sizeof(USB_NODE_CONNECTION_ATTRIBUTES);
840 PUSB_NODE_CONNECTION_INFORMATION_EX
Info;
841 ULONG ConnectionIndex;
848 DPRINT(
"USBH_IoctlGetNodeConnectionInformation ... \n");
860 Info =
Irp->AssociatedIrp.SystemBuffer;
862 ConnectionIndex =
Info->ConnectionIndex;
864 Info->ConnectionIndex = ConnectionIndex;
868 NumPorts = HubExtension->HubDescriptor->bNumberOfPorts;
871 ConnectionIndex == 0 ||
872 ConnectionIndex > NumPorts)
877 PortData = HubExtension->PortData + (ConnectionIndex - 1);
884 Irp->IoStatus.Information =
FIELD_OFFSET(USB_NODE_CONNECTION_INFORMATION_EX,
926 Irp->IoStatus.Information =
sizeof(USB_NODE_CONNECTION_INFORMATION_EX) +
936 Irp->IoStatus.Information =
FIELD_OFFSET(USB_NODE_CONNECTION_INFORMATION_EX,
960 DPRINT(
"USBH_IoctlGetNodeConnectionDriverKeyName ... \n");
966 HubExtension->HubDescriptor->bNumberOfPorts == 0)
975 PortData = &HubExtension->PortData[
KeyName->ConnectionIndex - 1];
1009 KeyName->DriverKeyName[0] = 0;
1034 ULONG RequestBufferLength;
1049 UsbRequest =
Irp->AssociatedIrp.SystemBuffer;
1050 RequestBufferLength = UsbRequest->
SetupPacket.wLength;
1055 DPRINT(
"USBH_IoctlGetDescriptor: RequestBufferLength - %x\n",
1056 RequestBufferLength);
1064 NumPorts = HubExtension->HubDescriptor->bNumberOfPorts;
1066 if (NumPorts == 0 ||
1073 PortData = HubExtension->PortData + (UsbRequest->
ConnectionIndex - 1);
1144 DPRINT(
"USBH_DeviceControl: HubExtension - %p, Irp - %p\n",
1152 if ((HubExtension->CurrentPowerState.DeviceState !=
PowerDeviceD0) &&
1155 IsCheckHubIdle =
TRUE;
1161 case IOCTL_USB_GET_HUB_CAPABILITIES:
1162 DPRINT(
"USBH_DeviceControl: IOCTL_USB_GET_HUB_CAPABILITIES\n");
1172 case IOCTL_USB_HUB_CYCLE_PORT:
1173 DPRINT1(
"USBH_DeviceControl: IOCTL_USB_HUB_CYCLE_PORT UNIMPLEMENTED. FIXME\n");
1178 DPRINT(
"USBH_DeviceControl: IOCTL_USB_GET_NODE_INFORMATION\n");
1189 DPRINT(
"USBH_DeviceControl: IOCTL_USB_GET_NODE_CONNECTION_INFORMATION\n");
1201 case IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX:
1202 DPRINT(
"USBH_DeviceControl: IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX\n");
1214 case IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES:
1215 DPRINT(
"USBH_DeviceControl: IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES\n");
1226 DPRINT(
"USBH_DeviceControl: IOCTL_USB_GET_NODE_CONNECTION_NAME\n");
1237 DPRINT(
"USBH_DeviceControl: IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME\n");
1248 DPRINT(
"USBH_DeviceControl: IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION\n");
1259 DPRINT(
"USBH_DeviceControl: IOCTL_KS_PROPERTY\n");
1289 DPRINT_IOCTL(
"USBH_PdoInternalControl: PortExtension - %p, Irp - %p\n",
1293 HubExtension = PortExtension->HubExtension;
1301 if (PortExtension->CurrentPowerState.DeviceState !=
PowerDeviceD0)
1312 HubExtension = PortExtension->RootHubExtension;
1313 DPRINT(
"USBH_PdoInternalControl: HubExtension - %p\n", HubExtension);
1327 case IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION:
1328 DPRINT1(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION\n");
1332 DPRINT(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_GET_PORT_STATUS\n");
1336 DPRINT1(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_RESET_PORT\n");
1340 DPRINT1(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_ENABLE_PORT\n");
1345 DPRINT1(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_CYCLE_PORT\n");
1349 case IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE:
1350 DPRINT(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE\n");
1356 DPRINT(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_GET_HUB_COUNT. PortPdoFlags - %lX\n",
1357 PortExtension->PortPdoFlags);
1372 DPRINT(
"USBH_PdoInternalControl: *HubCount - %x\n", *HubCount);
1376 DPRINT(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO. PortPdoFlags - %lX\n",
1377 PortExtension->PortPdoFlags);
1394 DPRINT1(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_GET_HUB_NAME\n");
1399 DPRINT1(
"USBH_PdoInternalControl: IOCTL_GET_HCD_DRIVERKEY_NAME\n");
1404 DPRINT1(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_GET_BUS_INFO\n");
1409 DPRINT1(
"USBH_PdoInternalControl: IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO\n");
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define InterlockedIncrement
#define InterlockedDecrement
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
#define DPRINT_IOCTL(...)
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI USBH_IoctlGetNodeName(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_PdoIoctlGetPortStatus(IN PUSBHUB_PORT_PDO_EXTENSION PortExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_IoctlGetNodeConnectionInformation(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP Irp, IN BOOLEAN IsExt)
NTSTATUS NTAPI USBH_IoctlGetNodeConnectionAttributes(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_DeviceControl(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_IoctlGetHubCapabilities(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_PdoUrbFilter(IN PUSBHUB_PORT_PDO_EXTENSION PortExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_PortIdleNotificationRequest(IN PUSBHUB_PORT_PDO_EXTENSION PortExtension, IN PIRP Irp)
VOID NTAPI USBH_PortIdleNotificationCancelRoutine(IN PDEVICE_OBJECT Device, IN PIRP Irp)
NTSTATUS NTAPI USBH_PdoIoctlSubmitUrb(IN PUSBHUB_PORT_PDO_EXTENSION PortExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_IoctlGetDescriptor(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_IoctlGetNodeConnectionDriverKeyName(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_PdoIoctlResetPort(IN PUSBHUB_PORT_PDO_EXTENSION PortExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_SelectConfigOrInterfaceComplete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
NTSTATUS NTAPI USBH_PdoInternalControl(IN PUSBHUB_PORT_PDO_EXTENSION PortExtension, IN PIRP Irp)
VOID NTAPI USBH_ResetPortWorker(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PVOID Context)
NTSTATUS NTAPI USBH_IoctlGetNodeInformation(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP Irp)
NTSTATUS NTAPI USBH_HubSetD0(IN PUSBHUB_FDO_EXTENSION HubExtension)
VOID NTAPI USBH_IdleCancelPowerHubWorker(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PVOID Context)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeReleaseSpinLock(sl, irql)
#define KeSetEvent(pEvt, foo, foo2)
#define KeAcquireSpinLock(sl, irql)
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG _In_ FILE_INFORMATION_CLASS _Out_opt_ PULONG LengthReturned
_Must_inspect_result_ typedef _Out_ PHIDP_CAPS Capabilities
#define USBD_MARK_DEVICE_BUSY
_Inout_ PUSB_DEVICE_HANDLE DeviceHandle
_Outptr_ PUSB_DEVICE_HANDLE _In_ PUSB_DEVICE_HANDLE _In_ USHORT PortStatus
NTSYSAPI void WINAPI DbgBreakPoint(void)
#define LOW_REALTIME_PRIORITY
IoSetCancelRoutine(Irp, CancelRoutine)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
#define IOCTL_KS_PROPERTY
#define ExFreePoolWithTag(_P, _T)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define IoCopyCurrentIrpStackLocationToNext(Irp)
#define IoCompleteRequest
VOID NTAPI IoReleaseCancelSpinLock(IN KIRQL Irql)
VOID NTAPI IoAcquireCancelSpinLock(OUT PKIRQL Irql)
#define STATUS_DEVICE_POWERED_OFF
#define STATUS_DELETE_PENDING
#define STATUS_NO_CALLBACK_ACTIVE
#define STATUS_NOT_SUPPORTED
#define STATUS_NOT_IMPLEMENTED
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
LONG NTAPI KeReleaseSemaphore(IN PKSEMAPHORE Semaphore, IN KPRIORITY Increment, IN LONG Adjustment, IN BOOLEAN Wait)
#define STATUS_BUFFER_TOO_SMALL
PDEVICE_OBJECT SelfDevice
struct _IO_STACK_LOCATION::@1575::@1576 DeviceIoControl
union _IO_STACK_LOCATION::@1575 Parameters
struct _IO_STACK_LOCATION::@3974::@4013 Others
ULONG TransferBufferLength
struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration
struct _URB_HEADER UrbHeader
PUSBHUB_PORT_DATA PortData
POWER_STATE CurrentPowerState
KEVENT PendingRequestEvent
COMMON_DEVICE_EXTENSION Common
PDEVICE_OBJECT LowerDevice
PDEVICE_OBJECT RootHubPdo2
PDEVICE_OBJECT RootHubPdo
USB_CONNECTION_STATUS ConnectionStatus
USB_PORT_STATUS_AND_CHANGE PortStatus
PDEVICE_OBJECT DeviceObject
USB_DEVICE_DESCRIPTOR DeviceDescriptor
PUSB_DEVICE_HANDLE DeviceHandle
PUSBHUB_FDO_EXTENSION HubExtension
COMMON_DEVICE_EXTENSION Common
UNICODE_STRING SymbolicLinkName
USB_CONFIGURATION_DESCRIPTOR ConfigDescriptor
KSPIN_LOCK PortTimeoutSpinLock
PUSBHUB_PORT_PDO_EXTENSION PortExtension
struct _USB_DESCRIPTOR_REQUEST::@3264 SetupPacket
UCHAR Data[ANYSIZE_ARRAY]
WCHAR NodeName[ANYSIZE_ARRAY]
static VOID ErrorExit(LPTSTR lpszMessage)
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_DEVICE_NOT_CONNECTED
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_INVALID_DEVICE_STATE
#define STATUS_DEVICE_BUSY
#define STATUS_INSUFFICIENT_RESOURCES
DEVICE_POWER_STATE DeviceState
USHORT CurrentConnectStatus
USHORT PortEnabledDisabled
USB_PORT_STATUS PortStatus
USB_20_PORT_STATUS Usb20PortStatus
struct _USB_CONFIGURATION_DESCRIPTOR USB_CONFIGURATION_DESCRIPTOR
#define USB_CONFIGURATION_DESCRIPTOR_TYPE
#define URB_FUNCTION_SELECT_INTERFACE
#define USBD_STATUS_NO_BANDWIDTH
#define URB_FUNCTION_CONTROL_TRANSFER
#define URB_FUNCTION_SELECT_CONFIGURATION
#define USBD_STATUS_INVALID_PARAMETER
#define URB_FROM_IRP(Irp)
#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
#define USBD_STATUS_INVALID_CONFIGURATION_DESCRIPTOR
#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE
#define URB_FUNCTION_ISOCH_TRANSFER
VOID NTAPI USBH_CheckHubIdle(IN PUSBHUB_FDO_EXTENSION HubExtension)
NTSTATUS NTAPI USBD_RemoveDeviceEx(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PUSB_DEVICE_HANDLE DeviceHandle, IN ULONG Flags)
VOID NTAPI USBH_CompleteIrp(IN PIRP Irp, IN NTSTATUS CompleteStatus)
VOID NTAPI USBH_CheckIdleDeferred(IN PUSBHUB_FDO_EXTENSION HubExtension)
NTSTATUS NTAPI USBH_AllocateWorkItem(PUSBHUB_FDO_EXTENSION HubExtension, PUSBHUB_IO_WORK_ITEM *OutHubIoWorkItem, PUSBHUB_WORKER_ROUTINE WorkerRoutine, SIZE_T BufferLength, PVOID *OutHubWorkItemBuffer, WORK_QUEUE_TYPE Type)
NTSTATUS NTAPI USBH_SyncSubmitUrb(IN PDEVICE_OBJECT DeviceObject, IN PURB Urb)
VOID NTAPI USBH_QueueWorkItem(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PUSBHUB_IO_WORK_ITEM HubIoWorkItem)
VOID NTAPI USBH_HubCancelIdleIrp(IN PUSBHUB_FDO_EXTENSION HubExtension, IN PIRP IdleIrp)
NTSTATUS NTAPI USBH_SyncGetPortStatus(IN PUSBHUB_FDO_EXTENSION HubExtension, IN USHORT Port, IN PUSB_PORT_STATUS_AND_CHANGE PortStatus, IN ULONG Length)
NTSTATUS NTAPI USBH_ResetDevice(IN PUSBHUB_FDO_EXTENSION HubExtension, IN USHORT Port, IN BOOLEAN IsKeepDeviceData, IN BOOLEAN IsWait)
NTSTATUS NTAPI USBH_SyncGetHubCount(IN PDEVICE_OBJECT DeviceObject, IN OUT PULONG OutHubCount)
NTSTATUS NTAPI USBD_GetDeviceInformationEx(IN PUSBHUB_PORT_PDO_EXTENSION PortExtension, IN PUSBHUB_FDO_EXTENSION HubExtension, IN PUSB_NODE_CONNECTION_INFORMATION_EX Info, IN ULONG Length, IN PUSB_DEVICE_HANDLE DeviceHandle)
NTSTATUS NTAPI USBH_PassIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
BOOLEAN NTAPI USBH_HubIsBusPowered(IN PDEVICE_OBJECT DeviceObject, IN PUSB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor)
#define USBHUB_FDO_FLAG_DEVICE_STARTED
#define USBHUB_PDO_FLAG_DEVICE_STARTED
#define USBHUB_FDO_FLAG_USB20_HUB
#define USBHUB_PDO_FLAG_INSUFFICIENT_PWR
#define USBHUB_PDO_FLAG_PORT_RESSETING
#define USBHUB_PDO_FLAG_IDLE_NOTIFICATION
#define USBHUB_PDO_FLAG_HUB_DEVICE
#define USBHUB_PDO_FLAG_ALLOC_BNDW_FAILED
#define USBHUB_PDO_FLAG_PORT_RESTORE_FAIL
#define USBHUB_FDO_FLAG_WAIT_IDLE_REQUEST
#define USBHUB_PDO_FLAG_ENUMERATED
#define USBHUB_PDO_FLAG_NOT_CONNECTED
#define USBHUB_PDO_FLAG_REG_DEV_INTERFACE
#define USBHUB_FDO_FLAG_DEVICE_STOPPED
#define USBHUB_PDO_FLAG_DELETE_PENDING
#define IOCTL_INTERNAL_USB_SUBMIT_URB
#define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO
struct _USB_NODE_CONNECTION_DRIVERKEY_NAME USB_NODE_CONNECTION_DRIVERKEY_NAME
#define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION
struct _USB_DESCRIPTOR_REQUEST USB_DESCRIPTOR_REQUEST
#define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME
struct _USB_NODE_INFORMATION USB_NODE_INFORMATION
#define IOCTL_INTERNAL_USB_RESET_PORT
#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION
#define IOCTL_GET_HCD_DRIVERKEY_NAME
#define IOCTL_INTERNAL_USB_CYCLE_PORT
#define IOCTL_USB_GET_NODE_INFORMATION
#define IOCTL_USB_GET_NODE_CONNECTION_NAME
struct _USB_PIPE_INFO USB_PIPE_INFO
struct _USB_NODE_CONNECTION_NAME USB_NODE_CONNECTION_NAME
#define IOCTL_INTERNAL_USB_GET_HUB_COUNT
#define IOCTL_INTERNAL_USB_ENABLE_PORT
#define IOCTL_INTERNAL_USB_GET_BUS_INFO
#define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO
#define IOCTL_INTERNAL_USB_GET_HUB_NAME
#define USBD_PORT_ENABLED
#define USBD_PORT_CONNECTED
#define IOCTL_INTERNAL_USB_GET_PORT_STATUS
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_Must_inspect_result_ _In_ WDFDEVICE Device
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
_Must_inspect_result_ _In_ WDFUSBDEVICE _Out_writes_bytes_to_opt_ ConfigDescriptorLength PVOID ConfigDescriptor
_IRQL_requires_same_ typedef _In_ ULONG ControlCode
@ DevicePropertyDriverKeyName
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql