//#  (c) 2009 CodePlex Foundation
//#
//#  Title:                  Microsoft-Windows-usbport.events
//#
//#  Details:
//#
//#  Public References:      usbport.events.man
//#
//#  Comments:
//#
//#  Revision Class and Date:Minor, 07/15/2010
//#
//####

const IRP_MJ_DEVICE_CONTROL = 0xe;
const IRP_MJ_INTERNAL_DEVICE_CONTROL = 0xf;


[RegisterBefore(NetEvent.UserData, USBPort, "{c88a4ef5-d048-4013-9408-e04b7db2814a}")]
[RegisterBefore(NetEvent.UserData, USBHub, "{7426a56b-e2d5-4b30-bdef-b31815c1a74a}")]
Protocol USB = Property.ETLSummary
{
    // Properties
    // "USB Summary" property is an alias of "ETL Summary", and will be visible
    // to anyone searching for USB-related columns in the column chooser
    [Post.Property.USBSummary = Property.ETLSummary]
    [Post.Property.USBPortPath = IsValueNone(UsbPortPath.ToString) ? "-" : UsbPortPath.ToString]
    // USB Error Events, Hub Exceptions, or URB Errors
    [Post.Property.USBIsError =
        ((
            (USBPort AND NetEvent.Header.Descriptor.Opcode == 34)
            OR
            (USBHub AND NetEvent.Header.Descriptor.Opcode == 11)
            OR
            (NetEvent.Header.Descriptor.Level == 0x2)
            OR
            (USBHub AND NetEvent.Header.Descriptor.Id == 210)
            OR
            (Property.USBDStatus != "success" && Property.USBDStatus != "" && Property.USBDStatus != "canceled" && Property.USBDStatus != "pending")
            OR
            (Property.USBNtStatus != "success" && Property.USBNtStatus != "Success" && Property.USBNtStatus != "" && Property.USBNtStatus != "0xC0000120 - STATUS_CANCELLED")
        ) ? 1 : 0)]

    // Conversations
    // First level of tree: a node for each host controller
    // Key it to the HC identifier string
    [Post.ProxyBuildConversationWithParent("USB", USBPort_HostController.ToString)]
    // Compact host controller string. Gets data from the HC conversation.
    [Post.Property.USBHostController = FormatString("%x-%x%s", USBPort_HostController.PciDevice, USBPort_HostController.PciFunction, Conversation.USBIsEhci ? " e" : "")]
    // Name of host controller node
    // Due to the Protocol name of "USB", "Controller" becomes "USB Controller" as intended.
    [Post.Conversation.ConversationDescription =
        FormatString("Controller: (%s) PCI bus %d, device %d, function %d%s",
        Property.USBHostController,
        USBPort_HostController.PciBus, USBPort_HostController.PciDevice, USBPort_HostController.PciFunction, Conversation.USBIsEhci ? " (EHCI)" : ""
        )]
    // Proxy to UsbPort in case this is a UsbHub event
    [Post.ProxyBuildConversationWithParent("UsbPort", Property.USBPortPath)]
    [Post.Conversation.EventCount = ((IsValueNone(Conversation.EventCount) ? 0 : Conversation.EventCount) + 1)]
    [Post.Conversation.ErrorCount = ((IsValueNone(Conversation.ErrorCount) ? 0 : Conversation.ErrorCount) + Property.USBIsError)]
    // Name of port path node
    // Due to protocol name of "USBPort", this will read "USBPort Path: ..."
    [Post.Conversation.ConversationDescription = (FormatString("%s (Events: %d, Errors: %d)", (IsValueNone(Property.USBPortPath) ? "-" : FormatString("Path: %s", Property.USBPortPath)), Conversation.EventCount, Conversation.ErrorCount))]

    switch(Property.ETLProviderGUID)
    {
        case "{c88a4ef5-d048-4013-9408-e04b7db2814a}": USBPort UsbPort;
        case "{7426a56b-e2d5-4b30-bdef-b31815c1a74a}": USBHub UsbHub;
    }
}

Protocol USBPort = property.ETLSummary
{
    //
    // All URBs logged by Usbport *do not* include NTSTATUS
    //
    [Property.InternalUsbNtstatusUrbs = 0]
    switch(property.EventID)
    {
        case 1: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_ADD USBPORT_ETW_EVENT_HC_ADD;
        case 2: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_REMOVAL USBPORT_ETW_EVENT_HC_REMOVAL;
        case 3: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_INFORMATION USBPORT_ETW_EVENT_HC_INFORMATION;
        case 4: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_START USBPORT_ETW_EVENT_HC_START;
        case 5: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_STOP USBPORT_ETW_EVENT_HC_STOP;
        case 6: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_SUSPEND USBPORT_ETW_EVENT_HC_SUSPEND;
        case 7: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_RESUME USBPORT_ETW_EVENT_HC_RESUME;
        case 8: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_ASYNC_SCHEDULE_ENABLE USBPORT_ETW_EVENT_HC_ASYNC_SCHEDULE_ENABLE;
        case 9: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_ASYNC_SCHEDULE_DISABLE USBPORT_ETW_EVENT_HC_ASYNC_SCHEDULE_DISABLE;
        case 10: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_PERIODIC_SCHEDULE_ENABLE USBPORT_ETW_EVENT_HC_PERIODIC_SCHEDULE_ENABLE;
        case 11: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_PERIODIC_SCHEDULE_DISABLE USBPORT_ETW_EVENT_HC_PERIODIC_SCHEDULE_DISABLE;
        case 12: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DEVICE_CREATE USBPORT_ETW_EVENT_DEVICE_CREATE;
        case 13: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DEVICE_INITIALIZE USBPORT_ETW_EVENT_DEVICE_INITIALIZE;
        case 14: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DEVICE_REMOVAL USBPORT_ETW_EVENT_DEVICE_REMOVAL;
        case 15: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DEVICE_INFORMATION USBPORT_ETW_EVENT_DEVICE_INFORMATION;
        case 16: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DEVICE_IDLE_STATE_SET USBPORT_ETW_EVENT_DEVICE_IDLE_STATE_SET;
        case 17: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DEVICE_IDLE_STATE_CLEAR USBPORT_ETW_EVENT_DEVICE_IDLE_STATE_CLEAR;
        case 18: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_ENDPOINT_OPEN USBPORT_ETW_EVENT_ENDPOINT_OPEN;
        case 19: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_ENDPOINT_CLOSE USBPORT_ETW_EVENT_ENDPOINT_CLOSE;
        case 20: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_ENDPOINT_INFORMATION USBPORT_ETW_EVENT_ENDPOINT_INFORMATION;
        case 21: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SELECT_CONFIGURATION USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SELECT_CONFIGURATION;
        case 22: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SELECT_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SELECT_INTERFACE;
        case 23: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_CURRENT_FRAME_NUMBER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_CURRENT_FRAME_NUMBER;
        case 24: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CONTROL_TRANSFER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CONTROL_TRANSFER;
        case 25: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CONTROL_TRANSFER_EX USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CONTROL_TRANSFER_EX;
        case 26: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER;
        case 27: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_ISOCH_TRANSFER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_ISOCH_TRANSFER;
        case 28: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE;
        case 29: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE;
        case 30: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT;
        case 31: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT;
        case 32: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE;
        case 33: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE;
        case 34: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_DEVICE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_DEVICE;
        case 35: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_INTERFACE;
        case 36: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_ENDPOINT;
        case 37: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE;
        case 38: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE;
        case 39: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT;
        case 40: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_OTHER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_OTHER;
        case 41: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_OTHER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_OTHER;
        case 42: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_DEVICE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_DEVICE;
        case 43: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_INTERFACE;
        case 44: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_ENDPOINT;
        case 45: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_OTHER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_OTHER;
        case 46: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_DEVICE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_DEVICE;
        case 47: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_INTERFACE;
        case 48: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_ENDPOINT;
        case 49: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_DEVICE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_DEVICE;
        case 50: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_INTERFACE;
        case 51: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_ENDPOINT;
        case 52: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_OTHER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_OTHER;
        case 53: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_OTHER USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_OTHER;
        case 54: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_ABORT_PIPE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_ABORT_PIPE;
        case 55: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL;
        case 56: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_RESET_PIPE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_RESET_PIPE;
        case 57: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_CLEAR_STALL USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_CLEAR_STALL;
        case 58: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_CONFIGURATION USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_CONFIGURATION;
        case 59: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_INTERFACE USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_INTERFACE;
        case 60: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR;
        case 61: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL;
        case 62: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL;
        case 63: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_FRAME_LENGTH USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_FRAME_LENGTH;
        case 64: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FRAME_LENGTH USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FRAME_LENGTH;
        case 65: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_RESERVED USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_RESERVED;
        case 66: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER;
        case 67: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_EX USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_EX;
        case 68: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_DATA USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_DATA;
        case 69: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_EX_DATA USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_EX_DATA;
        case 70: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER;
        case 71: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_DATA USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_DATA;
        case 72: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ISOCH_TRANSFER USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ISOCH_TRANSFER;
        case 73: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ISOCH_TRANSFER_DATA USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ISOCH_TRANSFER_DATA;
        case 74: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER USBPORT_ETW_EVENT_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER;
        case 75: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER USBPORT_ETW_EVENT_COMPLETE_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER;
        case 76: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER_DATA USBPORT_ETW_EVENT_COMPLETE_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER_DATA;
        case 77: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ABORT_PIPE USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ABORT_PIPE;
        case 78: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_HEADER_LENGTH_WARNING USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_HEADER_LENGTH_WARNING;
        case 79: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION;
        case 80: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_HEADER_LENGTH USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_HEADER_LENGTH;
        case 81: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_DEVICE_HANDLE USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_DEVICE_HANDLE;
        case 82: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION_NOT_SUPPORTED USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION_NOT_SUPPORTED;
        case 83: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION_RESERVED USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION_RESERVED;
        case 84: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_DUE_TO_HC_SUSPEND USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_DUE_TO_HC_SUSPEND;
        case 85: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_URB_LINK USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_URB_LINK;
        case 86: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_PIPE_HANDLE USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_PIPE_HANDLE;
        case 87: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ZERO_BW_PIPE_HANDLE USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ZERO_BW_PIPE_HANDLE;
        case 88: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_NOP_ZERO_BW_PIPE_HANDLE_REQUEST USBPORT_ETW_EVENT_DISPATCH_URB_NOP_ZERO_BW_PIPE_HANDLE_REQUEST;
        case 89: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_CONTROL_TRANSFER_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_CONTROL_TRANSFER_ENDPOINT;
        case 90: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_CONTROL_TRANSFER_BUFFER_LENGTH USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_CONTROL_TRANSFER_BUFFER_LENGTH;
        case 91: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_BULK_OR_INTERRUPT_TRANSFER_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_BULK_OR_INTERRUPT_TRANSFER_ENDPOINT;
        case 92: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_BULK_OR_INTERRUPT_TRANSFER_BUFFER_LENGTH USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_BULK_OR_INTERRUPT_TRANSFER_BUFFER_LENGTH;
        case 93: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_TRANSFER_ENDPOINT USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_TRANSFER_ENDPOINT;
        case 94: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_NULL_TRANSFER_BUFFER_AND_MDL USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_NULL_TRANSFER_BUFFER_AND_MDL;
        case 95: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_NON_NULL_TRANSFER_BUFFER_MDL USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_NON_NULL_TRANSFER_BUFFER_MDL;
        case 96: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_ALLOCATE_MDL_FAILURE USBPORT_ETW_EVENT_DISPATCH_URB_ALLOCATE_MDL_FAILURE;
        case 97: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_ALLOCATE_TRANSFER_CONTEXT_FAILURE USBPORT_ETW_EVENT_DISPATCH_URB_ALLOCATE_TRANSFER_CONTEXT_FAILURE;
        case 98: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_NOP_ROOTHUB_PIPE_HANDLE_REQUEST USBPORT_ETW_EVENT_DISPATCH_URB_NOP_ROOTHUB_PIPE_HANDLE_REQUEST;
        case 99: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_ZERO_LENGTH USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_ZERO_LENGTH;
        case 100: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_NUM_PACKETS USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_NUM_PACKETS;
        case 101: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_START_FRAME USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_START_FRAME;
        case 102: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_IRP_CANCEL USBPORT_ETW_EVENT_IRP_CANCEL;
        case 103: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_DISPATCH USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_DISPATCH;
        case 104: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS1 USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS1;
        case 105: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS2 USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS2;
        case 106: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS3 USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS3;
        case 107: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_COMPLETE USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_COMPLETE;
        case 108: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_DISPATCH USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_DISPATCH;
        case 109: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_DISPATCH_DATA USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_DISPATCH_DATA;
        case 110: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_TIMEOUT USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_TIMEOUT;
        case 111: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_COMPLETE USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_COMPLETE;
        case 112: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_COMPLETE_DATA USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_COMPLETE_DATA;
        case 113: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_CODE_EXECUTION_TIME USBPORT_ETW_EVENT_CODE_EXECUTION_TIME;
        case 114: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_PUT_SGLIST_EXECUTION_TIME USBPORT_ETW_EVENT_PUT_SGLIST_EXECUTION_TIME;
        case 115: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_BUILD_SGLIST_EXECUTION_TIME USBPORT_ETW_EVENT_BUILD_SGLIST_EXECUTION_TIME;
        case 1024: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_DISPATCH USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_DISPATCH;
        case 1025: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE;
        case 1026: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_1 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_1;
        case 1027: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_2 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_2;
        case 1028: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_3 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_3;
        case 1029: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_4 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_4;
        case 1030: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_5 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_5;
        case 1031: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_STOP_DISPATCH USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_STOP_DISPATCH;
        case 1032: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_STOP_COMPLETE USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_STOP_COMPLETE;
        case 1033: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_SUSPEND_DISPATCH USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_SUSPEND_DISPATCH;
        case 1034: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_SUSPEND_COMPLETE USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_SUSPEND_COMPLETE;
        case 1035: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_DISPATCH USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_DISPATCH;
        case 1036: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE;
        case 1037: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_1 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_1;
        case 1038: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_2 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_2;
        case 1039: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_3 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_3;
        case 1040: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_4 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_4;
        case 1041: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_5 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_5;
        case 1042: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_6 USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_6;
        case 1043: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_DEVICE_DATA USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_DEVICE_DATA;
        case 2048: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_DISPATCH USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_DISPATCH;
        case 2049: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE;
        case 2050: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_1 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_1;
        case 2051: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_2 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_2;
        case 2052: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_3 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_3;
        case 2053: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_4 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_4;
        case 2054: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_5 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_5;
        case 2055: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_STOP_DISPATCH USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_STOP_DISPATCH;
        case 2056: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_STOP_COMPLETE USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_STOP_COMPLETE;
        case 2057: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_SUSPEND_DISPATCH USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_SUSPEND_DISPATCH;
        case 2058: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_SUSPEND_COMPLETE USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_SUSPEND_COMPLETE;
        case 2059: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_DISPATCH USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_DISPATCH;
        case 2060: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE;
        case 2061: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_1 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_1;
        case 2062: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_2 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_2;
        case 2063: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_3 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_3;
        case 2064: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_4 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_4;
        case 2065: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_5 USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_5;
        case 3072: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_DISPATCH USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_DISPATCH;
        case 3073: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE;
        case 3074: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_1 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_1;
        case 3075: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_2 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_2;
        case 3076: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_3 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_3;
        case 3077: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_4 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_4;
        case 3078: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_STOP_DISPATCH USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_STOP_DISPATCH;
        case 3079: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_STOP_COMPLETE USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_STOP_COMPLETE;
        case 3080: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_SUSPEND_DISPATCH USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_SUSPEND_DISPATCH;
        case 3081: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_SUSPEND_COMPLETE USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_SUSPEND_COMPLETE;
        case 3082: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_DISPATCH USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_DISPATCH;
        case 3083: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE;
        case 3084: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_1 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_1;
        case 3085: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_2 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_2;
        case 3086: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_3 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_3;
        case 3087: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_4 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_4;
        case 3088: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_5 USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_5;
        case 3089: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_RTPM_TRANSITION USBPORT_ETW_EVENT_RTPM_TRANSITION;
        case 3090: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_DISPATCH_WAIT_WAKE USBPORT_ETW_EVENT_DISPATCH_WAIT_WAKE;
        case 3091: [property.ETLSummary = this.ToString] USBPort_USBPORT_ETW_EVENT_COMPLETE_WAIT_WAKE USBPORT_ETW_EVENT_COMPLETE_WAIT_WAKE;
        default: [property.ETLSummary = "Not exist EventID"]struct{};
    }
}
Table RunTimePmSetupStatus(value)
{
    switch(value)
    {
        case 0: "Successful";
        case 1: "FailedDueToCompanionController";
        case 2: "FailedDueToNoS0WakeSupport";
        case 3: "FailedDueToFailedPoRegistration";
        default:
            FormatString("Unknown value: %d", value);
    }
}
Table RunTimePmEvent(value)
{
    switch(value)
    {
        case 0: "PowerRequiredCallbackInvoked";
        case 1: "PowerNotRequiredCallbackInvoked";
        case 2: "ActiveCallbackInvoked";
        case 3: "IdleCallbackInvoked";
        case 4: "EnteredD0";
        case 5: "EnteredD2";
        case 6: "EnteredD3";
        default:
            FormatString("Unknown value: %d", value);
    }
}
Struct USBPort_USBPORT_ETW_EVENT_HC_ADD = FormatString("Host Controller Add")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_REMOVAL = FormatString("Host Controller Removal")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_INFORMATION = FormatString("Host Controller Information")
{
    // Get to the host controller conversation just so we can modify the USBIsEhci property of the conversation (not sure how this works exactly)
    [Post.ProxyBuildConversationWithParent("USB", USBPort_HostController.ToString)]
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_HC_Idle_Status
    {
        [Conversation.USBIsEhci = this]
        UINT8 fid_HC_HighSpeed;
        UINT8 fid_HC_Run;
        UINT8 fid_HC_AsyncScheduleEnable;
        UINT8 fid_HC_PeriodicScheduleEnable;
    }
    UnicodeString fid_USBPORT_HC_Pdo_Name;
    UINT32 fid_RunTimePmSetupStatus = RunTimePmSetupStatus(this);
    UINT32 fid_DevicePowerState;
    AsciiString fid_AcpiInstanceId;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_START = FormatString("Host Controller Start")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_STOP = FormatString("Host Controller Stop")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_SUSPEND = FormatString("Host Controller Suspend")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_RESUME = FormatString("Host Controller Resume")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_ASYNC_SCHEDULE_ENABLE = FormatString("Host Controller Async Schedule Enable")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_ASYNC_SCHEDULE_DISABLE = FormatString("Host Controller Async Schedule Disable")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_PERIODIC_SCHEDULE_ENABLE = FormatString("Host Controller Periodic Schedule Enable")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_PERIODIC_SCHEDULE_DISABLE = FormatString("Host Controller Periodic Schedule Disable")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_DEVICE_CREATE = FormatString("Device Create")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    USB_DEVICE_DESCRIPTOR fid_USBPORT_Device_Descriptor;
}
Struct USBPort_USBPORT_ETW_EVENT_DEVICE_INITIALIZE = FormatString("Device Initialize")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    USB_DEVICE_DESCRIPTOR fid_USBPORT_Device_Descriptor;
}
Struct USBPort_USBPORT_ETW_EVENT_DEVICE_REMOVAL = FormatString("Device Removal")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DEVICE_INFORMATION = FormatString("Device Information")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    USB_DEVICE_DESCRIPTOR fid_USBPORT_Device_Descriptor;
    UnicodeString(16) fid_USBPORT_Device_Driver_Name;
    UINT32 fid_USBPORT_Device_Idle_State;
    UnicodeString fid_USBPORT_Device_Pdo_Name;
}
Struct USBPort_USBPORT_ETW_EVENT_DEVICE_IDLE_STATE_SET = FormatString("Device Idle State Set")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    UINT32 fid_USBPORT_Device_Idle_Previous_State;
    UINT32 fid_USBPORT_Device_Idle_New_State;
}
Struct USBPort_USBPORT_ETW_EVENT_DEVICE_IDLE_STATE_CLEAR = FormatString("Device Idle State Clear")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    UINT32 fid_USBPORT_Device_Idle_Previous_State;
    UINT32 fid_USBPORT_Device_Idle_New_State;
}
Struct USBPort_USBPORT_ETW_EVENT_ENDPOINT_OPEN = FormatString("Endpoint Open")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_ENDPOINT_CLOSE = FormatString("Endpoint Close")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_ENDPOINT_INFORMATION = FormatString("Endpoint Information")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SELECT_CONFIGURATION = FormatString("Dispatch URB_FUNCTION_SELECT_CONFIGURATION")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    UINT16 fid_URB_Length;
    UINT8 fid_URB[fid_URB_Length];
    UINT16 fid_Configuration_Descriptor_Length;
    UINT8 fid_Configuration_Descriptor[fid_Configuration_Descriptor_Length];
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SELECT_INTERFACE = FormatString("Dispatch URB_FUNCTION_SELECT_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    UINT16 fid_URB_Length;
    UINT8 fid_URB[fid_URB_Length];
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_CURRENT_FRAME_NUMBER = FormatString("Dispatch URB_FUNCTION_GET_CURRENT_FRAME_NUMBER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    UINT32 fid_URB_FrameNumber;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CONTROL_TRANSFER = FormatString("Dispatch URB_FUNCTION_CONTROL_TRANSFER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CONTROL_TRANSFER_EX = FormatString("Dispatch URB_FUNCTION_CONTROL_TRANSFER_EX")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER = FormatString("Dispatch URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    URB Urb;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_ISOCH_TRANSFER = FormatString("Dispatch URB_FUNCTION_ISOCH_TRANSFER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    UINT16 fid_USBPORT_URB_NumberOfPackets;
    URB Urb;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE = FormatString("Dispatch URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE = FormatString("Dispatch URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT = FormatString("Dispatch URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT = FormatString("Dispatch URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE = FormatString("Dispatch URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE = FormatString("Dispatch URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_DEVICE = FormatString("Dispatch URB_FUNCTION_SET_FEATURE_TO_DEVICE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_INTERFACE = FormatString("Dispatch URB_FUNCTION_SET_FEATURE_TO_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_ENDPOINT = FormatString("Dispatch URB_FUNCTION_SET_FEATURE_TO_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE = FormatString("Dispatch URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE = FormatString("Dispatch URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT = FormatString("Dispatch URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLEAR_FEATURE_TO_OTHER = FormatString("Dispatch URB_FUNCTION_CLEAR_FEATURE_TO_OTHER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FEATURE_TO_OTHER = FormatString("Dispatch URB_FUNCTION_SET_FEATURE_TO_OTHER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_DEVICE = FormatString("Dispatch URB_FUNCTION_GET_STATUS_FROM_DEVICE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_INTERFACE = FormatString("Dispatch URB_FUNCTION_GET_STATUS_FROM_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_ENDPOINT = FormatString("Dispatch URB_FUNCTION_GET_STATUS_FROM_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_STATUS_FROM_OTHER = FormatString("Dispatch URB_FUNCTION_GET_STATUS_FROM_OTHER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_DEVICE = FormatString("Dispatch URB_FUNCTION_VENDOR_DEVICE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_INTERFACE = FormatString("Dispatch URB_FUNCTION_VENDOR_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_ENDPOINT = FormatString("Dispatch URB_FUNCTION_VENDOR_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_DEVICE = FormatString("Dispatch URB_FUNCTION_CLASS_DEVICE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_INTERFACE = FormatString("Dispatch URB_FUNCTION_CLASS_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_ENDPOINT = FormatString("Dispatch URB_FUNCTION_CLASS_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_CLASS_OTHER = FormatString("Dispatch URB_FUNCTION_CLASS_OTHER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_VENDOR_OTHER = FormatString("Dispatch URB_FUNCTION_VENDOR_OTHER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_ABORT_PIPE = FormatString("Dispatch URB_FUNCTION_ABORT_PIPE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_URB_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
        UINT32 fid_Reserved;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL = FormatString("Dispatch URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_URB_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
        UINT32 fid_Reserved;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_RESET_PIPE = FormatString("Dispatch URB_FUNCTION_SYNC_RESET_PIPE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_URB_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
        UINT32 fid_Reserved;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SYNC_CLEAR_STALL = FormatString("Dispatch URB_FUNCTION_SYNC_CLEAR_STALL")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_URB_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
        UINT32 fid_Reserved;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_CONFIGURATION = FormatString("Dispatch URB_FUNCTION_GET_CONFIGURATION")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_INTERFACE = FormatString("Dispatch URB_FUNCTION_GET_INTERFACE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR = FormatString("Dispatch URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL = "Dispatch URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL" {}; // Empty Struct
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL = "Dispatch URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL" {}; // Empty Struct
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_GET_FRAME_LENGTH = "Dispatch URB_FUNCTION_GET_FRAME_LENGTH" {}; // Empty Struct
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_SET_FRAME_LENGTH = "Dispatch URB_FUNCTION_SET_FRAME_LENGTH" {}; // Empty Struct
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_FUNCTION_RESERVED = "Dispatch URB_FUNCTION_RESERVED" {}; // Empty Struct

[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER = FormatString("Complete URB_FUNCTION_CONTROL_TRANSFER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_EX = FormatString("Complete URB_FUNCTION_CONTROL_TRANSFER_EX")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_DATA = FormatString("Complete URB_FUNCTION_CONTROL_TRANSFER with Data")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP_AND_DATA ControlTransfer;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_CONTROL_TRANSFER_EX_DATA = FormatString("Complete URB_FUNCTION_CONTROL_TRANSFER_EX with Data")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP_AND_DATA ControlTransfer;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER = FormatString("Complete URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    URB Urb;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_DATA = FormatString("Complete URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER with Data")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    URB Urb;
    UINT16 fid_URB_TransferDataLength;
    UINT8 fid_URB_TransferData[fid_URB_TransferDataLength];
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ISOCH_TRANSFER = FormatString("Complete COMPLETE_URB_FUNCTION_ISOCH_TRANSFER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    UINT16 fid_USBPORT_URB_NumberOfPackets;
    URB Urb;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ISOCH_TRANSFER_DATA = FormatString("Complete COMPLETE_URB_FUNCTION_ISOCH_TRANSFER with Data")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    UINT16 fid_USBPORT_URB_NumberOfPackets;
    URB Urb;
}
Struct USBPort_USBPORT_ETW_EVENT_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER = FormatString("Internal URB_FUNCTION_CONTROL_TRANSFER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER = FormatString("Complete Internal URB_FUNCTION_CONTROL_TRANSFER")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_INTERNAL_URB_FUNCTION_CONTROL_TRANSFER_DATA = FormatString("Complete Internal URB_FUNCTION_CONTROL_TRANSFER with Data")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP_AND_DATA ControlTransfer;
}
[Property.InternalUsbIsUrbCompletion = 1]
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_URB_FUNCTION_ABORT_PIPE = FormatString("Complete URB_FUNCTION_ABORT_PIPE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_URB_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
        UINT32 fid_Reserved;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_HEADER_LENGTH_WARNING = FormatString("Dispatch URB INVALID_HEADER_LENGTH_WARNING")
{
    USBPort_HostController2 HostController;
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION = FormatString("Dispatch URB INVALID_FUNCTION")
{
    USBPort_HostController2 HostController;
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_HEADER_LENGTH = FormatString("Dispatch URB INVALID_HEADER_LENGTH")
{
    USBPort_HostController2 HostController;
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_DEVICE_HANDLE = FormatString("Dispatch URB INVALID_DEVICE_HANDLE")
{
    USBPort_HostController2 HostController;
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION_NOT_SUPPORTED = FormatString("Dispatch URB INVALID_FUNCTION_NOT_SUPPORTED")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_FUNCTION_RESERVED = FormatString("Dispatch URB INVALID_FUNCTION_RESERVED")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_DUE_TO_HC_SUSPEND = FormatString("Dispatch URB INVALID_DUE_TO_HC_SUSPEND")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_URB_LINK = FormatString("Dispatch URB INVALID_URB_LINK")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_PIPE_HANDLE = FormatString("Dispatch URB INVALID_PIPE_HANDLE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_INVALID_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ZERO_BW_PIPE_HANDLE = FormatString("Dispatch URB INVALID_ZERO_BW_PIPE_HANDLE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_INVALID_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_NOP_ZERO_BW_PIPE_HANDLE_REQUEST = FormatString("Dispatch URB NOP_ZERO_BW_PIPE_HANDLE_REQUEST")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_INVALID_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_CONTROL_TRANSFER_ENDPOINT = FormatString("Dispatch URB INVALID_CONTROL_TRANSFER_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_CONTROL_TRANSFER_BUFFER_LENGTH = FormatString("Dispatch URB INVALID_CONTROL_TRANSFER_BUFFER_LENGTH")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    CONTROL_TRANSFER_URB_SETUP ControlTransfer;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_BULK_OR_INTERRUPT_TRANSFER_ENDPOINT = FormatString("Dispatch URB INVALID_BULK_OR_INTERRUPT_TRANSFER_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    URB Urb;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_BULK_OR_INTERRUPT_TRANSFER_BUFFER_LENGTH = FormatString("Dispatch URB INVALID_BULK_OR_INTERRUPT_TRANSFER_BUFFER_LENGTH")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    URB Urb;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_TRANSFER_ENDPOINT = FormatString("Dispatch URB INVALID_ISOCHRONOUS_TRANSFER_ENDPOINT")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    URB Urb;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_NULL_TRANSFER_BUFFER_AND_MDL = FormatString("Dispatch URB INVALID_NULL_TRANSFER_BUFFER_AND_MDL")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_NON_NULL_TRANSFER_BUFFER_MDL = FormatString("Dispatch URB INVALID_NON_NULL_TRANSFER_BUFFER_MDL")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_ALLOCATE_MDL_FAILURE = FormatString("Dispatch URB ALLOCATE_MDL_FAILURE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_ALLOCATE_TRANSFER_CONTEXT_FAILURE = FormatString("Dispatch URB ALLOCATE_TRANSFER_CONTEXT_FAILURE")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_HEADER
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_NOP_ROOTHUB_PIPE_HANDLE_REQUEST = FormatString("Dispatch URB NOP_ROOTHUB_PIPE_HANDLE_REQUEST")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    struct  fid_USBPORT_URB_INVALID_PIPE_REQUEST
    {
        UINT16 fid_URB_Hdr_Length;
        UINT16 fid_URB_Hdr_Function;
        UINT32 fid_URB_Hdr_Status;
        EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
        EtlPtr fid_URB_Hdr_UsbdFlags;
        EtlPtr fid_URB_PipeHandle;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_ZERO_LENGTH = FormatString("Dispatch URB INVALID_ISOCHRONOUS_ZERO_LENGTH")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    URB Urb;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_NUM_PACKETS = FormatString("Dispatch URB INVALID_ISOCHRONOUS_NUM_PACKETS")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    URB Urb;
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_URB_INVALID_ISOCHRONOUS_START_FRAME = FormatString("Dispatch URB INVALID_ISOCHRONOUS_START_FRAME")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    EtlPtr fid_IRP_Ptr;
    UsbUrbPtr fid_URB_Ptr;
    UINT16 fid_USBPORT_URB_NumberOfPackets;
    URB Urb;
    UINT32 fid_URB_FrameNumber;
}
Struct USBPort_USBPORT_ETW_EVENT_IRP_CANCEL = FormatString("Irp Cancel")
{
    USBPort_HostController2 HostController;
    EtlPtr fid_IRP_Ptr;
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_DISPATCH = FormatString("USBUSER_OP_RAW_RESET_PORT Dispatch")
{
    USBPort_HostController2 HostController;
    UINT16 fid_PortNumber;
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS1 = FormatString("USBUSER_OP_RAW_RESET_PORT GetPortStatus after SetFeaturePortPower")
{
    USBPort_HostController2 HostController;
    UINT16 fid_PortNumber;
    UINT32 fid_PortStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS2 = FormatString("USBUSER_OP_RAW_RESET_PORT GetPortStatus after SetFeaturePortReset")
{
    USBPort_HostController2 HostController;
    UINT16 fid_PortNumber;
    UINT32 fid_PortStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_STATUS3 = FormatString("USBUSER_OP_RAW_RESET_PORT GetPortStatus after ClearFeaturePortResetChange")
{
    USBPort_HostController2 HostController;
    UINT16 fid_PortNumber;
    UINT32 fid_PortStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_RAW_RESET_PORT_COMPLETE = FormatString("USBUSER_OP_RAW_RESET_PORT Complete")
{
    USBPort_HostController2 HostController;
    UINT16 fid_PortNumber;
    UINT32 fid_UsbStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_DISPATCH = FormatString("USBUSER_OP_SEND_ONE_PACKET Dispatch")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Usbuser_Op_Send_One_Packet
    {
        UINT8 fid_DeviceAddress;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_EndpointAddress;
        UINT16 fid_MaximumPacketSize;
        UINT32 fid_Timeout;
        UINT32 fid_UsbPacketFlags;
        UINT32 fid_DataLength;
        UINT16 fid_HubDeviceAddress;
        UINT16 fid_PortTTNumber;
        USBD_STATUS fid_UsbdStatus;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_DISPATCH_DATA = FormatString("USBUSER_OP_SEND_ONE_PACKET Dispatch with Data")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Usbuser_Op_Send_One_Packet
    {
        UINT8 fid_DeviceAddress;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_EndpointAddress;
        UINT16 fid_MaximumPacketSize;
        UINT32 fid_Timeout;
        UINT32 fid_UsbPacketFlags;
        UINT32 fid_DataLength;
        UINT16 fid_HubDeviceAddress;
        UINT16 fid_PortTTNumber;
        USBD_STATUS fid_UsbdStatus;
    }
    UINT16 fid_PacketDataLength;
    UINT8 fid_PacketData[fid_PacketDataLength];
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_TIMEOUT = FormatString("USBUSER_OP_SEND_ONE_PACKET Timeout")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Usbuser_Op_Send_One_Packet
    {
        UINT8 fid_DeviceAddress;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_EndpointAddress;
        UINT16 fid_MaximumPacketSize;
        UINT32 fid_Timeout;
        UINT32 fid_UsbPacketFlags;
        UINT32 fid_DataLength;
        UINT16 fid_HubDeviceAddress;
        UINT16 fid_PortTTNumber;
        USBD_STATUS fid_UsbdStatus;
    }
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_COMPLETE = FormatString("USBUSER_OP_SEND_ONE_PACKET Complete")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Usbuser_Op_Send_One_Packet
    {
        UINT8 fid_DeviceAddress;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_EndpointAddress;
        UINT16 fid_MaximumPacketSize;
        UINT32 fid_Timeout;
        UINT32 fid_UsbPacketFlags;
        UINT32 fid_DataLength;
        UINT16 fid_HubDeviceAddress;
        UINT16 fid_PortTTNumber;
        USBD_STATUS fid_UsbdStatus;
    }
    UINT32 fid_UsbStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_USBUSER_OP_SEND_ONE_PACKET_COMPLETE_DATA = FormatString("USBUSER_OP_SEND_ONE_PACKET Complete with Data")
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Usbuser_Op_Send_One_Packet
    {
        UINT8 fid_DeviceAddress;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_EndpointAddress;
        UINT16 fid_MaximumPacketSize;
        UINT32 fid_Timeout;
        UINT32 fid_UsbPacketFlags;
        UINT32 fid_DataLength;
        UINT16 fid_HubDeviceAddress;
        UINT16 fid_PortTTNumber;
        USBD_STATUS fid_UsbdStatus;
    }
    UINT16 fid_PacketDataLength;
    UINT8 fid_PacketData[fid_PacketDataLength];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_DISPATCH = FormatString("EHCI Miniport Start Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE = FormatString("EHCI Miniport Start Complete")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_1 = FormatString("EHCI Miniport Start Complete Error - Invalid Resources")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_2 = FormatString("EHCI Miniport Start Complete Error - Hardware Gone")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_3 = FormatString("EHCI Miniport Start Complete Error - Stop BIOS")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_4 = FormatString("EHCI Miniport Start Complete Error - Initialize Hardware")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_START_COMPLETE_ERROR_5 = FormatString("EHCI Miniport Start Complete Error - Initialize Schedule")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_STOP_DISPATCH = FormatString("EHCI Miniport Stop Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_STOP_COMPLETE = FormatString("EHCI Miniport Stop Complete")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_SUSPEND_DISPATCH = FormatString("EHCI Miniport Suspend Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_SUSPEND_COMPLETE = FormatString("EHCI Miniport Suspend Complete")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_DISPATCH = FormatString("EHCI Miniport Resume Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE = FormatString("EHCI Miniport Resume Complete")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_1 = FormatString("EHCI Miniport Resume Complete Error - Hardware Gone")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_2 = FormatString("EHCI Miniport Resume Complete Error - HcHalted")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_3 = FormatString("EHCI Miniport Resume Complete Error - ConfigFlag")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_4 = FormatString("EHCI Miniport Resume Complete Error - PortPower")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_5 = FormatString("EHCI Miniport Resume Complete Error - PortOwnedByCC")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_RESUME_COMPLETE_ERROR_6 = FormatString("EHCI Miniport Resume Complete Error - OvercurrentChange")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_EHCI_MINIPORT_DEVICE_DATA = FormatString("EHCI Miniport Device Data")
{
    USBPort_HostController2 HostController;
    UINT32 fid_HcSuspendedFlag;
    UINT32 fid_SuspendHcNotHalted;
    UINT32 fid_HostSystemErrorCount;
    UINT32 fid_HostSystemErrorResetNeeded;
    UINT32 fid_StatAsyncEnableCount;
    UINT32 fid_StatAsyncDisableCount;
    UINT32 fid_StatPeriodicEnableCount;
    UINT32 fid_StatPeriodicDisableCount;
    UINT32 fid_StatAsyncEnableTimeoutCount;
    UINT32 fid_StatAsyncDisableTimeoutCount;
    UINT32 fid_StatPeriodicEnableTimeoutCount;
    UINT32 fid_StatPeriodicDisableTimeoutCount;
    UINT32 fid_StatRingDoorbellDisabledCount;
    UINT32 fid_StatRingDoorbellDisablingCount;
    UINT32 fid_StatRingDoorbellEnablingCount;
    UINT32 fid_StatRingDoorbellEnabledCount;
    UINT32 fid_StatRingDoorbellHwRemovedCount;
    UINT32 fid_StatAnswerDoorbell;
    UINT32 fid_StatAsyncCacheFlushIdle;
    UINT32 fid_StatAsyncCacheFlushNormal;
    UINT32 fid_StatAsyncCacheFlushRetry;
    UINT32 fid_StatIntOnAsyncAdvancePendingCount;
    UINT32 fid_StatIntOnAsyncAdvanceSyncRoutineCount;
    UINT32 fid_StatRingDoorbellEnabledWithRetryCount;
    UINT32 fid_StatRingDoorbellEnabledWithRetryIgnoredCount;
    UINT32 fid_StatAsyncCacheFlushPrevented;
    UINT32 fid_CurrentRingDoorbellDisablingTimerCount;
    UINT32 fid_CurrentRingDoorbellEnablingTimerCount;
    UINT32 fid_CurrentRingDoorbellEnabledTimerCount;
    UINT32 fid_CurrentIntOnAsyncAdvancePendingCount;
    UINT32 fid_StatResetNeededCount;
    UINT32 fid_ResetNeeded;
    UINT32 fid_ResetRecoveryEnable;
    UINT32 fid_ResetRecoveryBreak;
    UINT32 fid_AsyncScheduleState;
    UINT32 fid_AsyncDoorbellState;
    UINT32 fid_PeriodicScheduleState;
    UINT32 fid_EhciInternalFlags;
    UINT8 fid_PreventCmdChangesWithDoorbellPending;
    UINT8 fid_OptimizeInactiveQhFlush;
    UINT8 fid_DisableTwoDoorbellWorkaround;
    UINT8 fid_StrictTransitionChecksEnabled;
    UINT8 fid_IntegratedTTSupportRegistryOverride;
    UINT32 fid_CurrentAsyncEnableCount;
    UINT32 fid_InitialDoorbellRetryEnableValue;
    UINT32 fid_CurrentDoorbellRetryEnableValue;
    UINT32 fid_DoorbellRetryRequired;
    UINT32 fid_PeriodicEnableChangeWithDoorbellPending;
    UINT32 fid_PeriodicDisableChangeWithDoorbellPending;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_DISPATCH = FormatString("OHCI Miniport Start Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE = FormatString("OHCI Miniport Start Complete")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_1 = FormatString("OHCI Miniport Start Complete Error - Invalid Resources")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_2 = FormatString("OHCI Miniport Start Complete Error - Hardware Gone")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_3 = FormatString("OHCI Miniport Start Complete Error - Stop BIOS")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_4 = FormatString("OHCI Miniport Start Complete Error - Initialize Schedule")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_START_COMPLETE_ERROR_5 = FormatString("OHCI Miniport Start Complete Error - Initialize Hardware")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_STOP_DISPATCH = FormatString("OHCI Miniport Stop Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_STOP_COMPLETE = FormatString("OHCI Miniport Stop Complete")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_SUSPEND_DISPATCH = FormatString("OHCI Miniport Suspend Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_SUSPEND_COMPLETE = FormatString("OHCI Miniport Suspend Complete")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_DISPATCH = FormatString("OHCI Miniport Resume Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE = FormatString("OHCI Miniport Resume Complete")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_1 = FormatString("OHCI Miniport Resume Complete Error - Hardware Gone")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_2 = FormatString("OHCI Miniport Resume Complete Error - HcControl")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_3 = FormatString("OHCI Miniport Resume Complete Error - HcHCCA")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_4 = FormatString("OHCI Miniport Resume Complete Error - HcRhS_OverCurrentIndicatorChange")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_OHCI_MINIPORT_RESUME_COMPLETE_ERROR_5 = FormatString("OHCI Miniport Resume Complete Error - HcRhPS_OverCurrentIndicatorChange")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_DISPATCH = FormatString("UHCI Miniport Start Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE = FormatString("UHCI Miniport Start Complete")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_1 = FormatString("UHCI Miniport Start Complete Error - Invalid Resources")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_2 = FormatString("UHCI Miniport Start Complete Error - Stop BIOS")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_3 = FormatString("UHCI Miniport Start Complete Error - Initialize Hardware")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_START_COMPLETE_ERROR_4 = FormatString("UHCI Miniport Start Complete Error - Initialize Schedule")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_STOP_DISPATCH = FormatString("UHCI Miniport Stop Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_STOP_COMPLETE = FormatString("UHCI Miniport Stop Complete")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_SUSPEND_DISPATCH = FormatString("UHCI Miniport Suspend Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_SUSPEND_COMPLETE = FormatString("UHCI Miniport Suspend Complete")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_DISPATCH = FormatString("UHCI Miniport Resume Dispatch")
{
    USBPort_HostController2 HostController;
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE = FormatString("UHCI Miniport Resume Complete")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_1 = FormatString("UHCI Miniport Resume Complete Error - Hardware Gone")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_2 = FormatString("UHCI Miniport Resume Complete Error - EnterGlobalSuspendMode")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_3 = FormatString("UHCI Miniport Resume Complete Error - ForceGlobalResume")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_4 = FormatString("UHCI Miniport Resume Complete Error - FrameNumber")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_HC_UHCI_MINIPORT_RESUME_COMPLETE_ERROR_5 = FormatString("UHCI Miniport Resume Complete Error - OvercurrentChange")
{
    USBPort_HostController2 HostController;
    UINT32 fid_MiniportStatus;
    UINT16 fid_NumberOfPorts;
    UINT32 fid_SuspendPortStatus[fid_NumberOfPorts];
    UINT32 fid_ResumePortStatus[fid_NumberOfPorts];
}
Struct USBPort_USBPORT_ETW_EVENT_RTPM_TRANSITION = FormatString("Run Time Power Management Transition: %s", RunTimePmEvent(fid_RunTimePmEvent))
{
    USBPort_HostController2 HostController;
    UINT32 fid_RunTimePmEvent = RunTimePmEvent(this);
}
Struct USBPort_USBPORT_ETW_EVENT_DISPATCH_WAIT_WAKE = FormatString("Dispatch IRP_MN_WAIT_WAKE")
{
    USBPort_HostController2 HostController;
    EtlPtr fid_IRP_Ptr;
    UINT32 fid_Status;
}
Struct USBPort_USBPORT_ETW_EVENT_COMPLETE_WAIT_WAKE = FormatString("Complete IRP_MN_WAIT_WAKE")
{
    USBPort_HostController2 HostController;
    EtlPtr fid_IRP_Ptr;
    UINT32 fid_Status;
}
struct USBPort_fid_USBPORT_URB_ISO_PACKETS //Array Struct
{
    UINT32 fid_URB_Packet_Offset;
    UINT32 fid_URB_Packet_Length;
    UINT32 fid_URB_Packet_Status;
}
Struct USBPort_USBPORT_ETW_EVENT_CODE_EXECUTION_TIME = FormatString("%s took %s", fid_CodeTag.ToString, ExecMetrics.ToString)
{
    USBPort_HostController2 HostController;
    USBPort_Execution_Metrics ExecMetrics;
    [Property.USBPerfCodeTag = FormatString("%s", this)]
    UnicodeString fid_CodeTag;
}
Struct USBPort_USBPORT_ETW_EVENT_PUT_SGLIST_EXECUTION_TIME = FormatString("%s took %s", fid_CodeTag.ToString, ExecMetrics.ToString)
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    USBPort_Execution_Metrics ExecMetrics;
    EtlPtr fid_AdapterObject;
    UINT32 fid_NumPutScatterGatherList;
    UINT8  fid_WriteData;
    [Property.USBPerfPutSGFlushLen = FormatString("0x%x", this)]
    UINT32 fid_FlushLength;
    [Property.USBPerfDMACurrentVa = FormatString("%s", this.Ptr.ToString)]
    EtlPtr fid_CurrentVA;
    [Property.USBPerfCodeTag = FormatString("%s", this)]
    UnicodeString fid_CodeTag;
}
Struct USBPort_USBPORT_ETW_EVENT_BUILD_SGLIST_EXECUTION_TIME = FormatString("%s took %s", fid_CodeTag.ToString, ExecMetrics.ToString)
{
    USBPort_HostController2 HostController;
    struct  fid_USBPORT_Device
    {
        EtlPtr DeviceHandle;
        UINT16 idVendor;
        UINT16 idProduct;
        UsbPortPath PortPath;
        UINT32 DeviceSpeed;
        UINT32 DeviceAddress;
    }
    struct  fid_USBPORT_Endpoint
    {
        EtlPtr Endpoint;
        EtlPtr PipeHandle;
        EtlPtr DeviceHandle;
    }
    struct  fid_USBPORT_Endpoint_Descriptor
    {
        UINT8 fid_bLength;
        UINT8 fid_bDescriptorType;
        [Property.USBEndpoint = FormatString("0x%x", this)]
        UINT8 fid_bEndpointAddress;
        UINT8 fid_bmAttributes;
        UINT16 fid_wMaxPacketSize;
        UINT8 fid_bInterval;
    }
    USBPort_Execution_Metrics ExecMetrics;
    EtlPtr fid_AdapterObject;
    UINT32 fid_TransferBufferLength;
    UINT8  fid_WriteData;
    [Property.USBPerfBuildSGLenRemaining = FormatString("0x%x", this)]
    UINT32 fid_LengthRemaining;
    [Property.USBPerfDMACurrentVa = FormatString("%s", this.Ptr.ToString)]
    EtlPtr fid_CurrentVA;
    [Property.USBPerfCodeTag = FormatString("%s", this)]
    UnicodeString fid_CodeTag;
}

[RegisterBefore(EventDescriptor.DefaultKeyword, MicrosoftWindowsUSBUSBPORT_Keyword, "{c88a4ef5-d048-4013-9408-e04b7db2814a}")]
struct USBPort_MicrosoftWindowsUSBUSBPORT_Keyword
{
    UINT64 Diagnostic:1 = FormatString("      (%s) %s", this.ToBitString, this? "USBPORT_ETW_KEYWORD_DIAGNOSTIC":"");
    UINT64 PowerDiagnostics:1 = FormatString("(%s) %s", this.ToBitString, this? "USBPORT_ETW_KEYWORD_POWER_DIAGNOSTICS":"");
    UINT64 PerfDiagnostics:1 = FormatString("(%s) %s", this.ToBitString, this? "USBPORT_ETW_KEYWORD_PERF_DIAGNOSTICS":"");
    UINT64 Reserved1:61 = FormatString("       (%s)", this.ToBitString);
}

struct CONTROL_TRANSFER_URB_SETUP
{
    URB Urb;
    switch (Property.InternalUsbNtstatusUrbs && Property.InternalUsbIsUrbCompletion)
    {
        case 1: [Property.USBNtStatus = this.ToString] NTSTATUS fid_IRP_NtStatus;
    }
}

struct CONTROL_TRANSFER_URB_SETUP_AND_DATA
{
    URB Urb;
    switch (Property.InternalUsbNtstatusUrbs && Property.InternalUsbIsUrbCompletion)
    {
        case 1: [Property.USBNtStatus = this.ToString] NTSTATUS fid_IRP_NtStatus;
    }
    [PostAfter.DataEndOffset = Offset + this]
    UINT16 fid_URB_TransferDataLength;
    struct DataPackets
    {
        switch
        {
            case (USBPort_RequestTypeTypeMap(Urb.SetupPacket.bmRequestType.Type) == "Standard"):
            switch(USBPort_StandardDeviceRequestMap(Urb.SetupPacket.bRequest))
            {
                case "GET_CONFIGURATION": UINT8 Data_ConfigurationValue;
                case "GET_INTERFACE": UINT8 Data_AlternateInterface;
                case "SYNCH_FRAME": UINT16 Data_FrameNumber;
                case "GET_STATUS": switch(USBPort_RequestTypeRecipientMap(Urb.SetupPacket.bmRequestType.Recipient))
                {
                    case "Device": UINT16 Data_DeviceStatus
                    {
                        UINT16 SelfPowered:1 = FormatString("(%s) %d", this.ToBitString, this);
                        UINT16 RemoteWakeup:1 = FormatString("(%s) %d", this.ToBitString, this);
                        UINT16 Reserved:14;
                    }
                    case "Endpoint": UINT16 Data_EndpointStatus
                    {
                        // Halt means the endpoint will return STALL
                        UINT16 Halt:1 = FormatString("(%s) %d", this.ToBitString, this);
                        UINT16 Reserved:15;
                    }
                    default: BLOB (DataEndOffset - Offset) Data_Status;
                }
                case "GET_DESCRIPTOR":
                case "SET_DESCRIPTOR":
                    USB_DESCRIPTORS Descriptor;
                case "SET_SEL": Struct
                {
                    UINT8 U1SEL;
                    UINT8 U1PEL;
                    UINT16 U2SEL;
                    UINT16 U2PEL;
                }
                default: BLOB (DataEndOffset - Offset) _Data;
            }
            case !IsValueNone(Urb.SetupPacket.Index_Port):
                // Could be Get Port Status request to a USB hub
                // TODO: USB3 port status is shown incorrectly as 2.0--can't distinguish here yet
                Usb2PortStatus Usb2PortStatus;
            default: BLOB (DataEndOffset - Offset) Data;
        }
    }
}

struct SETUP_PACKET =  SetupPacketDecodedString(
                            bmRequestType.Type,
                            bRequest,
                            Value_DescriptorType,
                            Value_ConfigurationValue,
                            Value_AlternateSetting)
{
    UINT8 bmRequestType = FormatString("(%s request) 0x%x", USBPort_RequestTypeTypeMap(this.Type), this)
    {
        UINT8 Recipient:5 = FormatString("%s", USBPort_RequestTypeRecipientMap(this));
        UINT8 Type:2 = FormatString("%s", USBPort_RequestTypeTypeMap(this));
        UINT8 Direction:1 = FormatString("%s", USBPort_RequestTypeDirectionMap(this));
    };
    UINT8 bRequest =
        USBPort_RequestTypeTypeMap(bmRequestType.Type) == "Standard" ?
        FormatString("%s", USBPort_StandardDeviceRequestMap(this)) :
        FormatString("0x%x", this) ;
    // wValue:
    switch
    {
        case (USBPort_RequestTypeTypeMap(bmRequestType.Type) == "Standard"):
        switch (USBPort_StandardDeviceRequestMap(bRequest))
        {
            case "GET_DESCRIPTOR":
            case "SET_DESCRIPTOR": struct
            {
                UINT8 Value_DescriptorIndex;
                UINT8 Value_DescriptorType =
                    FormatString("(%d) %s", this, UsbDescriptorTypeTable(this));
            }
            case "CLEAR_FEATURE":
            case "SET_FEATURE": switch(USBPort_RequestTypeRecipientMap(bmRequestType.Recipient))
            {
                case "Device": UINT16 Value_DeviceFeature =
                    FormatString("(%d) %s", this, USBPort_DeviceFeatureMap(this));
                case "Interface": UINT16 Value_InterfaceFeature =
                    FormatString("(%d) Unknown interface feature", this);
                case "Endpoint": UINT16 Value_EndpointFeature =
                    FormatString("(%d) %s", this, USBPort_EndpointFeatureMap(this));
                default: UINT16 Value_UnknownFeature;
            }
            case "SET_ADDRESS": UINT16 Value_DeviceAddress;
            case "SET_CONFIGURATION": struct
            {
                UINT8 Value_ConfigurationValue;
                UINT8 Value_Reserved;
            }
            case "SET_INTERFACE": UINT16 Value_AlternateSetting;
            default: UINT16 _wValue;
        }
        default: UINT16 wValue;
    }
    // wIndex:
    switch
    {
        case (USBPort_RequestTypeTypeMap(bmRequestType.Type) == "Standard"):
        switch
        {
            case (USBPort_RequestTypeRecipientMap(bmRequestType.recipient) == "Device" &&
                (USBPort_StandardDeviceRequestMap(bRequest) == "GET_DESCRIPTOR" ||
                USBPort_StandardDeviceRequestMap(bRequest) == "SET_DESCRIPTOR") &&
                UsbDescriptorTypeTable(Value_DescriptorType) == "STRING"): UINT16 Index_Language;
            case (USBPort_RequestTypeRecipientMap(bmRequestType.recipient) == "Interface"): UINT16 Index_Interface;
            case (USBPort_RequestTypeRecipientMap(bmRequestType.recipient) == "Endpoint"): UINT16 Index_Endpoint;
            default: UINT16 _wIndex;
        }
        case (USBPort_RequestTypeTypeMap(bmRequestType.Type) == "Class" &&
            USBPort_RequestTypeRecipientMap(bmRequestType.Recipient) == "Other" &&
            USBPort_RequestTypeDirectionMap(bmRequestType.Direction) == "Device-to-host" &&
            USBPort_StandardDeviceRequestMap(bRequest) == "GET_STATUS"):
            // Could be Get Port Status request to a USB hub
            UINT16 Index_Port;
        default: UINT16 wIndex;
    }
    UINT16 wLength;
}

// bmRequestType.Type
Table USBPort_RequestTypeTypeMap(value)
{
    switch(value)
    {
        case 0: "Standard";
        case 1: "Class";
        case 2: "Vendor";
        case 3: "Reserved";
    }
}

Table StandardRequestDecodedString(
    bRequest,
    Value_DescriptorType,
    Value_ConfigurationValue,
    Value_AlternateSetting)
{
    switch(bRequest)
    {
        // GET_DESCRIPTOR
        case 6: FormatString("Type: Standard, Request: GET_DESCRIPTOR(%s)",
                             UsbDescriptorTypeTable(Value_DescriptorType));

        // SET_CONFIGURATION
        case 9: FormatString("Type: Standard, Request: SET_CONFIGURATION(%d)",
                             Value_ConfigurationValue);

        // SET_INTERFACE
        case 11: FormatString("Type: Standard, Request: SET_INTERFACE(%d)",
                              Value_AlternateSetting);

        Default: FormatString("Type: Standard, Request: %s",
                              USBPort_StandardDeviceRequestMap(bRequest));
    }
}

Table SetupPacketDecodedString(
    bmRequestType,
    bRequest,
    Value_DescriptorType,
    Value_ConfigurationValue,
    Value_AlternateSetting)
{
    switch(bmRequestType)
    {
        // STANDARD
        case 0: FormatString("%s",
                             StandardRequestDecodedString(
                                bRequest,
                                Value_DescriptorType,
                                Value_ConfigurationValue,
                                Value_AlternateSetting));

        default: FormatString("Type: %s Request: %s",
                              USBPort_RequestTypeTypeMap(bmRequestType),
                              bRequest);
    }
}

Struct Usb2PortStatus = FormatString("[%s] %s", wPortStatus.ToString, wPortChange.ToString)
{
    UINT16 wPortStatus = FormatString("%s%s%s%s%s%s%s%s%s%s",
        PORT_CONNECTION   == 1 ? "c" : "",
        PORT_ENABLE       == 1 ? "e" : "",
        PORT_SUSPEND      == 1 ? "s" : "",
        PORT_OVER_CURRENT == 1 ? "o" : "",
        PORT_RESET        == 1 ? "r" : "",
        PORT_POWER        == 1 ? "p" : "",
        PORT_LOW_SPEED    == 1 ? "l" : "",
        PORT_HIGH_SPEED   == 1 ? "h" : "",
        PORT_TEST         == 1 ? "t" : "",
        PORT_INDICATOR    == 1 ? "i" : ""
        )
    {
        UINT16 PORT_CONNECTION:1 = FormatString("  (%s) %s", this.ToBitString, "PORT_CONNECTION");
        UINT16 PORT_ENABLE:1 = FormatString("      (%s) %s", this.ToBitString, "PORT_ENABLE");
        UINT16 PORT_SUSPEND:1 = FormatString("     (%s) %s", this.ToBitString, "PORT_SUSPEND");
        UINT16 PORT_OVER_CURRENT:1 = FormatString("(%s) %s", this.ToBitString, "PORT_OVER_CURRENT");
        UINT16 PORT_RESET:1 = FormatString("       (%s) %s", this.ToBitString, "PORT_RESET");
        UINT16 Reserved:3;
        UINT16 PORT_POWER:1 = FormatString("       (%s) %s", this.ToBitString, "PORT_POWER");
        UINT16 PORT_LOW_SPEED:1 = FormatString("   (%s) %s", this.ToBitString, "PORT_LOW_SPEED");
        UINT16 PORT_HIGH_SPEED:1 = FormatString("  (%s) %s", this.ToBitString, "PORT_HIGH_SPEED");
        UINT16 PORT_TEST:1 = FormatString("        (%s) %s", this.ToBitString, "PORT_TEST");
        UINT16 PORT_INDICATOR:1 = FormatString("   (%s) %s", this.ToBitString, "PORT_INDICATOR");
        UINT16 Reserved2:3;
    }
    UINT16 wPortChange = USBPort_ChangeBitsStringMap(this)
    {
        [Property.USBIsConnect = (this == 1 && wPortStatus.PORT_CONNECTION == 1) ? 1 : 0]
        [Property.USBIsDisconnect = (this == 1 && wPortStatus.PORT_CONNECTION == 0) ? 1 : 0]
        UINT16 C_PORT_CONNECTION:1 = FormatString("  (%s) %s", this.ToBitString, "C_PORT_CONNECTION");
        UINT16 C_PORT_ENABLE:1 = FormatString("      (%s) %s", this.ToBitString, "C_PORT_ENABLE");
        UINT16 C_PORT_SUSPEND:1 = FormatString("     (%s) %s", this.ToBitString, "C_PORT_SUSPEND");
        UINT16 C_PORT_OVER_CURRENT:1 = FormatString("(%s) %s", this.ToBitString, "C_PORT_OVER_CURRENT");
        UINT16 C_PORT_RESET:1 = FormatString("       (%s) %s", this.ToBitString, "C_PORT_RESET");
        UINT16 Reserved:11;
    }
}

// bmRequestType.Recipient
Table USBPort_RequestTypeRecipientMap(value)
{
    switch(value)
    {
        case 0: "Device";
        case 1: "Interface";
        case 2: "Endpoint";
        case 3: "Other";
        default: "Reserved";
    }
}

// bmRequestType.Dir
Table USBPort_RequestTypeDirectionMap(value)
{
    switch(value)
    {
        case 0: "Host-to-device";
        case 1: "Device-to-host";
    }
}

Table USBPort_StandardDeviceRequestMap(value)
{
    switch(value)
    {
        case 0: "GET_STATUS";
        case 1: "CLEAR_FEATURE";
        case 2: "Reserved for future use";
        case 3: "SET_FEATURE";
        case 4: "Reserved for future use";
        case 5: "SET_ADDRESS";
        case 6: "GET_DESCRIPTOR";
        case 7: "SET_DESCRIPTOR";
        case 8: "GET_CONFIGURATION";
        case 9: "SET_CONFIGURATION";
        case 10: "GET_INTERFACE";
        case 11: "SET_INTERFACE";
        case 12: "SYNCH_FRAME";
        case 48: "SET_SEL";
        case 49: "SET_ISOCH_DELAY";
        default: "Unknown";
    }
}

Table UsbDescriptorTypeTable(value)
{
    switch(value)
    {
        case 1: "DEVICE";
        case 2: "CONFIGURATION";
        case 3: "STRING";
        case 4: "INTERFACE";
        case 5: "ENDPOINT";
        case 6: "DEVICE_QUALIFIER";
        case 7: "OTHER_SPEED_CONFIGURATION";
        case 8: "INTERFACE_POWER";
        case 9: "OTG";
        case 10: "DEBUG";
        case 11: "INTERFACE_ASSOCIATION";
        case 15: "BOS";
        case 16: "DEVICE_CAPABILITY";
        case 48: "SUPERSPEED_ENDPOINT_COMPANION";
        default: "Unknown";
    }
}

Table USBPort_DeviceFeatureMap(value)
{
    switch(value)
    {
        case 1: "DEVICE_REMOTE_WAKEUP";
        case 2: "TEST_MODE";
        case 48: "U1_ENABLE";
        case 49: "U2_ENABLE";
        case 50: "LTM_ENABLE";
        default: "Unknown device feature";
    }
}

Table USBPort_EndpointFeatureMap(value)
{
    switch(value)
    {
        case 0: "ENDPOINT_HALT";
        default: "Unknown endpoint feature";
    }
}

//
// Descriptions for common values of hub port status change bits. Show bit string for multiple
// changes.
//
Table USBPort_ChangeBitsStringMap(value)
{
    switch(value)
    {
        case 0x0: "0";
        case 0x1: "Changed PORT_CONNECTION";
        case 0x2: "Changed PORT_ENABLE";
        case 0x4: "Changed PORT_SUSPEND";
        case 0x8: "Changed PORT_OVER_CURRENT";
        case 0x10: "Changed PORT_RESET";
        default: value.ToBitString;
    }
}

Table UsbSpeedTable(value)
{
    switch(value)
    {
    case 0: "UsbLowSpeed";
    case 1: "UsbFullSpeed";
    case 2: "UsbHighSpeed";
    case 3: "UsbSuperSpeed";
    }
}

Table UsbDeviceCapabilityTypeTable(value)
{
    switch(value)
    {
    case 1: "Wireless_USB";
    case 2: "USB 2.0 EXTENSION";
    case 3: "SUPERSPEED_USB";
    case 4: "CONTAINER_ID";
    default: "Unknown";
    }
}

Table UsbdStatusTable(value)
{
    switch(value)
    {
        // usb.h 2014/09/25
        case 0x00000000: "success";                          // USBD_STATUS_SUCCESS
        case 0x00000001: "port_operation_pending";           // USBD_STATUS_PORT_OPERATION_PENDING
        case 0x40000000: "pending";                          // USBD_STATUS_PENDING
        case 0xC0000001: "crc";                              // USBD_STATUS_CRC
        case 0xC0000002: "btstuff";                          // USBD_STATUS_BTSTUFF
        case 0xC0000003: "data_toggle_mismatch";             // USBD_STATUS_DATA_TOGGLE_MISMATCH
        case 0xC0000004: "stall_pid";                        // USBD_STATUS_STALL_PID
        case 0xC0000005: "dev_not_responding";               // USBD_STATUS_DEV_NOT_RESPONDING
        case 0xC0000006: "pid_check_failure";                // USBD_STATUS_PID_CHECK_FAILURE
        case 0xC0000007: "unexpected_pid";                   // USBD_STATUS_UNEXPECTED_PID
        case 0xC0000008: "data_overrun";                     // USBD_STATUS_DATA_OVERRUN
        case 0xC0000009: "data_underrun";                    // USBD_STATUS_DATA_UNDERRUN
        case 0xC000000A: "reserved1";                        // USBD_STATUS_RESERVED1
        case 0xC000000B: "reserved2";                        // USBD_STATUS_RESERVED2
        case 0xC000000C: "buffer_overrun";                   // USBD_STATUS_BUFFER_OVERRUN
        case 0xC000000D: "buffer_underrun";                  // USBD_STATUS_BUFFER_UNDERRUN
        case 0xC000000F: "not_accessed";                     // USBD_STATUS_NOT_ACCESSED
        case 0xC0000010: "fifo";                             // USBD_STATUS_FIFO
        case 0xC0000011: "xact_error";                       // USBD_STATUS_XACT_ERROR
        case 0xC0000012: "babble_detected";                  // USBD_STATUS_BABBLE_DETECTED
        case 0xC0000013: "data_buffer_error";                // USBD_STATUS_DATA_BUFFER_ERROR
        case 0xC0000014: "no_ping_response";                 // USBD_STATUS_NO_PING_RESPONSE
        case 0xC0000015: "invalid_stream_type";              // USBD_STATUS_INVALID_STREAM_TYPE
        case 0xC0000016: "invalid_stream_id";                // USBD_STATUS_INVALID_STREAM_ID
        case 0xC0000030: "endpoint_halted";                  // USBD_STATUS_ENDPOINT_HALTED
        case 0x80000200: "invalid_urb_function";             // USBD_STATUS_INVALID_URB_FUNCTION
        case 0x80000300: "invalid_parameter";                // USBD_STATUS_INVALID_PARAMETER
        case 0x80000400: "error_busy";                       // USBD_STATUS_ERROR_BUSY
        case 0x80000600: "invalid_pipe_handle";              // USBD_STATUS_INVALID_PIPE_HANDLE
        case 0x80000700: "no_bandwidth";                     // USBD_STATUS_NO_BANDWIDTH
        case 0x80000800: "internal_hc_error";                // USBD_STATUS_INTERNAL_HC_ERROR
        case 0x80000900: "error_short_transfer";             // USBD_STATUS_ERROR_SHORT_TRANSFER
        case 0xC0000A00: "bad_start_frame";                  // USBD_STATUS_BAD_START_FRAME
        case 0xC0000B00: "isoch_request_failed";             // USBD_STATUS_ISOCH_REQUEST_FAILED
        case 0xC0000C00: "frame_control_owned";              // USBD_STATUS_FRAME_CONTROL_OWNED
        case 0xC0000D00: "frame_control_not_owned";          // USBD_STATUS_FRAME_CONTROL_NOT_OWNED
        case 0xC0000E00: "not_supported";                    // USBD_STATUS_NOT_SUPPORTED
        case 0xC0000F00: "inavlid_configuration_descriptor"; // USBD_STATUS_INAVLID_CONFIGURATION_DESCRIPTOR
        case 0xC0001000: "insufficient_resources";           // USBD_STATUS_INSUFFICIENT_RESOURCES
        case 0xC0002000: "set_config_failed";                // USBD_STATUS_SET_CONFIG_FAILED
        case 0xC0003000: "buffer_too_small";                 // USBD_STATUS_BUFFER_TOO_SMALL
        case 0xC0004000: "interface_not_found";              // USBD_STATUS_INTERFACE_NOT_FOUND
        case 0xC0005000: "inavlid_pipe_flags";               // USBD_STATUS_INAVLID_PIPE_FLAGS
        case 0xC0006000: "timeout";                          // USBD_STATUS_TIMEOUT
        case 0xC0007000: "device_gone";                      // USBD_STATUS_DEVICE_GONE
        case 0xC0008000: "status_not_mapped";                // USBD_STATUS_STATUS_NOT_MAPPED
        case 0xC0009000: "hub_internal_error";               // USBD_STATUS_HUB_INTERNAL_ERROR
        case 0xC0010000: "canceled";                         // USBD_STATUS_CANCELED
        case 0xC0020000: "iso_not_accessed_by_hw";           // USBD_STATUS_ISO_NOT_ACCESSED_BY_HW
        case 0xC0030000: "iso_td_error";                     // USBD_STATUS_ISO_TD_ERROR
        case 0xC0040000: "iso_na_late_usbport";              // USBD_STATUS_ISO_NA_LATE_USBPORT
        case 0xC0050000: "iso_not_accessed_late";            // USBD_STATUS_ISO_NOT_ACCESSED_LATE
        case 0xC0100000: "bad_descriptor";                   // USBD_STATUS_BAD_DESCRIPTOR
        case 0xC0100001: "bad_descriptor_blen";              // USBD_STATUS_BAD_DESCRIPTOR_BLEN
        case 0xC0100002: "bad_descriptor_type";              // USBD_STATUS_BAD_DESCRIPTOR_TYPE
        case 0xC0100003: "bad_interface_descriptor";         // USBD_STATUS_BAD_INTERFACE_DESCRIPTOR
        case 0xC0100004: "bad_endpoint_descriptor";          // USBD_STATUS_BAD_ENDPOINT_DESCRIPTOR
        case 0xC0100005: "bad_interface_assoc_descriptor";   // USBD_STATUS_BAD_INTERFACE_ASSOC_DESCRIPTOR
        case 0xC0100006: "bad_config_desc_length";           // USBD_STATUS_BAD_CONFIG_DESC_LENGTH
        case 0xC0100007: "bad_number_of_interfaces";         // USBD_STATUS_BAD_NUMBER_OF_INTERFACES
        case 0xC0100008: "bad_number_of_endpoints";          // USBD_STATUS_BAD_NUMBER_OF_ENDPOINTS
        case 0xC0100009: "bad_endpoint_address";             // USBD_STATUS_BAD_ENDPOINT_ADDRESS
        default: "Unknown";
    }
}

// User-mode IOCTLs
Table UsbIoctlTable(value)
{
    switch (value)
    {
        case 0x2203fc: "IOCTL_USB_HCD_GET_STATS_1";
        case 0x220400: "IOCTL_USB_DIAGNOSTIC_MODE_ON";
        case 0x220404: "IOCTL_USB_DIAGNOSTIC_MODE_OFF";
        // Same value has different meaning to hub driver vs. controller driver
        case 0x220408: "IOCTL_USB_GET_NODE_INFORMATION or IOCTL_USB_GET_ROOT_HUB_NAME (check recipient)";
        case 0x22040c: "IOCTL_USB_GET_NODE_CONNECTION_INFORMATION";
        case 0x220410: "IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION";
        case 0x220414: "IOCTL_USB_GET_NODE_CONNECTION_NAME";
        case 0x220418: "IOCTL_USB_DIAG_IGNORE_HUBS_ON";
        case 0x22041c: "IOCTL_USB_DIAG_IGNORE_HUBS_OFF";
        case 0x220420: "IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME";
        case 0x220424: "IOCTL_GET_HCD_DRIVERKEY_NAME";
        case 0x220428: "IOCTL_USB_HCD_GET_STATS_2";
        case 0x220430: "IOCTL_USB_HCD_DISABLE_PORT";
        case 0x220434: "IOCTL_USB_HCD_ENABLE_PORT";
        case 0x220438: "IOCTL_USB_USER_REQUEST";
        case 0x22043c: "IOCTL_USB_GET_HUB_CAPABILITIES";
        case 0x220440: "IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES";
        case 0x220444: "IOCTL_USB_HUB_CYCLE_PORT";
        case 0x220448: "IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX";
        case 0x22044c: "IOCTL_USB_RESET_HUB";
        case 0x220450: "IOCTL_USB_GET_HUB_CAPABILITIES_EX";
        case 0x220454: "IOCTL_USB_GET_HUB_INFORMATION_EX";
        case 0x220458: "IOCTL_USB_GET_PORT_CONNECTOR_PROPERTIES";
        case 0x22045c: "IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2";
        default: FormatString("Unknown USB UM IOCTL 0x%x", value);
    }
}

// Kernel-mode IOCTLs
Table UsbIoctlInternalTable(value)
{
    switch (value)
    {
        case 0x220003: "IOCTL_INTERNAL_USB_SUBMIT_URB";
        case 0x220007: "IOCTL_INTERNAL_USB_RESET_PORT";
        case 0x22000f: "IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO";
        case 0x220013: "IOCTL_INTERNAL_USB_GET_PORT_STATUS";
        case 0x220017: "IOCTL_INTERNAL_USB_ENABLE_PORT";
        case 0x22001b: "IOCTL_INTERNAL_USB_GET_HUB_COUNT";
        case 0x22001f: "IOCTL_INTERNAL_USB_CYCLE_PORT";
        case 0x220020: "IOCTL_INTERNAL_USB_GET_HUB_NAME";
        case 0x220027: "IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION";
        case 0x22002b: "IOCTL_INTERNAL_USB_RECORD_FAILURE";
        case 0x220420: "IOCTL_INTERNAL_USB_GET_BUS_INFO";
        case 0x220424: "IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME";
        case 0x220428: "IOCTL_INTERNAL_USB_GET_BUSGUID_INFO";
        case 0x22042c: "IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO";
        case 0x220433: "IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE";
        case 0x220437: "IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE_EX";
        case 0x22043b: "IOCTL_INTERNAL_USB_GET_TT_DEVICE_HANDLE";
        case 0x22043f: "IOCTL_INTERNAL_USB_GET_TOPOLOGY_ADDRESS";
        case 0x220443: "IOCTL_INTERNAL_USB_NOTIFY_IDLE_READY";
        case 0x220447: "IOCTL_INTERNAL_USB_REQ_GLOBAL_SUSPEND";
        case 0x22044b: "IOCTL_INTERNAL_USB_REQ_GLOBAL_RESUME";
        case 0x22044f: "IOCTL_INTERNAL_USB_GET_DEVICE_CONFIG_INFO";
        case 0x490003: "IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE";
        case 0x490007: "IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE";
        case 0x49000b: "IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION";
        case 0x49104b: "(private) IOCTL_INTERNAL_USB_QUERY_USB_CAPABILITY";
        case 0x49103f: "(private) IOCTL_INTERNAL_USB_ENDPOINT_RESET";
        case 0x49100b: "(private) IOCTL_INTERNAL_USB_ROOTHUB_GET_INFO";
        case 0x49100f: "(private) IOCTL_INTERNAL_USB_ROOTHUB_GET_20PORT_INFO";
        case 0x491013: "(private) IOCTL_INTERNAL_USB_ROOTHUB_GET_30PORT_INFO";
        case 0x491007: "(private) IOCTL_INTERNAL_USB_ADDRESS0_OWNERSHIP_ACQUIRE";
        case 0x491017: "(private) IOCTL_INTERNAL_USB_USBDEVICE_ENABLE";
        case 0x49101b: "(private) IOCTL_INTERNAL_USB_USBDEVICE_RESET";
        case 0x49101f: "(private) IOCTL_INTERNAL_USB_USBDEVICE_ADDRESS";
        case 0x491023: "(private) IOCTL_INTERNAL_USB_USBDEVICE_UPDATE";
        case 0x491027: "(private) IOCTL_INTERNAL_USB_USBDEVICE_HUB_INFO";
        case 0x49102b: "(private) IOCTL_INTERNAL_USB_USBDEVICE_DISABLE";
        case 0x49102f: "(private) IOCTL_INTERNAL_USB_USBDEVICE_PURGEIO";
        case 0x491033: "(private) IOCTL_INTERNAL_USB_USBDEVICE_STARTIO";
        case 0x491037: "(private) IOCTL_INTERNAL_USB_ENDPOINTS_CONFIGURE";
        case 0x49103b: "(private) IOCTL_INTERNAL_USB_DEFAULT_ENDPOINT_UPDATE";
        case 0x491043: "(private) IOCTL_INTERNAL_USB_GET_HUB_INFO";
        case 0x491053: "(private) IOCTL_INTERNAL_USB_USBDEVICE_TREE_PURGEIO";
        case 0x491404: "(private) IOCTL_INTERNAL_USB_GET_DUMP_DATA";
        case 0x491408: "(private) IOCTL_INTERNAL_USB_FREE_DUMP_DATA";
        case 0x49140f: "(private) IOCTL_INTERNAL_USB_NOTIFY_FORWARD_PROGRESS";
        case 0x220fa3: "(private) IOCTL_INTERNAL_USB_PROPAGATE_RESUME";
        case 0x220fa7: "(private) IOCTL_INTERNAL_USB_NOTIFY_HUB_PWR_LOSS";
        case 0x220fb3: "(private) IOCTL_INTERNAL_USB_RESET_PORT_ASYNC";
        case 0x220fab: "(private) IOCTL_INTERNAL_USB_RESET_NOTIFICATION_REQUEST";
        case 0x49104f: "(private) IOCTL_INTERNAL_USB_SET_FUNCTION_HANDLE_DATA";
        case 0x220010: "(private) IOCTL_USB_GET_PORT_STATUS";
        default: FormatString("Unknown USB KM IOCTL 0x%x", value);
    }
}

Table USBPort_UsbUrbFunction(Function)
{
    switch(Function)
    {
        case 0x0000: "URB_FUNCTION_SELECT_CONFIGURATION";
        case 0x0001: "URB_FUNCTION_SELECT_INTERFACE";
        case 0x0002: "URB_FUNCTION_ABORT_PIPE";
        case 0x0003: "URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL";
        case 0x0004: "URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL";
        case 0x0005: "URB_FUNCTION_GET_FRAME_LENGTH";
        case 0x0006: "URB_FUNCTION_SET_FRAME_LENGTH";
        case 0x0007: "URB_FUNCTION_GET_CURRENT_FRAME_NUMBER";
        case 0x0008: "URB_FUNCTION_CONTROL_TRANSFER";
        case 0x0009: "URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER";
        case 0x000A: "URB_FUNCTION_ISOCH_TRANSFER";
        case 0x000B: "URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE";
        case 0x000C: "URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE";
        case 0x000D: "URB_FUNCTION_SET_FEATURE_TO_DEVICE";
        case 0x000E: "URB_FUNCTION_SET_FEATURE_TO_INTERFACE";
        case 0x000F: "URB_FUNCTION_SET_FEATURE_TO_ENDPOINT";
        case 0x0010: "URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE";
        case 0x0011: "URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE";
        case 0x0012: "URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT";
        case 0x0013: "URB_FUNCTION_GET_STATUS_FROM_DEVICE";
        case 0x0014: "URB_FUNCTION_GET_STATUS_FROM_INTERFACE";
        case 0x0015: "URB_FUNCTION_GET_STATUS_FROM_ENDPOINT";
        case 0x0016: "URB_FUNCTION_RESERVED_0X0016";
        case 0x0017: "URB_FUNCTION_VENDOR_DEVICE";
        case 0x0018: "URB_FUNCTION_VENDOR_INTERFACE";
        case 0x0019: "URB_FUNCTION_VENDOR_ENDPOINT";
        case 0x001A: "URB_FUNCTION_CLASS_DEVICE";
        case 0x001B: "URB_FUNCTION_CLASS_INTERFACE";
        case 0x001C: "URB_FUNCTION_CLASS_ENDPOINT";
        case 0x001D: "URB_FUNCTION_RESERVE_0X001D";
        case 0x001E: "URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL";
        case 0x001F: "URB_FUNCTION_CLASS_OTHER";
        case 0x0020: "URB_FUNCTION_VENDOR_OTHER";
        case 0x0021: "URB_FUNCTION_GET_STATUS_FROM_OTHER";
        case 0x0022: "URB_FUNCTION_CLEAR_FEATURE_TO_OTHER";
        case 0x0023: "URB_FUNCTION_SET_FEATURE_TO_OTHER";
        case 0x0024: "URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT";
        case 0x0025: "URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT";
        case 0x0026: "URB_FUNCTION_GET_CONFIGURATION";
        case 0x0027: "URB_FUNCTION_GET_INTERFACE";
        case 0x0028: "URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE";
        case 0x0029: "URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE";
        case 0x002A: "URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR";
        case 0x0030: "URB_FUNCTION_SYNC_RESET_PIPE";
        case 0x0031: "URB_FUNCTION_SYNC_CLEAR_STALL";
        case 0x0032: "URB_FUNCTION_CONTROL_TRANSFER_EX";
        case 0x0035: "URB_FUNCTION_OPEN_STATIC_STREAMS";
        case 0x0036: "URB_FUNCTION_CLOSE_STATIC_STREAMS";
        case 0x0037: "URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL";
        case 0x0038: "URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL";
        case 0x0039: "URB_FUNCTION_SECURE_BULK_OR_INTERRUPT_TRANSFER";
        case 0x003A: "URB_FUNCTION_SECURE_ISOCH_TRANSFER";
        default: "Unknown";
    }
}

[Global.InternalUsbTblVid$[Property.USBDevicePtr] = FormatString("0x%04X", idVendor)]
[Global.InternalUsbTblPid$[Property.USBDevicePtr] = FormatString("0x%04X", idProduct)]
struct USB_DEVICE_DESCRIPTOR = FormatString("VID_%04X&PID_%04X", idVendor, idProduct)
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT16 bcdUSB;
    UINT8 bDeviceClass;
    UINT8 bDeviceSubClass;
    UINT8 bDeviceProtocol;
    UINT8 bMaxPacketSize0;
    UINT16 idVendor;
    UINT16 idProduct;
    UINT16 bcdDevice;
    UINT8 iManufacturer;
    UINT8 iProduct;
    UINT8 iSerialNumber;
    UINT8 bNumConfigurations;
}

struct USB_ENDPOINT_DESCRIPTOR = FormatString("bmAttrubibutes 0x%x", bmAttributes)
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT8 bEndpointAddress;
    UINT8 bmAttributes;
    UINT16 wMaxPacketSize;
    UINT8 bInterval;
}

struct USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR = FormatString("MaxBurst %d", bMaxBurst)
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT8 bMaxBurst;
    UINT8 MaxStreamsOrMult; // max streams (5 bits) for bulk, or mult (2 bits) for isoch. this is bmAttributes
    UINT16 wBytesPerInterval;
}

struct USB_CONFIGURATION_DESCRIPTOR = FormatString("Value %d Length %d", bConfigurationValue, wTotalLength)
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT16 wTotalLength;
    UINT8 bNumInterfaces;
    UINT8 bConfigurationValue;
    UINT8 iConfiguration;
    UINT8 bmAttributes;
    UINT8 bMaxPower;
}

//
// Save the interface data for the first interface descriptor for each device. This descriptor
// tells us the whole device's class.
//
[Global.InternalUsbTblClass$[Property.USBDevicePtr] =
    IsValueNone(Global.InternalUsbTblClass$[Property.USBDevicePtr]) ?
    FormatString("0x%X", bInterfaceClass) :
    Global.InternalUsbTblClass$[Property.USBDevicePtr] ]
[Global.InternalUsbTblSubclass$[Property.USBDevicePtr] =
    IsValueNone(Global.InternalUsbTblSubclass$[Property.USBDevicePtr]) ?
    FormatString("0x%X", bInterfaceSubClass) :
    Global.InternalUsbTblSubclass$[Property.USBDevicePtr] ]
[Global.InternalUsbTblProtocol$[Property.USBDevicePtr] =
    IsValueNone(Global.InternalUsbTblProtocol$[Property.USBDevicePtr]) ?
    FormatString("0x%X", bInterfaceProtocol) :
    Global.InternalUsbTblProtocol$[Property.USBDevicePtr] ]
struct USB_INTERFACE_DESCRIPTOR = FormatString("Interface %d alt %d", bInterfaceNumber, bAlternateSetting)
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT8 bInterfaceNumber;
    UINT8 bAlternateSetting;
    UINT8 bNumEndpoints;
    UINT8 bInterfaceClass;
    UINT8 bInterfaceSubClass;
    UINT8 bInterfaceProtocol;
    UINT8 iInterface;
}

struct USB_STRING_DESCRIPTOR = bString
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UnicodeString((bLength-2)/2) bString;
}

struct USB_BOS_DESCRIPTOR = FormatString ("%d descriptors", bNumDeviceCaps)
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT16 wTotalLength;
    UINT8 bNumDeviceCaps;
}

struct USB_DEVICE_CAPABILITY_DESCRIPTOR = Local.CapabilityDescription
{
    [Local.StartOffset = Offset]
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT8 bDevCapabilityType = FormatString("(%d) %s", this, UsbDeviceCapabilityTypeTable(this));
    switch (UsbDeviceCapabilityTypeTable(bDevCapabilityType))
    {
    case "USB 2.0 EXTENSION":
        [Post.Local.CapabilityDescription = this.ToString]
        UINT32 bmAttributes_Usb2 = FormatString("%s", (LPM ? "LPM" : "No LPM"))
        {
            UINT32 Reserved_1:1;
            UINT32 LPM:1;
            UINT32 Reserved_2:30;
        }
    case "SUPERSPEED_USB": Struct
        {
            UINT8 bmAttributes_Ss = FormatString("%s", (LTM ? "LTM" : "No LTM"))
            {
                UINT8 Reserved_1:1;
                UINT8 LTM:1;
                UINT8 Reserved_2:6;
            };
            UINT16 wSpeedsSupported = FormatString("%s%s%s%s",
                LowSpeed   ? "ls " : "",
                FullSpeed  ? "fs " : "",
                HighSpeed  ? "hs " : "",
                SuperSpeed ? "ss " : ""
                )
            {
                UINT16 LowSpeed:1;
                UINT16 FullSpeed:1;
                UINT16 HighSpeed:1;
                UINT16 SuperSpeed:1;
                UINT16 Reserved:12;
            }
            UINT8 bFunctionalitySupport = UsbSpeedTable(this);
            UINT8 bU1DevExitLat;
            [Post.Local.CapabilityDescription = FormatString("Speeds: %s", wSpeedsSupported.ToString)]
            UINT16 wU2DevExitLat;
        }
    case "CONTAINER_ID": Struct
        {
            UINT8 bReserved;
            [Post.Local.CapabilityDescription = this.ToString]
            GUID(false) ContainerID; // TODO: should marshalled be true or false?
        }

    default:
        [Post.Local.CapabilityDescription = "Unknown capability"]
        BLOB(bLength - (Offset - Local.StartOffset)) UnknownCapability;
    }
}

struct USBPort_HostController2 = HostController.ToString
{
    EtlPtr DeviceObject;
    USBPort_HostController HostController;
}

struct USBPort_Execution_Metrics = FormatString("%I64d µs", Delta)
{
    [Property.USBPerfStartTime = FormatString("%I64d", this)]
    UINT64 StartTime;
    [Property.USBPerfStopTime = FormatString("%I64d", this)]
    UINT64 StopTime;
    [Property.USBPerfDelta = FormatString("%I64d", this)]
    UINT64 Delta;
}

struct USBPort_HostController = FormatString("PCI\\VEN_%04X&DEV_%04X, bus %d, device %d, function %d", PciVendorId, PciDeviceId, PciBus, PciDevice, PciFunction)
{
    UINT32 PciBus;
    UINT16 PciDevice;
    UINT16 PciFunction;
    UINT16 PciVendorId;
    UINT16 PciDeviceId;
}

[Global.InternalUsbTblPortPath$[Property.USBDevicePtr] = this.ToString]
struct UsbPortPath = (PortPathDepth == 0 ? "-" :
                   PortPathDepth == 1 ? FormatString("%d", PortPath0) :
                   PortPathDepth == 2 ? FormatString("%d,%d", PortPath0, PortPath1) :
                   PortPathDepth == 3 ? FormatString("%d,%d,%d", PortPath0, PortPath1, PortPath2) :
                   PortPathDepth == 4 ? FormatString("%d,%d,%d,%d", PortPath0, PortPath1, PortPath2, PortPath3) :
                   PortPathDepth == 5 ? FormatString("%d,%d,%d,%d,%d", PortPath0, PortPath1, PortPath2, PortPath3, PortPath4) :
                   PortPathDepth == 6 ? FormatString("%d,%d,%d,%d,%d,%d", PortPath0, PortPath1, PortPath2, PortPath3, PortPath4, PortPath5) :
                   "invalid")
{
    UINT32 PortPathDepth;
    UINT32 PortPath0;
    UINT32 PortPath1;
    UINT32 PortPath2;
    UINT32 PortPath3;
    UINT32 PortPath4;
    UINT32 PortPath5;
}

// TODO: Improve this structure to dump more information about Power / Pnp / Ioctls
struct IO_STACK_LOCATION = FormatString("IoStackLocation")
{
   [Property.MajorFunction]
   UINT8 MajorFunction;
   [Property.MinorFunction]
   UINT8 MinorFunction;
   UINT8 Flags;
   UINT8 Control;
   EtlPtr Arg1;
   EtlPtr Arg2;
   [Property.IoControlCode = (MajorFunction == IRP_MJ_INTERNAL_DEVICE_CONTROL || MajorFunction == IRP_MJ_DEVICE_CONTROL) ? this.Ptr : ""]
   EtlPtr Arg3;
   EtlPtr Arg4;
   EtlPtr DeviceObject
   EtlPtr FileObject
   EtlPtr CompletionRoutine
   EtlPtr Context
}

// TODO: Merge IRP_X86 and IRP_X64 structures into 1.
struct IRP_X86 = FormatString("IRP")
{
    UINT16 Type
    UINT16 Size
    EtlPtr MdlAddress
    UINT32 Flags
    EtlPtr AssociatedIrp
    EtlPtr ThreadListEntry_Flink
    EtlPtr ThreadListEntry_Blink
    NTSTATUS IoStatus_Status
    UINT32   IoStatus_Information
    UINT8  RequestorMode
    UINT8 PendingReturned
    UINT8  StackCount
    UINT8 CurrentLocation
    UINT8 Cancel
    UINT8 CancelIrql
    UINT8 ApcEnvironment
    UINT8 AllocationFlags
    EtlPtr UserIosb
    EtlPtr UserEvent
    BLOB(8) Overlay
    EtlPtr CancelRoutine
    EtlPtr UserBuffer
    BLOB(16) Tail_OverLay_DriverContext
    EtlPtr   Tail_OverLay_Thread
    EtlPtr   Tail_Overlay_AuxilaryBuffer
    EtlPtr   Tail_Overlay_ListEntry_Flink
    EtlPtr   Tail_Overlay_ListEntry_Blink
    EtlPtr   Tail_Overlay_CurrentSTackLocation
    BLOB(12) Remaining
}

struct IRP_X64 = FormatString("IRP")
{
    UINT16 Type
    UINT16 Size
    BLOB(4) Pad0
    EtlPtr MdlAddress
    UINT32 Flags
    BLOB(4) Pad1
    EtlPtr AssociatedIrp
    EtlPtr ThreadListEntry_Flink
    EtlPtr ThreadListEntry_Blink
    NTSTATUS IoStatus_Status
    UINT32   IoStatus_Pad1
    UINT32   IoStatus_Information
    UINT32   IoStatus_Pad2
    UINT8  RequestorMode
    UINT8 PendingReturned
    UINT8  StackCount
    UINT8 CurrentLocation
    UINT8 Cancel
    UINT8 CancelIrql
    UINT8 ApcEnvironment
    UINT8 AllocationFlags
    EtlPtr UserIosb
    EtlPtr UserEvent
    BLOB(16) Overlay
    EtlPtr CancelRoutine
    EtlPtr UserBuffer
    BLOB(32) Tail_OverLay_DriverContext
    EtlPtr   Tail_OverLay_Thread
    EtlPtr   Tail_Overlay_AuxilaryBuffer
    EtlPtr   Tail_Overlay_ListEntry_Flink
    EtlPtr   Tail_Overlay_ListEntry_Blink
    EtlPtr   Tail_Overlay_CurrentSTackLocation
    BLOB(16) Remaining
}

// Doesn't cover all URBs, but covers the beginning of most transfer URBs.
struct URB = FormatString("%sFunction = %s, Length = %s, Flags 0x%x",
                            Property.USBDStatus != "" ? Property.USBDStatus + ", " : "",
                            USBPort_UsbUrbFunction(fid_URB_Hdr_Function),
                            Property.USBLength,
                            fid_URB_TransferFlags
                            )
{
    UINT16 fid_URB_Hdr_Length;
    UINT16 fid_URB_Hdr_Function = FormatString("%s (0x%x)", USBPort_UsbUrbFunction(this), this);
    // Only show status for completion urb events, not dispatch urb events
    switch(Property.InternalUsbIsUrbCompletion)
    {
    case 1:
        USBD_STATUS fid_URB_Hdr_Status;
    default:
        UINT32      fid_URB_Hdr_Status_ignored;
    }
    EtlPtr fid_URB_Hdr_UsbdDeviceHandle;
    EtlPtr fid_URB_Hdr_UsbdFlags;

    Struct
    {
        switch(fid_URB_Hdr_Function)
        {

        case 0x0000: // URB_FUNCTION_SELECT_CONFIGURATION
        Struct
        {
            EtlPtr fid_ConfigurationDescriptor;
            EtlPtr fid_ConfigurationHandle;
        }

        //
        // Following are all the transfer URBs
        //
        case 0x0008: //URB_FUNCTION_CONTROL_TRANSFER
        case 0x0009: //URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
        case 0x000A: //URB_FUNCTION_ISOCH_TRANSFER
        case 0x000B: //URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE
        case 0x000C: //URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE
        case 0x000D: //URB_FUNCTION_SET_FEATURE_TO_DEVICE
        case 0x000E: //URB_FUNCTION_SET_FEATURE_TO_INTERFACE
        case 0x000F: //URB_FUNCTION_SET_FEATURE_TO_ENDPOINT
        case 0x0010: //URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE
        case 0x0011: //URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE
        case 0x0012: //URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT
        case 0x0013: //URB_FUNCTION_GET_STATUS_FROM_DEVICE
        case 0x0014: //URB_FUNCTION_GET_STATUS_FROM_INTERFACE
        case 0x0015: //URB_FUNCTION_GET_STATUS_FROM_ENDPOINT
        case 0x0017: //URB_FUNCTION_VENDOR_DEVICE
        case 0x0018: //URB_FUNCTION_VENDOR_INTERFACE
        case 0x0019: //URB_FUNCTION_VENDOR_ENDPOINT
        case 0x001A: //URB_FUNCTION_CLASS_DEVICE
        case 0x001B: //URB_FUNCTION_CLASS_INTERFACE
        case 0x001C: //URB_FUNCTION_CLASS_ENDPOINT
        case 0x001F: //URB_FUNCTION_CLASS_OTHER
        case 0x0020: //URB_FUNCTION_VENDOR_OTHER
        case 0x0021: //URB_FUNCTION_GET_STATUS_FROM_OTHER
        case 0x0022: //URB_FUNCTION_CLEAR_FEATURE_TO_OTHER
        case 0x0023: //URB_FUNCTION_SET_FEATURE_TO_OTHER
        case 0x0024: //URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT
        case 0x0025: //URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT
        case 0x0026: //URB_FUNCTION_GET_CONFIGURATION
        case 0x0027: //URB_FUNCTION_GET_INTERFACE
        case 0x0028: //URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE
        case 0x0029: //URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE
        case 0x002A: //URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR
        case 0x0032: //URB_FUNCTION_CONTROL_TRANSFER_EX
        case 0x0037: //URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL
        case 0x0038: //URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL
        Struct {
            UsbPipeHandle fid_URB_PipeHandle;
            UINT32 fid_URB_TransferFlags = Property.USBDirection +
                        (this.USBD_SHORT_TRANSFER_OK ? ", short ok" : "") +
                        (this.USBD_START_ISO_TRANSFER_ASAP ? ", iso asap" : "") +
                        (this.USBD_DEFAULT_PIPE_TRANSFER ? ", default pipe" : "") +
                        FormatString(" (0x%x)", this)
            {
                [Property.USBDirection = (this ? "In" : "Out")]
                UINT32 USBD_TRANSFER_DIRECTION_IN:1 = FormatString("  (%s) %d", this.ToBitString, this);
                UINT32 USBD_SHORT_TRANSFER_OK:1 = FormatString("      (%s) %d", this.ToBitString, this);
                UINT32 USBD_START_ISO_TRANSFER_ASAP:1 = FormatString("(%s) %d", this.ToBitString, this);
                UINT32 USBD_DEFAULT_PIPE_TRANSFER:1 = FormatString("  (%s) %d", this.ToBitString, this);
                UINT32 Reserved:12;
            }
            //
            // URB length
            //
            switch(Property.InternalUsbIsUrbCompletion)
            {
            case 1:
                [Property.USBLengthCompleted]
                //
                // On completion, we must save the most recent requested length in an unchanging global
                // in order for it to stick around and not get overwritten (all properties that
                // reference it would get overwritten too). Make up a unique table index, save to it,
                // and then use it.
                //
                [Property.InternalUsbUniqueUrbIndex = FormatString("%s_%d", Property.InternalUsbUrbPtr, FrameNumber)]
                [Global.InternalUsbTblUrbLength$[Property.InternalUsbUniqueUrbIndex] = Global.InternalUsbTblLengthRequested$[Property.InternalUsbUrbPtr]]
                [Property.USBLengthRequested = Global.InternalUsbTblUrbLength$[Property.InternalUsbUniqueUrbIndex]]
                [Property.USBLength = FormatString("%d of %d", this, Property.USBLengthRequested)]
                //
                // Do the same table save for URB completion time. Must convert to seconds from
                // 100-nanosecond units.
                //
                [Global.InternalUsbTblUrbRequestDuration$[Property.InternalUsbUniqueUrbIndex] =
                    TimeOffset - Global.InternalUsbTblUrbDispatchTime$[Property.InternalUsbUrbPtr]]
                [Property.USBRequestDuration = Global.InternalUsbTblUrbRequestDuration$[Property.InternalUsbUniqueUrbIndex] / (1000*1000*10.0)]
                UINT32 TransferBufferLength_Completed;
            default:
                [Global.InternalUsbTblLengthRequested$[Property.InternalUsbUrbPtr] = this]
                [Global.InternalUsbTblUrbDispatchTime$[Property.InternalUsbUrbPtr] = TimeOffset]
                [Property.USBLength = FormatString("%d", this)]
                [Property.USBLengthRequested]
                UINT32 TransferBufferLength_Requested;
            }
            EtlPtr TransferBuffer;
            EtlPtr TransferBufferMDL;
            EtlPtr UrbLink;
            EtlPtr Hca[8];
            switch(fid_URB_Hdr_Function)
            {
                case 0x9: //URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
                case 0x37: //URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL
                Struct
                {
                    // No Addition information for Bulk/Interrupt Transfers
                }

                case 0x0038: //URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL
                case 0x000A: //URB_FUNCTION_ISOCH_TRANSFER
                Struct
                {
                    [Property.USBIsochStartFrame]
                    UINT32 fid_URB_StartFrame;
                    [Property.USBIsochNumPackets]
                    UINT32 fid_URB_NumberOfPackets;
                    [Property.USBIsochErrorCount]
                    UINT32 fid_URB_ErrorCount;
                    USBPort_fid_USBPORT_URB_ISO_PACKETS fid_USBPORT_URB_ISO_PACKETS[fid_URB_NumberOfPackets];
                }

                //
                // Remaining all are Control Transfers with a SetupPacket
                //
                default:
                    SETUP_PACKET SetupPacket;
            }
        }

        case 0x0039: //URB_FUNCTION_SECURE_BULK_OR_INTERRUPT_TRANSFER
        case 0x003A: //URB_FUNCTION_SECURE_ISOCH_TRANSFER
        Struct {
            UsbPipeHandle fid_URB_PipeHandle;
            UINT32 fid_URB_TransferFlags = Property.USBDirection +
                        (this.USBD_SHORT_TRANSFER_OK ? ", short ok" : "") +
                        (this.USBD_START_ISO_TRANSFER_ASAP ? ", iso asap" : "") +
                        (this.USBD_DEFAULT_PIPE_TRANSFER ? ", default pipe" : "") +
                        FormatString(" (0x%x)", this)
            {
                [Property.USBDirection = (this ? "In" : "Out")]
                UINT32 USBD_TRANSFER_DIRECTION_IN:1 = FormatString("  (%s) %d", this.ToBitString, this);
                UINT32 USBD_SHORT_TRANSFER_OK:1 = FormatString("      (%s) %d", this.ToBitString, this);
                UINT32 USBD_START_ISO_TRANSFER_ASAP:1 = FormatString("(%s) %d", this.ToBitString, this);
                UINT32 USBD_DEFAULT_PIPE_TRANSFER:1 = FormatString("  (%s) %d", this.ToBitString, this);
                UINT32 Reserved:12;
            }

            GUID(false) fid_URB_SecureTransferBufferGuid;

            //
            // URB length
            //
            switch(Property.InternalUsbIsUrbCompletion)
            {
            case 1:
                [Property.USBLengthCompleted]
                //
                // On completion, we must save the most recent requested length in an unchanging global
                // in order for it to stick around and not get overwritten (all properties that
                // reference it would get overwritten too). Make up a unique table index, save to it,
                // and then use it.
                //
                [Property.InternalUsbUniqueUrbIndex = FormatString("%s_%d", Property.InternalUsbUrbPtr, FrameNumber)]
                [Global.InternalUsbTblUrbLength$[Property.InternalUsbUniqueUrbIndex] = Global.InternalUsbTblLengthRequested$[Property.InternalUsbUrbPtr]]
                [Property.USBLengthRequested = Global.InternalUsbTblUrbLength$[Property.InternalUsbUniqueUrbIndex]]
                [Property.USBLength = FormatString("%d of %d", this, Property.USBLengthRequested)]
                //
                // Do the same table save for URB completion time. Must convert to seconds from
                // 100-nanosecond units.
                //
                [Global.InternalUsbTblUrbRequestDuration$[Property.InternalUsbUniqueUrbIndex] =
                    TimeOffset - Global.InternalUsbTblUrbDispatchTime$[Property.InternalUsbUrbPtr]]
                [Property.USBRequestDuration = Global.InternalUsbTblUrbRequestDuration$[Property.InternalUsbUniqueUrbIndex] / (1000*1000*10.0)]
                UINT32 TransferBufferLength_Completed;
            default:
                [Global.InternalUsbTblLengthRequested$[Property.InternalUsbUrbPtr] = this]
                [Global.InternalUsbTblUrbDispatchTime$[Property.InternalUsbUrbPtr] = TimeOffset]
                [Property.USBLength = FormatString("%d", this)]
                [Property.USBLengthRequested]
                UINT32 fid_URB_SecureTransferBufferLength;
            }

            UINT64 fid_URB_ReservedMBZ;
            UINT64 fid_URB_ReservedHcd[8];
            switch(fid_URB_Hdr_Function)
            {
                case 0x0039: //URB_FUNCTION_SECURE_BULK_OR_INTERRUPT_TRANSFER
                Struct
                {
                    // No Addition information for Bulk/Interrupt Secure Transfers
                }

                case 0x003A: //URB_FUNCTION_SECURE_ISOCH_TRANSFER
                Struct
                {
                    [Property.USBIsochStartFrame]
                    UINT32 fid_URB_StartFrame;
                    [Property.USBIsochNumPackets]
                    UINT32 fid_URB_NumberOfPackets;
                    [Property.USBIsochErrorCount]
                    UINT32 fid_URB_ErrorCount;
                    USBPort_fid_USBPORT_URB_ISO_PACKETS fid_USBPORT_URB_ISO_PACKETS[fid_URB_NumberOfPackets];
                }

                default:
                    EtlPtr UnknownFieldInASecureTransfer;
            }
        }

        //
        // Following are all the Pipe Transfers
        //
        case 0x0002: //URB_FUNCTION_ABORT_PIPE
        case 0x001E: //URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
        case 0x0030: //URB_FUNCTION_SYNC_RESET_PIPE
        case 0x0031: //URB_FUNCTION_SYNC_CLEAR_STALL
        case 0x0036: //URB_FUNCTION_CLOSE_STATIC_STREAMS
        Struct
        {
            UsbPipeHandle fid_URB_PipeHandle;
            UINT32        Reserved;
        }

        //
        // TODO: Parsing code for the following URBs needs to be added.
        //
        case 0x0001: //URB_FUNCTION_SELECT_INTERFACE
        case 0x0003: //URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL
        case 0x0004: //URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL
        case 0x0005: //URB_FUNCTION_GET_FRAME_LENGTH
        case 0x0006: //URB_FUNCTION_SET_FRAME_LENGTH
        case 0x0007: //URB_FUNCTION_GET_CURRENT_FRAME_NUMBER
        case 0x0035: //URB_FUNCTION_OPEN_STATIC_STREAMS
        Struct
        {

        }

        default:
        //
        // An URB that is unexpected here. We would need to update the Parser file
        // if we see this field.
        //
        EtlPtr Unknown;

        }
    }
}

Struct UsbUrbPtr = Pointer.Ptr.ToString
{
    [Property.InternalUsbUrbPtr = Pointer.Ptr]
    EtlPtr Pointer;
}

// Parameter: Property.InternalUsbDescriptorLength
// Set this parameter before using this struct, else it will consume the rest of the frame
Struct USB_DESCRIPTORS
{
    [Local.StartOffset = Offset]
    while Descriptors[Offset < (IsValueNone(Property.InternalUsbDescriptorLength) ?
                                DataEndOffset :
                                Property.InternalUsbDescriptorLength + Local.StartOffset)]
    {
        // All descriptors start with first byte = length, second byte = descriptor type
        // Look ahead at descriptor length
        switch(UINT8(FrameData, Offset))
        {
        case 0:
        case 1:
            // Length should have been >= 2
            BLOB (1) InvalidLength;
        default:
            // Look ahead at descriptor type
            switch(UsbDescriptorTypeTable(UINT8(FrameData, Offset+1)))
            {
                case "DEVICE":            USB_DEVICE_DESCRIPTOR            DeviceDescriptor;
                case "CONFIGURATION":     USB_CONFIGURATION_DESCRIPTOR     ConfigurationDescriptor;
                case "STRING":            USB_STRING_DESCRIPTOR            StringDescriptor;
                case "INTERFACE":         USB_INTERFACE_DESCRIPTOR         InterfaceDescriptor;
                case "ENDPOINT":          USB_ENDPOINT_DESCRIPTOR          EndpointDescriptor;
                case "SUPERSPEED_ENDPOINT_COMPANION":
                                          USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR
                                                                           EndpointCompanionDescriptor;
                case "BOS":               USB_BOS_DESCRIPTOR               BosDescriptor;
                case "DEVICE_CAPABILITY": USB_DEVICE_CAPABILITY_DESCRIPTOR CapabilityDescriptor;
                // Get length again (first byte of descriptor) and mark that many
                // bytes as an unparsed blob
                default: BLOB (UINT8(FrameData, Offset)) Descriptor;
            }
        }
    }
}

[Property.USBDStatus = UsbdStatusTable(Status)]
Struct USBD_STATUS = Status.ToString
{
    UINT32 Status = FormatString("%s (0x%x)", UsbdStatusTable(this), this);
}

