/*** Autogenerated by WIDL 10.16 from include/windows.devices.usb.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __windows_devices_usb_h__
#define __windows_devices_usb_h__

/* Forward declarations */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor ABI::Windows::Devices::Usb::IUsbBulkInEndpointDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbBulkInEndpointDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe ABI::Windows::Devices::Usb::IUsbBulkInPipe
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbBulkInPipe;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor ABI::Windows::Devices::Usb::IUsbBulkOutEndpointDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbBulkOutEndpointDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe ABI::Windows::Devices::Usb::IUsbBulkOutPipe
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbBulkOutPipe;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration ABI::Windows::Devices::Usb::IUsbConfiguration
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbConfiguration;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor ABI::Windows::Devices::Usb::IUsbConfigurationDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbConfigurationDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics ABI::Windows::Devices::Usb::IUsbConfigurationDescriptorStatics
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbConfigurationDescriptorStatics;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType ABI::Windows::Devices::Usb::IUsbControlRequestType
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbControlRequestType;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor ABI::Windows::Devices::Usb::IUsbDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice ABI::Windows::Devices::Usb::IUsbDevice
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDevice;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass ABI::Windows::Devices::Usb::IUsbDeviceClass
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDeviceClass;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor ABI::Windows::Devices::Usb::IUsbDeviceDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDeviceDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics ABI::Windows::Devices::Usb::IUsbDeviceStatics
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDeviceStatics;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface ABI::Windows::Devices::Usb::IUsbInterface
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterface;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor ABI::Windows::Devices::Usb::IUsbInterfaceDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterfaceDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics ABI::Windows::Devices::Usb::IUsbInterfaceDescriptorStatics
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterfaceDescriptorStatics;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting ABI::Windows::Devices::Usb::IUsbInterfaceSetting
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterfaceSetting;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor ABI::Windows::Devices::Usb::IUsbInterruptInEndpointDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptInEndpointDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs ABI::Windows::Devices::Usb::IUsbInterruptInEventArgs
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptInEventArgs;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe ABI::Windows::Devices::Usb::IUsbInterruptInPipe
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptInPipe;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor ABI::Windows::Devices::Usb::IUsbInterruptOutEndpointDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptOutEndpointDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe ABI::Windows::Devices::Usb::IUsbInterruptOutPipe
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptOutPipe;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket ABI::Windows::Devices::Usb::IUsbSetupPacket
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbSetupPacket;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkInEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkInEndpointDescriptor_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbBulkInEndpointDescriptor;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbBulkInEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CUsbBulkInEndpointDescriptor;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkInEndpointDescriptor_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkInPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkInPipe_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbBulkInPipe;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbBulkInPipe __x_ABI_CWindows_CDevices_CUsb_CUsbBulkInPipe;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkInPipe_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutEndpointDescriptor_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbBulkOutEndpointDescriptor;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutEndpointDescriptor;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutEndpointDescriptor_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutPipe_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbBulkOutPipe;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutPipe __x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutPipe;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbBulkOutPipe_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbConfiguration_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbConfiguration_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbConfiguration;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbConfiguration __x_ABI_CWindows_CDevices_CUsb_CUsbConfiguration;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbConfiguration_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbConfigurationDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbConfigurationDescriptor_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbConfigurationDescriptor;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbConfigurationDescriptor __x_ABI_CWindows_CDevices_CUsb_CUsbConfigurationDescriptor;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbConfigurationDescriptor_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbControlRequestType_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbControlRequestType_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbControlRequestType;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbControlRequestType __x_ABI_CWindows_CDevices_CUsb_CUsbControlRequestType;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbControlRequestType_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbDescriptor_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbDescriptor;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbDescriptor __x_ABI_CWindows_CDevices_CUsb_CUsbDescriptor;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbDescriptor_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbDevice_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbDevice_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbDevice;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbDevice __x_ABI_CWindows_CDevices_CUsb_CUsbDevice;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbDevice_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbDeviceClass_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbDeviceClass_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbDeviceClass;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbDeviceClass __x_ABI_CWindows_CDevices_CUsb_CUsbDeviceClass;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbDeviceClass_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbDeviceDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbDeviceDescriptor_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbDeviceDescriptor;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbDeviceDescriptor __x_ABI_CWindows_CDevices_CUsb_CUsbDeviceDescriptor;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbDeviceDescriptor_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbInterface_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbInterface_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbInterface;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbInterface __x_ABI_CWindows_CDevices_CUsb_CUsbInterface;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbInterface_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceDescriptor_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbInterfaceDescriptor;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceDescriptor __x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceDescriptor;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceDescriptor_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceSetting_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceSetting_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbInterfaceSetting;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceSetting __x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceSetting;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbInterfaceSetting_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEventArgs_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbInterruptInEventArgs;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEventArgs __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEventArgs;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEventArgs_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEndpointDescriptor_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbInterruptInEndpointDescriptor;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEndpointDescriptor;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInEndpointDescriptor_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInPipe_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbInterruptInPipe;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInPipe __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInPipe;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptInPipe_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbInterruptOutEndpointDescriptor;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutEndpointDescriptor;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutEndpointDescriptor_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutPipe_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbInterruptOutPipe;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutPipe __x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutPipe;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbInterruptOutPipe_FWD_DEFINED__ */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbSetupPacket_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbSetupPacket_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                class UsbSetupPacket;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CUsbSetupPacket __x_ABI_CWindows_CDevices_CUsb_CUsbSetupPacket;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CDevices_CUsb_CUsbSetupPacket_FWD_DEFINED__ */

#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_FWD_DEFINED__
#define ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_FWD_DEFINED__
typedef interface __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice;
#ifdef __cplusplus
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice ABI::Windows::Foundation::IAsyncOperationCompletedHandler<ABI::Windows::Devices::Usb::UsbDevice* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkInPipe* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutPipe* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterface* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterfaceSetting* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInPipe* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutPipe* >
#endif /* __cplusplus */
#endif

#ifndef ____FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_FWD_DEFINED__
#define ____FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_FWD_DEFINED__
typedef interface __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice;
#ifdef __cplusplus
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Devices::Usb::UsbDevice* >
#endif /* __cplusplus */
#endif

#ifndef ____FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_FWD_DEFINED__
#define ____FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_FWD_DEFINED__
typedef interface __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs;
#ifdef __cplusplus
#define __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Usb::UsbInterruptInPipe*,ABI::Windows::Devices::Usb::UsbInterruptInEventArgs* >
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <inspectable.h>
#include <asyncinfo.h>
#include <eventtoken.h>
#include <windowscontracts.h>
#include <windows.foundation.h>
#include <windows.storage.streams.h>

#ifdef __cplusplus
extern "C" {
#endif

#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient_ENUM_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient_ENUM_DEFINED__
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                enum UsbControlRecipient {
                    UsbControlRecipient_Device = 0,
                    UsbControlRecipient_SpecifiedInterface = 1,
                    UsbControlRecipient_Endpoint = 2,
                    UsbControlRecipient_Other = 3,
                    UsbControlRecipient_DefaultInterface = 4
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient {
    UsbControlRecipient_Device = 0,
    UsbControlRecipient_SpecifiedInterface = 1,
    UsbControlRecipient_Endpoint = 2,
    UsbControlRecipient_Other = 3,
    UsbControlRecipient_DefaultInterface = 4
};
#ifdef WIDL_using_Windows_Devices_Usb
#define UsbControlRecipient __x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif /* ____x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient_ENUM_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient __x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient;
#endif /* __cplusplus */

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType_ENUM_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType_ENUM_DEFINED__
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                enum UsbControlTransferType {
                    UsbControlTransferType_Standard = 0,
                    UsbControlTransferType_Class = 1,
                    UsbControlTransferType_Vendor = 2
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType {
    UsbControlTransferType_Standard = 0,
    UsbControlTransferType_Class = 1,
    UsbControlTransferType_Vendor = 2
};
#ifdef WIDL_using_Windows_Devices_Usb
#define UsbControlTransferType __x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif /* ____x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType_ENUM_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType __x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType;
#endif /* __cplusplus */

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions_ENUM_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions_ENUM_DEFINED__
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                enum UsbReadOptions {
                    UsbReadOptions_None = 0x0,
                    UsbReadOptions_AutoClearStall = 0x1,
                    UsbReadOptions_OverrideAutomaticBufferManagement = 0x2,
                    UsbReadOptions_IgnoreShortPacket = 0x4,
                    UsbReadOptions_AllowPartialReads = 0x8
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions {
    UsbReadOptions_None = 0x0,
    UsbReadOptions_AutoClearStall = 0x1,
    UsbReadOptions_OverrideAutomaticBufferManagement = 0x2,
    UsbReadOptions_IgnoreShortPacket = 0x4,
    UsbReadOptions_AllowPartialReads = 0x8
};
#ifdef WIDL_using_Windows_Devices_Usb
#define UsbReadOptions __x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif /* ____x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions_ENUM_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions __x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions;
#endif /* __cplusplus */

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection_ENUM_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection_ENUM_DEFINED__
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                enum UsbTransferDirection {
                    UsbTransferDirection_Out = 0,
                    UsbTransferDirection_In = 1
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection {
    UsbTransferDirection_Out = 0,
    UsbTransferDirection_In = 1
};
#ifdef WIDL_using_Windows_Devices_Usb
#define UsbTransferDirection __x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif /* ____x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection_ENUM_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection __x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection;
#endif /* __cplusplus */

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions_ENUM_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions_ENUM_DEFINED__
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                enum UsbWriteOptions {
                    UsbWriteOptions_None = 0x0,
                    UsbWriteOptions_AutoClearStall = 0x1,
                    UsbWriteOptions_ShortPacketTerminate = 0x2
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions {
    UsbWriteOptions_None = 0x0,
    UsbWriteOptions_AutoClearStall = 0x1,
    UsbWriteOptions_ShortPacketTerminate = 0x2
};
#ifdef WIDL_using_Windows_Devices_Usb
#define UsbWriteOptions __x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif /* ____x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions_ENUM_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */
#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions __x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions;
#endif /* __cplusplus */

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor ABI::Windows::Devices::Usb::IUsbBulkInEndpointDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbBulkInEndpointDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe ABI::Windows::Devices::Usb::IUsbBulkInPipe
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbBulkInPipe;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice ABI::Windows::Devices::Usb::IUsbDevice
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDevice;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass ABI::Windows::Devices::Usb::IUsbDeviceClass
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDeviceClass;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration ABI::Windows::Devices::Usb::IUsbConfiguration
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbConfiguration;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor ABI::Windows::Devices::Usb::IUsbConfigurationDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbConfigurationDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics ABI::Windows::Devices::Usb::IUsbConfigurationDescriptorStatics
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbConfigurationDescriptorStatics;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType ABI::Windows::Devices::Usb::IUsbControlRequestType
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbControlRequestType;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor ABI::Windows::Devices::Usb::IUsbDeviceDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDeviceDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics ABI::Windows::Devices::Usb::IUsbDeviceStatics
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbDeviceStatics;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface ABI::Windows::Devices::Usb::IUsbInterface
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterface;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor ABI::Windows::Devices::Usb::IUsbInterfaceDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterfaceDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics ABI::Windows::Devices::Usb::IUsbInterfaceDescriptorStatics
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterfaceDescriptorStatics;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor ABI::Windows::Devices::Usb::IUsbInterruptInEndpointDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptInEndpointDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs ABI::Windows::Devices::Usb::IUsbInterruptInEventArgs
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptInEventArgs;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe ABI::Windows::Devices::Usb::IUsbInterruptInPipe
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptInPipe;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor ABI::Windows::Devices::Usb::IUsbInterruptOutEndpointDescriptor
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptOutEndpointDescriptor;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe ABI::Windows::Devices::Usb::IUsbInterruptOutPipe
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbInterruptOutPipe;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket ABI::Windows::Devices::Usb::IUsbSetupPacket
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbSetupPacket;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketFactory_FWD_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketFactory_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketFactory __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketFactory;
#ifdef __cplusplus
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketFactory ABI::Windows::Devices::Usb::IUsbSetupPacketFactory
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                interface IUsbSetupPacketFactory;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkInPipe* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutPipe* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterface* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterfaceSetting* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInPipe* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor* >
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_FWD_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_FWD_DEFINED__
typedef interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe;
#ifdef __cplusplus
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutPipe* >
#endif /* __cplusplus */
#endif

#ifndef ____FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_FWD_DEFINED__
#define ____FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_FWD_DEFINED__
typedef interface __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice;
#ifdef __cplusplus
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Devices::Usb::UsbDevice* >
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * IUsbBulkInEndpointDescriptor interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor, 0x3c6e4846, 0x06cf, 0x42a9, 0x9d,0xc2, 0x97,0x1c,0x1b,0x14,0xb6,0xe3);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("3c6e4846-06cf-42a9-9dc2-971c1b14b6e3")
                IUsbBulkInEndpointDescriptor : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_MaxPacketSize(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_EndpointNumber(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Pipe(
                        ABI::Windows::Devices::Usb::IUsbBulkInPipe **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor, 0x3c6e4846, 0x06cf, 0x42a9, 0x9d,0xc2, 0x97,0x1c,0x1b,0x14,0xb6,0xe3)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This,
        TrustLevel *trustLevel);

    /*** IUsbBulkInEndpointDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *get_MaxPacketSize)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_EndpointNumber)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_Pipe)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptorVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbBulkInEndpointDescriptor methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_MaxPacketSize(This,value) (This)->lpVtbl->get_MaxPacketSize(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_EndpointNumber(This,value) (This)->lpVtbl->get_EndpointNumber(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_Pipe(This,value) (This)->lpVtbl->get_Pipe(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbBulkInEndpointDescriptor methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_MaxPacketSize(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_MaxPacketSize(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_EndpointNumber(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_EndpointNumber(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_Pipe(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe **value) {
    return This->lpVtbl->get_Pipe(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbBulkInEndpointDescriptor IID___x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor
#define IUsbBulkInEndpointDescriptorVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptorVtbl
#define IUsbBulkInEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor
#define IUsbBulkInEndpointDescriptor_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_QueryInterface
#define IUsbBulkInEndpointDescriptor_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_AddRef
#define IUsbBulkInEndpointDescriptor_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_Release
#define IUsbBulkInEndpointDescriptor_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetIids
#define IUsbBulkInEndpointDescriptor_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetRuntimeClassName
#define IUsbBulkInEndpointDescriptor_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_GetTrustLevel
#define IUsbBulkInEndpointDescriptor_get_MaxPacketSize __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_MaxPacketSize
#define IUsbBulkInEndpointDescriptor_get_EndpointNumber __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_EndpointNumber
#define IUsbBulkInEndpointDescriptor_get_Pipe __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_get_Pipe
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbBulkInPipe interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe, 0xf01d2d3b, 0x4548, 0x4d50, 0xb3,0x26, 0xd8,0x2c,0xda,0xbe,0x12,0x20);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("f01d2d3b-4548-4d50-b326-d82cdabe1220")
                IUsbBulkInPipe : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_MaxTransferSizeBytes(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_EndpointDescriptor(
                        ABI::Windows::Devices::Usb::IUsbBulkInEndpointDescriptor **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE ClearStallAsync(
                        ABI::Windows::Foundation::IAsyncAction **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_ReadOptions(
                        ABI::Windows::Devices::Usb::UsbReadOptions value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ReadOptions(
                        ABI::Windows::Devices::Usb::UsbReadOptions *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE FlushBuffer(
                        ) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InputStream(
                        ABI::Windows::Storage::Streams::IInputStream **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe, 0xf01d2d3b, 0x4548, 0x4d50, 0xb3,0x26, 0xd8,0x2c,0xda,0xbe,0x12,0x20)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        TrustLevel *trustLevel);

    /*** IUsbBulkInPipe methods ***/
    HRESULT (STDMETHODCALLTYPE *get_MaxTransferSizeBytes)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_EndpointDescriptor)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *ClearStallAsync)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        __x_ABI_CWindows_CFoundation_CIAsyncAction **operation);

    HRESULT (STDMETHODCALLTYPE *put_ReadOptions)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions value);

    HRESULT (STDMETHODCALLTYPE *get_ReadOptions)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions *value);

    HRESULT (STDMETHODCALLTYPE *FlushBuffer)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This);

    HRESULT (STDMETHODCALLTYPE *get_InputStream)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *This,
        __x_ABI_CWindows_CStorage_CStreams_CIInputStream **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipeVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbBulkInPipe methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_MaxTransferSizeBytes(This,value) (This)->lpVtbl->get_MaxTransferSizeBytes(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_EndpointDescriptor(This,value) (This)->lpVtbl->get_EndpointDescriptor(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_ClearStallAsync(This,operation) (This)->lpVtbl->ClearStallAsync(This,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_put_ReadOptions(This,value) (This)->lpVtbl->put_ReadOptions(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_ReadOptions(This,value) (This)->lpVtbl->get_ReadOptions(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_FlushBuffer(This) (This)->lpVtbl->FlushBuffer(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_InputStream(This,value) (This)->lpVtbl->get_InputStream(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbBulkInPipe methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_MaxTransferSizeBytes(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,UINT32 *value) {
    return This->lpVtbl->get_MaxTransferSizeBytes(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_EndpointDescriptor(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor **value) {
    return This->lpVtbl->get_EndpointDescriptor(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_ClearStallAsync(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,__x_ABI_CWindows_CFoundation_CIAsyncAction **operation) {
    return This->lpVtbl->ClearStallAsync(This,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_put_ReadOptions(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,__x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions value) {
    return This->lpVtbl->put_ReadOptions(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_ReadOptions(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,__x_ABI_CWindows_CDevices_CUsb_CUsbReadOptions *value) {
    return This->lpVtbl->get_ReadOptions(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_FlushBuffer(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This) {
    return This->lpVtbl->FlushBuffer(This);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_InputStream(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe* This,__x_ABI_CWindows_CStorage_CStreams_CIInputStream **value) {
    return This->lpVtbl->get_InputStream(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbBulkInPipe IID___x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe
#define IUsbBulkInPipeVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipeVtbl
#define IUsbBulkInPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe
#define IUsbBulkInPipe_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_QueryInterface
#define IUsbBulkInPipe_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_AddRef
#define IUsbBulkInPipe_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_Release
#define IUsbBulkInPipe_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetIids
#define IUsbBulkInPipe_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetRuntimeClassName
#define IUsbBulkInPipe_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_GetTrustLevel
#define IUsbBulkInPipe_get_MaxTransferSizeBytes __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_MaxTransferSizeBytes
#define IUsbBulkInPipe_get_EndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_EndpointDescriptor
#define IUsbBulkInPipe_ClearStallAsync __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_ClearStallAsync
#define IUsbBulkInPipe_put_ReadOptions __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_put_ReadOptions
#define IUsbBulkInPipe_get_ReadOptions __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_ReadOptions
#define IUsbBulkInPipe_FlushBuffer __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_FlushBuffer
#define IUsbBulkInPipe_get_InputStream __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_get_InputStream
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbBulkOutEndpointDescriptor interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor, 0x2820847a, 0xffee, 0x4f60, 0x9b,0xe1, 0x95,0x6c,0xac,0x3e,0xcb,0x65);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("2820847a-ffee-4f60-9be1-956cac3ecb65")
                IUsbBulkOutEndpointDescriptor : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_MaxPacketSize(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_EndpointNumber(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Pipe(
                        ABI::Windows::Devices::Usb::IUsbBulkOutPipe **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor, 0x2820847a, 0xffee, 0x4f60, 0x9b,0xe1, 0x95,0x6c,0xac,0x3e,0xcb,0x65)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This,
        TrustLevel *trustLevel);

    /*** IUsbBulkOutEndpointDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *get_MaxPacketSize)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_EndpointNumber)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_Pipe)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptorVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbBulkOutEndpointDescriptor methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_MaxPacketSize(This,value) (This)->lpVtbl->get_MaxPacketSize(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_EndpointNumber(This,value) (This)->lpVtbl->get_EndpointNumber(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_Pipe(This,value) (This)->lpVtbl->get_Pipe(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbBulkOutEndpointDescriptor methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_MaxPacketSize(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_MaxPacketSize(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_EndpointNumber(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_EndpointNumber(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_Pipe(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe **value) {
    return This->lpVtbl->get_Pipe(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbBulkOutEndpointDescriptor IID___x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor
#define IUsbBulkOutEndpointDescriptorVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptorVtbl
#define IUsbBulkOutEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor
#define IUsbBulkOutEndpointDescriptor_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_QueryInterface
#define IUsbBulkOutEndpointDescriptor_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_AddRef
#define IUsbBulkOutEndpointDescriptor_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_Release
#define IUsbBulkOutEndpointDescriptor_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetIids
#define IUsbBulkOutEndpointDescriptor_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetRuntimeClassName
#define IUsbBulkOutEndpointDescriptor_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_GetTrustLevel
#define IUsbBulkOutEndpointDescriptor_get_MaxPacketSize __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_MaxPacketSize
#define IUsbBulkOutEndpointDescriptor_get_EndpointNumber __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_EndpointNumber
#define IUsbBulkOutEndpointDescriptor_get_Pipe __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_get_Pipe
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbBulkOutPipe interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe, 0xa8e9ee6e, 0x0115, 0x45aa, 0x8b,0x21, 0x37,0xb2,0x25,0xbc,0xce,0xe7);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("a8e9ee6e-0115-45aa-8b21-37b225bccee7")
                IUsbBulkOutPipe : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_EndpointDescriptor(
                        ABI::Windows::Devices::Usb::IUsbBulkOutEndpointDescriptor **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE ClearStallAsync(
                        ABI::Windows::Foundation::IAsyncAction **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_WriteOptions(
                        ABI::Windows::Devices::Usb::UsbWriteOptions value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_WriteOptions(
                        ABI::Windows::Devices::Usb::UsbWriteOptions *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_OutputStream(
                        ABI::Windows::Storage::Streams::IOutputStream **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe, 0xa8e9ee6e, 0x0115, 0x45aa, 0x8b,0x21, 0x37,0xb2,0x25,0xbc,0xce,0xe7)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        TrustLevel *trustLevel);

    /*** IUsbBulkOutPipe methods ***/
    HRESULT (STDMETHODCALLTYPE *get_EndpointDescriptor)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *ClearStallAsync)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        __x_ABI_CWindows_CFoundation_CIAsyncAction **operation);

    HRESULT (STDMETHODCALLTYPE *put_WriteOptions)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions value);

    HRESULT (STDMETHODCALLTYPE *get_WriteOptions)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions *value);

    HRESULT (STDMETHODCALLTYPE *get_OutputStream)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *This,
        __x_ABI_CWindows_CStorage_CStreams_CIOutputStream **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipeVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbBulkOutPipe methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_EndpointDescriptor(This,value) (This)->lpVtbl->get_EndpointDescriptor(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_ClearStallAsync(This,operation) (This)->lpVtbl->ClearStallAsync(This,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_put_WriteOptions(This,value) (This)->lpVtbl->put_WriteOptions(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_WriteOptions(This,value) (This)->lpVtbl->get_WriteOptions(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_OutputStream(This,value) (This)->lpVtbl->get_OutputStream(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbBulkOutPipe methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_EndpointDescriptor(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor **value) {
    return This->lpVtbl->get_EndpointDescriptor(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_ClearStallAsync(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,__x_ABI_CWindows_CFoundation_CIAsyncAction **operation) {
    return This->lpVtbl->ClearStallAsync(This,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_put_WriteOptions(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,__x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions value) {
    return This->lpVtbl->put_WriteOptions(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_WriteOptions(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,__x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions *value) {
    return This->lpVtbl->get_WriteOptions(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_OutputStream(__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe* This,__x_ABI_CWindows_CStorage_CStreams_CIOutputStream **value) {
    return This->lpVtbl->get_OutputStream(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbBulkOutPipe IID___x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe
#define IUsbBulkOutPipeVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipeVtbl
#define IUsbBulkOutPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe
#define IUsbBulkOutPipe_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_QueryInterface
#define IUsbBulkOutPipe_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_AddRef
#define IUsbBulkOutPipe_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_Release
#define IUsbBulkOutPipe_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetIids
#define IUsbBulkOutPipe_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetRuntimeClassName
#define IUsbBulkOutPipe_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_GetTrustLevel
#define IUsbBulkOutPipe_get_EndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_EndpointDescriptor
#define IUsbBulkOutPipe_ClearStallAsync __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_ClearStallAsync
#define IUsbBulkOutPipe_put_WriteOptions __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_put_WriteOptions
#define IUsbBulkOutPipe_get_WriteOptions __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_WriteOptions
#define IUsbBulkOutPipe_get_OutputStream __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_get_OutputStream
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbConfiguration interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration, 0x68177429, 0x36a9, 0x46d7, 0xb8,0x73, 0xfc,0x68,0x92,0x51,0xec,0x30);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("68177429-36a9-46d7-b873-fc689251ec30")
                IUsbConfiguration : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_UsbInterfaces(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterface* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ConfigurationDescriptor(
                        ABI::Windows::Devices::Usb::IUsbConfigurationDescriptor **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Descriptors(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* > **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration, 0x68177429, 0x36a9, 0x46d7, 0xb8,0x73, 0xfc,0x68,0x92,0x51,0xec,0x30)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This,
        TrustLevel *trustLevel);

    /*** IUsbConfiguration methods ***/
    HRESULT (STDMETHODCALLTYPE *get_UsbInterfaces)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface **value);

    HRESULT (STDMETHODCALLTYPE *get_ConfigurationDescriptor)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Descriptors)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbConfiguration methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_UsbInterfaces(This,value) (This)->lpVtbl->get_UsbInterfaces(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_ConfigurationDescriptor(This,value) (This)->lpVtbl->get_ConfigurationDescriptor(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_Descriptors(This,value) (This)->lpVtbl->get_Descriptors(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbConfiguration methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_UsbInterfaces(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface **value) {
    return This->lpVtbl->get_UsbInterfaces(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_ConfigurationDescriptor(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor **value) {
    return This->lpVtbl->get_ConfigurationDescriptor(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_Descriptors(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor **value) {
    return This->lpVtbl->get_Descriptors(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbConfiguration IID___x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration
#define IUsbConfigurationVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationVtbl
#define IUsbConfiguration __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration
#define IUsbConfiguration_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_QueryInterface
#define IUsbConfiguration_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_AddRef
#define IUsbConfiguration_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_Release
#define IUsbConfiguration_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetIids
#define IUsbConfiguration_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetRuntimeClassName
#define IUsbConfiguration_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_GetTrustLevel
#define IUsbConfiguration_get_UsbInterfaces __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_UsbInterfaces
#define IUsbConfiguration_get_ConfigurationDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_ConfigurationDescriptor
#define IUsbConfiguration_get_Descriptors __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_get_Descriptors
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbConfigurationDescriptor interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor, 0xf2176d92, 0xb442, 0x407a, 0x82,0x07, 0x7d,0x64,0x6c,0x03,0x85,0xf3);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("f2176d92-b442-407a-8207-7d646c0385f3")
                IUsbConfigurationDescriptor : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_ConfigurationValue(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_MaxPowerMilliamps(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_SelfPowered(
                        boolean *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_RemoteWakeup(
                        boolean *value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor, 0xf2176d92, 0xb442, 0x407a, 0x82,0x07, 0x7d,0x64,0x6c,0x03,0x85,0xf3)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This,
        TrustLevel *trustLevel);

    /*** IUsbConfigurationDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ConfigurationValue)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_MaxPowerMilliamps)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_SelfPowered)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This,
        boolean *value);

    HRESULT (STDMETHODCALLTYPE *get_RemoteWakeup)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor *This,
        boolean *value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbConfigurationDescriptor methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_ConfigurationValue(This,value) (This)->lpVtbl->get_ConfigurationValue(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_MaxPowerMilliamps(This,value) (This)->lpVtbl->get_MaxPowerMilliamps(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_SelfPowered(This,value) (This)->lpVtbl->get_SelfPowered(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_RemoteWakeup(This,value) (This)->lpVtbl->get_RemoteWakeup(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbConfigurationDescriptor methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_ConfigurationValue(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_ConfigurationValue(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_MaxPowerMilliamps(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_MaxPowerMilliamps(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_SelfPowered(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This,boolean *value) {
    return This->lpVtbl->get_SelfPowered(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_RemoteWakeup(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor* This,boolean *value) {
    return This->lpVtbl->get_RemoteWakeup(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbConfigurationDescriptor IID___x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor
#define IUsbConfigurationDescriptorVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorVtbl
#define IUsbConfigurationDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor
#define IUsbConfigurationDescriptor_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_QueryInterface
#define IUsbConfigurationDescriptor_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_AddRef
#define IUsbConfigurationDescriptor_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_Release
#define IUsbConfigurationDescriptor_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetIids
#define IUsbConfigurationDescriptor_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetRuntimeClassName
#define IUsbConfigurationDescriptor_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_GetTrustLevel
#define IUsbConfigurationDescriptor_get_ConfigurationValue __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_ConfigurationValue
#define IUsbConfigurationDescriptor_get_MaxPowerMilliamps __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_MaxPowerMilliamps
#define IUsbConfigurationDescriptor_get_SelfPowered __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_SelfPowered
#define IUsbConfigurationDescriptor_get_RemoteWakeup __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_get_RemoteWakeup
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbConfigurationDescriptorStatics interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics, 0x424ced93, 0xe740, 0x40a1, 0x92,0xbd, 0xda,0x12,0x0e,0xa0,0x49,0x14);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("424ced93-e740-40a1-92bd-da120ea04914")
                IUsbConfigurationDescriptorStatics : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE TryParse(
                        ABI::Windows::Devices::Usb::IUsbDescriptor *descriptor,
                        ABI::Windows::Devices::Usb::IUsbConfigurationDescriptor **parsed,
                        boolean *success) = 0;

                    virtual HRESULT STDMETHODCALLTYPE Parse(
                        ABI::Windows::Devices::Usb::IUsbDescriptor *descriptor,
                        ABI::Windows::Devices::Usb::IUsbConfigurationDescriptor **parsed) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics, 0x424ced93, 0xe740, 0x40a1, 0x92,0xbd, 0xda,0x12,0x0e,0xa0,0x49,0x14)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStaticsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics *This,
        TrustLevel *trustLevel);

    /*** IUsbConfigurationDescriptorStatics methods ***/
    HRESULT (STDMETHODCALLTYPE *TryParse)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *descriptor,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor **parsed,
        boolean *success);

    HRESULT (STDMETHODCALLTYPE *Parse)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *descriptor,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor **parsed);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStaticsVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStaticsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbConfigurationDescriptorStatics methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_TryParse(This,descriptor,parsed,success) (This)->lpVtbl->TryParse(This,descriptor,parsed,success)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_Parse(This,descriptor,parsed) (This)->lpVtbl->Parse(This,descriptor,parsed)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbConfigurationDescriptorStatics methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_TryParse(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *descriptor,__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor **parsed,boolean *success) {
    return This->lpVtbl->TryParse(This,descriptor,parsed,success);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_Parse(__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *descriptor,__x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptor **parsed) {
    return This->lpVtbl->Parse(This,descriptor,parsed);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbConfigurationDescriptorStatics IID___x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics
#define IUsbConfigurationDescriptorStaticsVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStaticsVtbl
#define IUsbConfigurationDescriptorStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics
#define IUsbConfigurationDescriptorStatics_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_QueryInterface
#define IUsbConfigurationDescriptorStatics_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_AddRef
#define IUsbConfigurationDescriptorStatics_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_Release
#define IUsbConfigurationDescriptorStatics_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetIids
#define IUsbConfigurationDescriptorStatics_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetRuntimeClassName
#define IUsbConfigurationDescriptorStatics_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_GetTrustLevel
#define IUsbConfigurationDescriptorStatics_TryParse __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_TryParse
#define IUsbConfigurationDescriptorStatics_Parse __x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_Parse
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbConfigurationDescriptorStatics_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbControlRequestType interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType, 0x8e9465a6, 0xd73d, 0x46de, 0x94,0xbe, 0xaa,0xe7,0xf0,0x7c,0x0f,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("8e9465a6-d73d-46de-94be-aae7f07c0f5c")
                IUsbControlRequestType : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_Direction(
                        ABI::Windows::Devices::Usb::UsbTransferDirection *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_Direction(
                        ABI::Windows::Devices::Usb::UsbTransferDirection value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ControlTransferType(
                        ABI::Windows::Devices::Usb::UsbControlTransferType *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_ControlTransferType(
                        ABI::Windows::Devices::Usb::UsbControlTransferType value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Recipient(
                        ABI::Windows::Devices::Usb::UsbControlRecipient *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_Recipient(
                        ABI::Windows::Devices::Usb::UsbControlRecipient value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_AsByte(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_AsByte(
                        BYTE value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType, 0x8e9465a6, 0xd73d, 0x46de, 0x94,0xbe, 0xaa,0xe7,0xf0,0x7c,0x0f,0x5c)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestTypeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        TrustLevel *trustLevel);

    /*** IUsbControlRequestType methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Direction)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection *value);

    HRESULT (STDMETHODCALLTYPE *put_Direction)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection value);

    HRESULT (STDMETHODCALLTYPE *get_ControlTransferType)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType *value);

    HRESULT (STDMETHODCALLTYPE *put_ControlTransferType)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType value);

    HRESULT (STDMETHODCALLTYPE *get_Recipient)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient *value);

    HRESULT (STDMETHODCALLTYPE *put_Recipient)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient value);

    HRESULT (STDMETHODCALLTYPE *get_AsByte)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *put_AsByte)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *This,
        BYTE value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestTypeVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestTypeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbControlRequestType methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_Direction(This,value) (This)->lpVtbl->get_Direction(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_Direction(This,value) (This)->lpVtbl->put_Direction(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_ControlTransferType(This,value) (This)->lpVtbl->get_ControlTransferType(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_ControlTransferType(This,value) (This)->lpVtbl->put_ControlTransferType(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_Recipient(This,value) (This)->lpVtbl->get_Recipient(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_Recipient(This,value) (This)->lpVtbl->put_Recipient(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_AsByte(This,value) (This)->lpVtbl->get_AsByte(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_AsByte(This,value) (This)->lpVtbl->put_AsByte(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbControlRequestType methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_Direction(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,__x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection *value) {
    return This->lpVtbl->get_Direction(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_Direction(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,__x_ABI_CWindows_CDevices_CUsb_CUsbTransferDirection value) {
    return This->lpVtbl->put_Direction(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_ControlTransferType(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,__x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType *value) {
    return This->lpVtbl->get_ControlTransferType(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_ControlTransferType(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,__x_ABI_CWindows_CDevices_CUsb_CUsbControlTransferType value) {
    return This->lpVtbl->put_ControlTransferType(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_Recipient(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,__x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient *value) {
    return This->lpVtbl->get_Recipient(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_Recipient(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,__x_ABI_CWindows_CDevices_CUsb_CUsbControlRecipient value) {
    return This->lpVtbl->put_Recipient(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_AsByte(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,BYTE *value) {
    return This->lpVtbl->get_AsByte(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_AsByte(__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType* This,BYTE value) {
    return This->lpVtbl->put_AsByte(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbControlRequestType IID___x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType
#define IUsbControlRequestTypeVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestTypeVtbl
#define IUsbControlRequestType __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType
#define IUsbControlRequestType_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_QueryInterface
#define IUsbControlRequestType_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_AddRef
#define IUsbControlRequestType_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_Release
#define IUsbControlRequestType_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetIids
#define IUsbControlRequestType_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetRuntimeClassName
#define IUsbControlRequestType_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_GetTrustLevel
#define IUsbControlRequestType_get_Direction __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_Direction
#define IUsbControlRequestType_put_Direction __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_Direction
#define IUsbControlRequestType_get_ControlTransferType __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_ControlTransferType
#define IUsbControlRequestType_put_ControlTransferType __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_ControlTransferType
#define IUsbControlRequestType_get_Recipient __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_Recipient
#define IUsbControlRequestType_put_Recipient __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_Recipient
#define IUsbControlRequestType_get_AsByte __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_get_AsByte
#define IUsbControlRequestType_put_AsByte __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_put_AsByte
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbDescriptor interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor, 0x0a89f216, 0x5f9d, 0x4874, 0x89,0x04, 0xda,0x9a,0xd3,0xf5,0x52,0x8f);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("0a89f216-5f9d-4874-8904-da9ad3f5528f")
                IUsbDescriptor : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_Length(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_DescriptorType(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE ReadDescriptorBuffer(
                        ABI::Windows::Storage::Streams::IBuffer *buffer) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor, 0x0a89f216, 0x5f9d, 0x4874, 0x89,0x04, 0xda,0x9a,0xd3,0xf5,0x52,0x8f)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This,
        TrustLevel *trustLevel);

    /*** IUsbDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Length)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_DescriptorType)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *ReadDescriptorBuffer)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *This,
        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *buffer);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptorVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbDescriptor methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_get_Length(This,value) (This)->lpVtbl->get_Length(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_get_DescriptorType(This,value) (This)->lpVtbl->get_DescriptorType(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_ReadDescriptorBuffer(This,buffer) (This)->lpVtbl->ReadDescriptorBuffer(This,buffer)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbDescriptor methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_get_Length(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_Length(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_get_DescriptorType(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_DescriptorType(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_ReadDescriptorBuffer(__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor* This,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *buffer) {
    return This->lpVtbl->ReadDescriptorBuffer(This,buffer);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbDescriptor IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor
#define IUsbDescriptorVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptorVtbl
#define IUsbDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor
#define IUsbDescriptor_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_QueryInterface
#define IUsbDescriptor_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_AddRef
#define IUsbDescriptor_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_Release
#define IUsbDescriptor_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetIids
#define IUsbDescriptor_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetRuntimeClassName
#define IUsbDescriptor_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_GetTrustLevel
#define IUsbDescriptor_get_Length __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_get_Length
#define IUsbDescriptor_get_DescriptorType __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_get_DescriptorType
#define IUsbDescriptor_ReadDescriptorBuffer __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_ReadDescriptorBuffer
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbDevice interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDevice, 0x5249b992, 0xc456, 0x44d5, 0xad,0x5e, 0x24,0xf5,0xa0,0x89,0xf6,0x3b);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("5249b992-c456-44d5-ad5e-24f5a089f63b")
                IUsbDevice : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE SendControlOutTransferAsync(
                        ABI::Windows::Devices::Usb::IUsbSetupPacket *packet,
                        ABI::Windows::Storage::Streams::IBuffer *buffer,
                        ABI::Windows::Foundation::IAsyncOperation<UINT32 > **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE SendControlOutTransferAsyncNoBuffer(
                        ABI::Windows::Devices::Usb::IUsbSetupPacket *packet,
                        ABI::Windows::Foundation::IAsyncOperation<UINT32 > **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE SendControlInTransferAsync(
                        ABI::Windows::Devices::Usb::IUsbSetupPacket *packet,
                        ABI::Windows::Storage::Streams::IBuffer *buffer,
                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::Streams::IBuffer* > **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE SendControlInTransferAsyncNoBuffer(
                        ABI::Windows::Devices::Usb::IUsbSetupPacket *packet,
                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::Streams::IBuffer* > **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_DefaultInterface(
                        ABI::Windows::Devices::Usb::IUsbInterface **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_DeviceDescriptor(
                        ABI::Windows::Devices::Usb::IUsbDeviceDescriptor **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Configuration(
                        ABI::Windows::Devices::Usb::IUsbConfiguration **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice, 0x5249b992, 0xc456, 0x44d5, 0xad,0x5e, 0x24,0xf5,0xa0,0x89,0xf6,0x3b)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        TrustLevel *trustLevel);

    /*** IUsbDevice methods ***/
    HRESULT (STDMETHODCALLTYPE *SendControlOutTransferAsync)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *packet,
        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *buffer,
        __FIAsyncOperation_1_UINT32 **operation);

    HRESULT (STDMETHODCALLTYPE *SendControlOutTransferAsyncNoBuffer)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *packet,
        __FIAsyncOperation_1_UINT32 **operation);

    HRESULT (STDMETHODCALLTYPE *SendControlInTransferAsync)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *packet,
        __x_ABI_CWindows_CStorage_CStreams_CIBuffer *buffer,
        __FIAsyncOperation_1_Windows__CStorage__CStreams__CIBuffer **operation);

    HRESULT (STDMETHODCALLTYPE *SendControlInTransferAsyncNoBuffer)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *packet,
        __FIAsyncOperation_1_Windows__CStorage__CStreams__CIBuffer **operation);

    HRESULT (STDMETHODCALLTYPE *get_DefaultInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface **value);

    HRESULT (STDMETHODCALLTYPE *get_DeviceDescriptor)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Configuration)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbDevice methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlOutTransferAsync(This,packet,buffer,operation) (This)->lpVtbl->SendControlOutTransferAsync(This,packet,buffer,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlOutTransferAsyncNoBuffer(This,packet,operation) (This)->lpVtbl->SendControlOutTransferAsyncNoBuffer(This,packet,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlInTransferAsync(This,packet,buffer,operation) (This)->lpVtbl->SendControlInTransferAsync(This,packet,buffer,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlInTransferAsyncNoBuffer(This,packet,operation) (This)->lpVtbl->SendControlInTransferAsyncNoBuffer(This,packet,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_DefaultInterface(This,value) (This)->lpVtbl->get_DefaultInterface(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_DeviceDescriptor(This,value) (This)->lpVtbl->get_DeviceDescriptor(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_Configuration(This,value) (This)->lpVtbl->get_Configuration(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbDevice methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlOutTransferAsync(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *packet,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *buffer,__FIAsyncOperation_1_UINT32 **operation) {
    return This->lpVtbl->SendControlOutTransferAsync(This,packet,buffer,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlOutTransferAsyncNoBuffer(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *packet,__FIAsyncOperation_1_UINT32 **operation) {
    return This->lpVtbl->SendControlOutTransferAsyncNoBuffer(This,packet,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlInTransferAsync(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *packet,__x_ABI_CWindows_CStorage_CStreams_CIBuffer *buffer,__FIAsyncOperation_1_Windows__CStorage__CStreams__CIBuffer **operation) {
    return This->lpVtbl->SendControlInTransferAsync(This,packet,buffer,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlInTransferAsyncNoBuffer(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *packet,__FIAsyncOperation_1_Windows__CStorage__CStreams__CIBuffer **operation) {
    return This->lpVtbl->SendControlInTransferAsyncNoBuffer(This,packet,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_DefaultInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface **value) {
    return This->lpVtbl->get_DefaultInterface(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_DeviceDescriptor(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor **value) {
    return This->lpVtbl->get_DeviceDescriptor(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_Configuration(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbConfiguration **value) {
    return This->lpVtbl->get_Configuration(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbDevice IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDevice
#define IUsbDeviceVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceVtbl
#define IUsbDevice __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice
#define IUsbDevice_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_QueryInterface
#define IUsbDevice_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_AddRef
#define IUsbDevice_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_Release
#define IUsbDevice_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetIids
#define IUsbDevice_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetRuntimeClassName
#define IUsbDevice_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_GetTrustLevel
#define IUsbDevice_SendControlOutTransferAsync __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlOutTransferAsync
#define IUsbDevice_SendControlOutTransferAsyncNoBuffer __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlOutTransferAsyncNoBuffer
#define IUsbDevice_SendControlInTransferAsync __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlInTransferAsync
#define IUsbDevice_SendControlInTransferAsyncNoBuffer __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_SendControlInTransferAsyncNoBuffer
#define IUsbDevice_get_DefaultInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_DefaultInterface
#define IUsbDevice_get_DeviceDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_DeviceDescriptor
#define IUsbDevice_get_Configuration __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_get_Configuration
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbDeviceClass interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass, 0x051942f9, 0x845e, 0x47eb, 0xb1,0x2a, 0x38,0xf2,0xf6,0x17,0xaf,0xe7);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("051942f9-845e-47eb-b12a-38f2f617afe7")
                IUsbDeviceClass : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_ClassCode(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_ClassCode(
                        BYTE value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_SubclassCode(
                        ABI::Windows::Foundation::IReference<BYTE > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_SubclassCode(
                        ABI::Windows::Foundation::IReference<BYTE > *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ProtocolCode(
                        ABI::Windows::Foundation::IReference<BYTE > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_ProtocolCode(
                        ABI::Windows::Foundation::IReference<BYTE > *value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass, 0x051942f9, 0x845e, 0x47eb, 0xb1,0x2a, 0x38,0xf2,0xf6,0x17,0xaf,0xe7)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClassVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        TrustLevel *trustLevel);

    /*** IUsbDeviceClass methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ClassCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *put_ClassCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        BYTE value);

    HRESULT (STDMETHODCALLTYPE *get_SubclassCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        __FIReference_1_BYTE **value);

    HRESULT (STDMETHODCALLTYPE *put_SubclassCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        __FIReference_1_BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_ProtocolCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        __FIReference_1_BYTE **value);

    HRESULT (STDMETHODCALLTYPE *put_ProtocolCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *This,
        __FIReference_1_BYTE *value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClassVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClassVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbDeviceClass methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_ClassCode(This,value) (This)->lpVtbl->get_ClassCode(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_ClassCode(This,value) (This)->lpVtbl->put_ClassCode(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_SubclassCode(This,value) (This)->lpVtbl->get_SubclassCode(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_SubclassCode(This,value) (This)->lpVtbl->put_SubclassCode(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_ProtocolCode(This,value) (This)->lpVtbl->get_ProtocolCode(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_ProtocolCode(This,value) (This)->lpVtbl->put_ProtocolCode(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbDeviceClass methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_ClassCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,BYTE *value) {
    return This->lpVtbl->get_ClassCode(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_ClassCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,BYTE value) {
    return This->lpVtbl->put_ClassCode(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_SubclassCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,__FIReference_1_BYTE **value) {
    return This->lpVtbl->get_SubclassCode(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_SubclassCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,__FIReference_1_BYTE *value) {
    return This->lpVtbl->put_SubclassCode(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_ProtocolCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,__FIReference_1_BYTE **value) {
    return This->lpVtbl->get_ProtocolCode(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_ProtocolCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This,__FIReference_1_BYTE *value) {
    return This->lpVtbl->put_ProtocolCode(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbDeviceClass IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass
#define IUsbDeviceClassVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClassVtbl
#define IUsbDeviceClass __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass
#define IUsbDeviceClass_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_QueryInterface
#define IUsbDeviceClass_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_AddRef
#define IUsbDeviceClass_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_Release
#define IUsbDeviceClass_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetIids
#define IUsbDeviceClass_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetRuntimeClassName
#define IUsbDeviceClass_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_GetTrustLevel
#define IUsbDeviceClass_get_ClassCode __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_ClassCode
#define IUsbDeviceClass_put_ClassCode __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_ClassCode
#define IUsbDeviceClass_get_SubclassCode __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_SubclassCode
#define IUsbDeviceClass_put_SubclassCode __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_SubclassCode
#define IUsbDeviceClass_get_ProtocolCode __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_get_ProtocolCode
#define IUsbDeviceClass_put_ProtocolCode __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_put_ProtocolCode
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbDeviceDescriptor interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor, 0x1f48d1f6, 0xba97, 0x4322, 0xb9,0x2c, 0xb5,0xb1,0x89,0x21,0x65,0x88);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("1f48d1f6-ba97-4322-b92c-b5b189216588")
                IUsbDeviceDescriptor : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_BcdUsb(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_MaxPacketSize0(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_VendorId(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ProductId(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_BcdDeviceRevision(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_NumberOfConfigurations(
                        BYTE *value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor, 0x1f48d1f6, 0xba97, 0x4322, 0xb9,0x2c, 0xb5,0xb1,0x89,0x21,0x65,0x88)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        TrustLevel *trustLevel);

    /*** IUsbDeviceDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *get_BcdUsb)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_MaxPacketSize0)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_VendorId)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_ProductId)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_BcdDeviceRevision)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfConfigurations)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor *This,
        BYTE *value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptorVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbDeviceDescriptor methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_BcdUsb(This,value) (This)->lpVtbl->get_BcdUsb(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_MaxPacketSize0(This,value) (This)->lpVtbl->get_MaxPacketSize0(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_VendorId(This,value) (This)->lpVtbl->get_VendorId(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_ProductId(This,value) (This)->lpVtbl->get_ProductId(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_BcdDeviceRevision(This,value) (This)->lpVtbl->get_BcdDeviceRevision(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_NumberOfConfigurations(This,value) (This)->lpVtbl->get_NumberOfConfigurations(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbDeviceDescriptor methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_BcdUsb(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_BcdUsb(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_MaxPacketSize0(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_MaxPacketSize0(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_VendorId(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_VendorId(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_ProductId(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_ProductId(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_BcdDeviceRevision(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_BcdDeviceRevision(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_NumberOfConfigurations(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_NumberOfConfigurations(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbDeviceDescriptor IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor
#define IUsbDeviceDescriptorVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptorVtbl
#define IUsbDeviceDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor
#define IUsbDeviceDescriptor_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_QueryInterface
#define IUsbDeviceDescriptor_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_AddRef
#define IUsbDeviceDescriptor_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_Release
#define IUsbDeviceDescriptor_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetIids
#define IUsbDeviceDescriptor_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetRuntimeClassName
#define IUsbDeviceDescriptor_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_GetTrustLevel
#define IUsbDeviceDescriptor_get_BcdUsb __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_BcdUsb
#define IUsbDeviceDescriptor_get_MaxPacketSize0 __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_MaxPacketSize0
#define IUsbDeviceDescriptor_get_VendorId __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_VendorId
#define IUsbDeviceDescriptor_get_ProductId __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_ProductId
#define IUsbDeviceDescriptor_get_BcdDeviceRevision __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_BcdDeviceRevision
#define IUsbDeviceDescriptor_get_NumberOfConfigurations __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_get_NumberOfConfigurations
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceDescriptor_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbDeviceStatics interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics, 0x066b85a2, 0x09b7, 0x4446, 0x85,0x02, 0x6f,0xe6,0xdc,0xaa,0x73,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("066b85a2-09b7-4446-8502-6fe6dcaa7309")
                IUsbDeviceStatics : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE GetDeviceSelector(
                        UINT32 vendor,
                        UINT32 product,
                        GUID class,
                        HSTRING *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE GetDeviceSelectorGuidOnly(
                        GUID class,
                        HSTRING *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE GetDeviceSelectorVidPidOnly(
                        UINT32 vendor,
                        UINT32 product,
                        HSTRING *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE GetDeviceClassSelector(
                        ABI::Windows::Devices::Usb::IUsbDeviceClass *class,
                        HSTRING *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE FromIdAsync(
                        HSTRING id,
                        ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Devices::Usb::UsbDevice* > **operation) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics, 0x066b85a2, 0x09b7, 0x4446, 0x85,0x02, 0x6f,0xe6,0xdc,0xaa,0x73,0x09)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStaticsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        TrustLevel *trustLevel);

    /*** IUsbDeviceStatics methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDeviceSelector)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        UINT32 vendor,
        UINT32 product,
        GUID class,
        HSTRING *value);

    HRESULT (STDMETHODCALLTYPE *GetDeviceSelectorGuidOnly)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        GUID class,
        HSTRING *value);

    HRESULT (STDMETHODCALLTYPE *GetDeviceSelectorVidPidOnly)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        UINT32 vendor,
        UINT32 product,
        HSTRING *value);

    HRESULT (STDMETHODCALLTYPE *GetDeviceClassSelector)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *class,
        HSTRING *value);

    HRESULT (STDMETHODCALLTYPE *FromIdAsync)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics *This,
        HSTRING id,
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice **operation);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStaticsVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStaticsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbDeviceStatics methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelector(This,vendor,product,class,value) (This)->lpVtbl->GetDeviceSelector(This,vendor,product,class,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelectorGuidOnly(This,class,value) (This)->lpVtbl->GetDeviceSelectorGuidOnly(This,class,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelectorVidPidOnly(This,vendor,product,value) (This)->lpVtbl->GetDeviceSelectorVidPidOnly(This,vendor,product,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceClassSelector(This,class,value) (This)->lpVtbl->GetDeviceClassSelector(This,class,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_FromIdAsync(This,id,operation) (This)->lpVtbl->FromIdAsync(This,id,operation)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbDeviceStatics methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelector(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,UINT32 vendor,UINT32 product,GUID class,HSTRING *value) {
    return This->lpVtbl->GetDeviceSelector(This,vendor,product,class,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelectorGuidOnly(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,GUID class,HSTRING *value) {
    return This->lpVtbl->GetDeviceSelectorGuidOnly(This,class,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelectorVidPidOnly(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,UINT32 vendor,UINT32 product,HSTRING *value) {
    return This->lpVtbl->GetDeviceSelectorVidPidOnly(This,vendor,product,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceClassSelector(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass *class,HSTRING *value) {
    return This->lpVtbl->GetDeviceClassSelector(This,class,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_FromIdAsync(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This,HSTRING id,__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice **operation) {
    return This->lpVtbl->FromIdAsync(This,id,operation);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbDeviceStatics IID___x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics
#define IUsbDeviceStaticsVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStaticsVtbl
#define IUsbDeviceStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics
#define IUsbDeviceStatics_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_QueryInterface
#define IUsbDeviceStatics_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_AddRef
#define IUsbDeviceStatics_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_Release
#define IUsbDeviceStatics_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetIids
#define IUsbDeviceStatics_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetRuntimeClassName
#define IUsbDeviceStatics_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetTrustLevel
#define IUsbDeviceStatics_GetDeviceSelector __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelector
#define IUsbDeviceStatics_GetDeviceSelectorGuidOnly __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelectorGuidOnly
#define IUsbDeviceStatics_GetDeviceSelectorVidPidOnly __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceSelectorVidPidOnly
#define IUsbDeviceStatics_GetDeviceClassSelector __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_GetDeviceClassSelector
#define IUsbDeviceStatics_FromIdAsync __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_FromIdAsync
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterface interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterface, 0xa0322b95, 0x7f47, 0x48ab, 0xa7,0x27, 0x67,0x8c,0x25,0xbe,0x21,0x12);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("a0322b95-7f47-48ab-a727-678c25be2112")
                IUsbInterface : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_BulkInPipes(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkInPipe* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InterruptInPipes(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInPipe* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_BulkOutPipes(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutPipe* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InterruptOutPipes(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutPipe* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InterfaceSettings(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterfaceSetting* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InterfaceNumber(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Descriptors(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* > **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface, 0xa0322b95, 0x7f47, 0x48ab, 0xa7,0x27, 0x67,0x8c,0x25,0xbe,0x21,0x12)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        TrustLevel *trustLevel);

    /*** IUsbInterface methods ***/
    HRESULT (STDMETHODCALLTYPE *get_BulkInPipes)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe **value);

    HRESULT (STDMETHODCALLTYPE *get_InterruptInPipes)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe **value);

    HRESULT (STDMETHODCALLTYPE *get_BulkOutPipes)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe **value);

    HRESULT (STDMETHODCALLTYPE *get_InterruptOutPipes)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe **value);

    HRESULT (STDMETHODCALLTYPE *get_InterfaceSettings)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting **value);

    HRESULT (STDMETHODCALLTYPE *get_InterfaceNumber)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_Descriptors)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterface methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_BulkInPipes(This,value) (This)->lpVtbl->get_BulkInPipes(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterruptInPipes(This,value) (This)->lpVtbl->get_InterruptInPipes(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_BulkOutPipes(This,value) (This)->lpVtbl->get_BulkOutPipes(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterruptOutPipes(This,value) (This)->lpVtbl->get_InterruptOutPipes(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterfaceSettings(This,value) (This)->lpVtbl->get_InterfaceSettings(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterfaceNumber(This,value) (This)->lpVtbl->get_InterfaceNumber(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_Descriptors(This,value) (This)->lpVtbl->get_Descriptors(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterface methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_BulkInPipes(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe **value) {
    return This->lpVtbl->get_BulkInPipes(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterruptInPipes(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe **value) {
    return This->lpVtbl->get_InterruptInPipes(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_BulkOutPipes(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe **value) {
    return This->lpVtbl->get_BulkOutPipes(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterruptOutPipes(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe **value) {
    return This->lpVtbl->get_InterruptOutPipes(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterfaceSettings(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting **value) {
    return This->lpVtbl->get_InterfaceSettings(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterfaceNumber(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,BYTE *value) {
    return This->lpVtbl->get_InterfaceNumber(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_Descriptors(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor **value) {
    return This->lpVtbl->get_Descriptors(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterface IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterface
#define IUsbInterfaceVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceVtbl
#define IUsbInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface
#define IUsbInterface_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_QueryInterface
#define IUsbInterface_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_AddRef
#define IUsbInterface_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_Release
#define IUsbInterface_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetIids
#define IUsbInterface_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetRuntimeClassName
#define IUsbInterface_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_GetTrustLevel
#define IUsbInterface_get_BulkInPipes __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_BulkInPipes
#define IUsbInterface_get_InterruptInPipes __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterruptInPipes
#define IUsbInterface_get_BulkOutPipes __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_BulkOutPipes
#define IUsbInterface_get_InterruptOutPipes __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterruptOutPipes
#define IUsbInterface_get_InterfaceSettings __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterfaceSettings
#define IUsbInterface_get_InterfaceNumber __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_InterfaceNumber
#define IUsbInterface_get_Descriptors __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_get_Descriptors
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterface_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterfaceDescriptor interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor, 0x199670c7, 0xb7ee, 0x4f90, 0x8c,0xd5, 0x94,0xa2,0xe2,0x57,0x59,0x8a);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("199670c7-b7ee-4f90-8cd5-94a2e257598a")
                IUsbInterfaceDescriptor : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_ClassCode(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_SubclassCode(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_ProtocolCode(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_AlternateSettingNumber(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InterfaceNumber(
                        BYTE *value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor, 0x199670c7, 0xb7ee, 0x4f90, 0x8c,0xd5, 0x94,0xa2,0xe2,0x57,0x59,0x8a)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        TrustLevel *trustLevel);

    /*** IUsbInterfaceDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ClassCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_SubclassCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_ProtocolCode)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_AlternateSettingNumber)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_InterfaceNumber)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor *This,
        BYTE *value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterfaceDescriptor methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_ClassCode(This,value) (This)->lpVtbl->get_ClassCode(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_SubclassCode(This,value) (This)->lpVtbl->get_SubclassCode(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_ProtocolCode(This,value) (This)->lpVtbl->get_ProtocolCode(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_AlternateSettingNumber(This,value) (This)->lpVtbl->get_AlternateSettingNumber(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_InterfaceNumber(This,value) (This)->lpVtbl->get_InterfaceNumber(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterfaceDescriptor methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_ClassCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_ClassCode(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_SubclassCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_SubclassCode(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_ProtocolCode(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_ProtocolCode(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_AlternateSettingNumber(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_AlternateSettingNumber(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_InterfaceNumber(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_InterfaceNumber(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterfaceDescriptor IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor
#define IUsbInterfaceDescriptorVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorVtbl
#define IUsbInterfaceDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor
#define IUsbInterfaceDescriptor_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_QueryInterface
#define IUsbInterfaceDescriptor_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_AddRef
#define IUsbInterfaceDescriptor_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_Release
#define IUsbInterfaceDescriptor_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetIids
#define IUsbInterfaceDescriptor_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetRuntimeClassName
#define IUsbInterfaceDescriptor_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_GetTrustLevel
#define IUsbInterfaceDescriptor_get_ClassCode __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_ClassCode
#define IUsbInterfaceDescriptor_get_SubclassCode __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_SubclassCode
#define IUsbInterfaceDescriptor_get_ProtocolCode __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_ProtocolCode
#define IUsbInterfaceDescriptor_get_AlternateSettingNumber __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_AlternateSettingNumber
#define IUsbInterfaceDescriptor_get_InterfaceNumber __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_get_InterfaceNumber
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterfaceDescriptorStatics interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics, 0xe34a9ff5, 0x77d6, 0x48b6, 0xb0,0xbe, 0x16,0xc6,0x42,0x23,0x16,0xfe);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("e34a9ff5-77d6-48b6-b0be-16c6422316fe")
                IUsbInterfaceDescriptorStatics : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE TryParse(
                        ABI::Windows::Devices::Usb::IUsbDescriptor *descriptor,
                        ABI::Windows::Devices::Usb::IUsbInterfaceDescriptor **parsed,
                        boolean *success) = 0;

                    virtual HRESULT STDMETHODCALLTYPE Parse(
                        ABI::Windows::Devices::Usb::IUsbDescriptor *descriptor,
                        ABI::Windows::Devices::Usb::IUsbInterfaceDescriptor **parsed) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics, 0xe34a9ff5, 0x77d6, 0x48b6, 0xb0,0xbe, 0x16,0xc6,0x42,0x23,0x16,0xfe)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStaticsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics *This,
        TrustLevel *trustLevel);

    /*** IUsbInterfaceDescriptorStatics methods ***/
    HRESULT (STDMETHODCALLTYPE *TryParse)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *descriptor,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor **parsed,
        boolean *success);

    HRESULT (STDMETHODCALLTYPE *Parse)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *descriptor,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor **parsed);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStaticsVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStaticsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterfaceDescriptorStatics methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_TryParse(This,descriptor,parsed,success) (This)->lpVtbl->TryParse(This,descriptor,parsed,success)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_Parse(This,descriptor,parsed) (This)->lpVtbl->Parse(This,descriptor,parsed)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterfaceDescriptorStatics methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_TryParse(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *descriptor,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor **parsed,boolean *success) {
    return This->lpVtbl->TryParse(This,descriptor,parsed,success);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_Parse(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *descriptor,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor **parsed) {
    return This->lpVtbl->Parse(This,descriptor,parsed);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterfaceDescriptorStatics IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics
#define IUsbInterfaceDescriptorStaticsVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStaticsVtbl
#define IUsbInterfaceDescriptorStatics __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics
#define IUsbInterfaceDescriptorStatics_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_QueryInterface
#define IUsbInterfaceDescriptorStatics_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_AddRef
#define IUsbInterfaceDescriptorStatics_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_Release
#define IUsbInterfaceDescriptorStatics_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetIids
#define IUsbInterfaceDescriptorStatics_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetRuntimeClassName
#define IUsbInterfaceDescriptorStatics_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_GetTrustLevel
#define IUsbInterfaceDescriptorStatics_TryParse __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_TryParse
#define IUsbInterfaceDescriptorStatics_Parse __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_Parse
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptorStatics_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterfaceSetting interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting, 0x1827bba7, 0x8da7, 0x4af7, 0x8f,0x4c, 0x7f,0x30,0x32,0xe7,0x81,0xf5);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("1827bba7-8da7-4af7-8f4c-7f3032e781f5")
                IUsbInterfaceSetting : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_BulkInEndpoints(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InterruptInEndpoints(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_BulkOutEndpoints(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InterruptOutEndpoints(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor* > **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Selected(
                        boolean *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE SelectSettingAsync(
                        ABI::Windows::Foundation::IAsyncAction **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_InterfaceDescriptor(
                        ABI::Windows::Devices::Usb::IUsbInterfaceDescriptor **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Descriptors(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* > **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting, 0x1827bba7, 0x8da7, 0x4af7, 0x8f,0x4c, 0x7f,0x30,0x32,0xe7,0x81,0xf5)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSettingVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        TrustLevel *trustLevel);

    /*** IUsbInterfaceSetting methods ***/
    HRESULT (STDMETHODCALLTYPE *get_BulkInEndpoints)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_InterruptInEndpoints)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_BulkOutEndpoints)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_InterruptOutEndpoints)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Selected)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        boolean *value);

    HRESULT (STDMETHODCALLTYPE *SelectSettingAsync)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        __x_ABI_CWindows_CFoundation_CIAsyncAction **operation);

    HRESULT (STDMETHODCALLTYPE *get_InterfaceDescriptor)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Descriptors)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *This,
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSettingVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSettingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterfaceSetting methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_BulkInEndpoints(This,value) (This)->lpVtbl->get_BulkInEndpoints(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterruptInEndpoints(This,value) (This)->lpVtbl->get_InterruptInEndpoints(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_BulkOutEndpoints(This,value) (This)->lpVtbl->get_BulkOutEndpoints(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterruptOutEndpoints(This,value) (This)->lpVtbl->get_InterruptOutEndpoints(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_Selected(This,value) (This)->lpVtbl->get_Selected(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_SelectSettingAsync(This,operation) (This)->lpVtbl->SelectSettingAsync(This,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterfaceDescriptor(This,value) (This)->lpVtbl->get_InterfaceDescriptor(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_Descriptors(This,value) (This)->lpVtbl->get_Descriptors(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterfaceSetting methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_BulkInEndpoints(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor **value) {
    return This->lpVtbl->get_BulkInEndpoints(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterruptInEndpoints(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor **value) {
    return This->lpVtbl->get_InterruptInEndpoints(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_BulkOutEndpoints(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor **value) {
    return This->lpVtbl->get_BulkOutEndpoints(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterruptOutEndpoints(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor **value) {
    return This->lpVtbl->get_InterruptOutEndpoints(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_Selected(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,boolean *value) {
    return This->lpVtbl->get_Selected(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_SelectSettingAsync(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,__x_ABI_CWindows_CFoundation_CIAsyncAction **operation) {
    return This->lpVtbl->SelectSettingAsync(This,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterfaceDescriptor(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceDescriptor **value) {
    return This->lpVtbl->get_InterfaceDescriptor(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_Descriptors(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting* This,__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor **value) {
    return This->lpVtbl->get_Descriptors(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterfaceSetting IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting
#define IUsbInterfaceSettingVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSettingVtbl
#define IUsbInterfaceSetting __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting
#define IUsbInterfaceSetting_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_QueryInterface
#define IUsbInterfaceSetting_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_AddRef
#define IUsbInterfaceSetting_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_Release
#define IUsbInterfaceSetting_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetIids
#define IUsbInterfaceSetting_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetRuntimeClassName
#define IUsbInterfaceSetting_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_GetTrustLevel
#define IUsbInterfaceSetting_get_BulkInEndpoints __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_BulkInEndpoints
#define IUsbInterfaceSetting_get_InterruptInEndpoints __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterruptInEndpoints
#define IUsbInterfaceSetting_get_BulkOutEndpoints __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_BulkOutEndpoints
#define IUsbInterfaceSetting_get_InterruptOutEndpoints __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterruptOutEndpoints
#define IUsbInterfaceSetting_get_Selected __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_Selected
#define IUsbInterfaceSetting_SelectSettingAsync __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_SelectSettingAsync
#define IUsbInterfaceSetting_get_InterfaceDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_InterfaceDescriptor
#define IUsbInterfaceSetting_get_Descriptors __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_get_Descriptors
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterruptInEndpointDescriptor interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor, 0xc0528967, 0xc911, 0x4c3a, 0x86,0xb2, 0x41,0x9c,0x2d,0xa8,0x90,0x39);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("c0528967-c911-4c3a-86b2-419c2da89039")
                IUsbInterruptInEndpointDescriptor : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_MaxPacketSize(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_EndpointNumber(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Interval(
                        ABI::Windows::Foundation::TimeSpan *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Pipe(
                        ABI::Windows::Devices::Usb::IUsbInterruptInPipe **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor, 0xc0528967, 0xc911, 0x4c3a, 0x86,0xb2, 0x41,0x9c,0x2d,0xa8,0x90,0x39)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This,
        TrustLevel *trustLevel);

    /*** IUsbInterruptInEndpointDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *get_MaxPacketSize)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_EndpointNumber)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_Interval)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This,
        __x_ABI_CWindows_CFoundation_CTimeSpan *value);

    HRESULT (STDMETHODCALLTYPE *get_Pipe)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptorVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterruptInEndpointDescriptor methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_MaxPacketSize(This,value) (This)->lpVtbl->get_MaxPacketSize(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_EndpointNumber(This,value) (This)->lpVtbl->get_EndpointNumber(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_Interval(This,value) (This)->lpVtbl->get_Interval(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_Pipe(This,value) (This)->lpVtbl->get_Pipe(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterruptInEndpointDescriptor methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_MaxPacketSize(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_MaxPacketSize(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_EndpointNumber(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_EndpointNumber(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_Interval(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
    return This->lpVtbl->get_Interval(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_Pipe(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe **value) {
    return This->lpVtbl->get_Pipe(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterruptInEndpointDescriptor IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor
#define IUsbInterruptInEndpointDescriptorVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptorVtbl
#define IUsbInterruptInEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor
#define IUsbInterruptInEndpointDescriptor_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_QueryInterface
#define IUsbInterruptInEndpointDescriptor_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_AddRef
#define IUsbInterruptInEndpointDescriptor_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_Release
#define IUsbInterruptInEndpointDescriptor_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetIids
#define IUsbInterruptInEndpointDescriptor_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetRuntimeClassName
#define IUsbInterruptInEndpointDescriptor_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_GetTrustLevel
#define IUsbInterruptInEndpointDescriptor_get_MaxPacketSize __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_MaxPacketSize
#define IUsbInterruptInEndpointDescriptor_get_EndpointNumber __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_EndpointNumber
#define IUsbInterruptInEndpointDescriptor_get_Interval __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_Interval
#define IUsbInterruptInEndpointDescriptor_get_Pipe __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_get_Pipe
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterruptInEventArgs interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs, 0xb7b04092, 0x1418, 0x4936, 0x82,0x09, 0x29,0x9c,0xf5,0x60,0x55,0x83);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("b7b04092-1418-4936-8209-299cf5605583")
                IUsbInterruptInEventArgs : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_InterruptData(
                        ABI::Windows::Storage::Streams::IBuffer **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs, 0xb7b04092, 0x1418, 0x4936, 0x82,0x09, 0x29,0x9c,0xf5,0x60,0x55,0x83)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *This,
        TrustLevel *trustLevel);

    /*** IUsbInterruptInEventArgs methods ***/
    HRESULT (STDMETHODCALLTYPE *get_InterruptData)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *This,
        __x_ABI_CWindows_CStorage_CStreams_CIBuffer **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgsVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterruptInEventArgs methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_get_InterruptData(This,value) (This)->lpVtbl->get_InterruptData(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterruptInEventArgs methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_get_InterruptData(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs* This,__x_ABI_CWindows_CStorage_CStreams_CIBuffer **value) {
    return This->lpVtbl->get_InterruptData(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterruptInEventArgs IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs
#define IUsbInterruptInEventArgsVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgsVtbl
#define IUsbInterruptInEventArgs __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs
#define IUsbInterruptInEventArgs_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_QueryInterface
#define IUsbInterruptInEventArgs_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_AddRef
#define IUsbInterruptInEventArgs_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_Release
#define IUsbInterruptInEventArgs_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetIids
#define IUsbInterruptInEventArgs_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetRuntimeClassName
#define IUsbInterruptInEventArgs_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_GetTrustLevel
#define IUsbInterruptInEventArgs_get_InterruptData __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_get_InterruptData
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterruptInPipe interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe, 0xfa007116, 0x84d7, 0x48c7, 0x8a,0x3f, 0x4c,0x0b,0x23,0x5f,0x2e,0xa6);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("fa007116-84d7-48c7-8a3f-4c0b235f2ea6")
                IUsbInterruptInPipe : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_EndpointDescriptor(
                        ABI::Windows::Devices::Usb::IUsbInterruptInEndpointDescriptor **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE ClearStallAsync(
                        ABI::Windows::Foundation::IAsyncAction **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE add_DataReceived(
                        ABI::Windows::Foundation::ITypedEventHandler<ABI::Windows::Devices::Usb::UsbInterruptInPipe*,ABI::Windows::Devices::Usb::UsbInterruptInEventArgs* > *handler,
                        EventRegistrationToken *token) = 0;

                    virtual HRESULT STDMETHODCALLTYPE remove_DataReceived(
                        EventRegistrationToken token) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe, 0xfa007116, 0x84d7, 0x48c7, 0x8a,0x3f, 0x4c,0x0b,0x23,0x5f,0x2e,0xa6)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This,
        TrustLevel *trustLevel);

    /*** IUsbInterruptInPipe methods ***/
    HRESULT (STDMETHODCALLTYPE *get_EndpointDescriptor)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *ClearStallAsync)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This,
        __x_ABI_CWindows_CFoundation_CIAsyncAction **operation);

    HRESULT (STDMETHODCALLTYPE *add_DataReceived)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This,
        __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs *handler,
        EventRegistrationToken *token);

    HRESULT (STDMETHODCALLTYPE *remove_DataReceived)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *This,
        EventRegistrationToken token);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipeVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterruptInPipe methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_get_EndpointDescriptor(This,value) (This)->lpVtbl->get_EndpointDescriptor(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_ClearStallAsync(This,operation) (This)->lpVtbl->ClearStallAsync(This,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_add_DataReceived(This,handler,token) (This)->lpVtbl->add_DataReceived(This,handler,token)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_remove_DataReceived(This,token) (This)->lpVtbl->remove_DataReceived(This,token)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterruptInPipe methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_get_EndpointDescriptor(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor **value) {
    return This->lpVtbl->get_EndpointDescriptor(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_ClearStallAsync(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This,__x_ABI_CWindows_CFoundation_CIAsyncAction **operation) {
    return This->lpVtbl->ClearStallAsync(This,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_add_DataReceived(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This,__FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs *handler,EventRegistrationToken *token) {
    return This->lpVtbl->add_DataReceived(This,handler,token);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_remove_DataReceived(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe* This,EventRegistrationToken token) {
    return This->lpVtbl->remove_DataReceived(This,token);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterruptInPipe IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe
#define IUsbInterruptInPipeVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipeVtbl
#define IUsbInterruptInPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe
#define IUsbInterruptInPipe_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_QueryInterface
#define IUsbInterruptInPipe_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_AddRef
#define IUsbInterruptInPipe_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_Release
#define IUsbInterruptInPipe_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetIids
#define IUsbInterruptInPipe_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetRuntimeClassName
#define IUsbInterruptInPipe_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_GetTrustLevel
#define IUsbInterruptInPipe_get_EndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_get_EndpointDescriptor
#define IUsbInterruptInPipe_ClearStallAsync __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_ClearStallAsync
#define IUsbInterruptInPipe_add_DataReceived __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_add_DataReceived
#define IUsbInterruptInPipe_remove_DataReceived __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_remove_DataReceived
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterruptOutEndpointDescriptor interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor, 0xcc9fed81, 0x10ca, 0x4533, 0x95,0x2d, 0x9e,0x27,0x83,0x41,0xe8,0x0f);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("cc9fed81-10ca-4533-952d-9e278341e80f")
                IUsbInterruptOutEndpointDescriptor : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_MaxPacketSize(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_EndpointNumber(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Interval(
                        ABI::Windows::Foundation::TimeSpan *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Pipe(
                        ABI::Windows::Devices::Usb::IUsbInterruptOutPipe **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor, 0xcc9fed81, 0x10ca, 0x4533, 0x95,0x2d, 0x9e,0x27,0x83,0x41,0xe8,0x0f)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This,
        TrustLevel *trustLevel);

    /*** IUsbInterruptOutEndpointDescriptor methods ***/
    HRESULT (STDMETHODCALLTYPE *get_MaxPacketSize)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *get_EndpointNumber)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *get_Interval)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This,
        __x_ABI_CWindows_CFoundation_CTimeSpan *value);

    HRESULT (STDMETHODCALLTYPE *get_Pipe)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptorVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterruptOutEndpointDescriptor methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_MaxPacketSize(This,value) (This)->lpVtbl->get_MaxPacketSize(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_EndpointNumber(This,value) (This)->lpVtbl->get_EndpointNumber(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_Interval(This,value) (This)->lpVtbl->get_Interval(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_Pipe(This,value) (This)->lpVtbl->get_Pipe(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterruptOutEndpointDescriptor methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_MaxPacketSize(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_MaxPacketSize(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_EndpointNumber(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This,BYTE *value) {
    return This->lpVtbl->get_EndpointNumber(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_Interval(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
    return This->lpVtbl->get_Interval(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_Pipe(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe **value) {
    return This->lpVtbl->get_Pipe(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterruptOutEndpointDescriptor IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor
#define IUsbInterruptOutEndpointDescriptorVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptorVtbl
#define IUsbInterruptOutEndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor
#define IUsbInterruptOutEndpointDescriptor_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_QueryInterface
#define IUsbInterruptOutEndpointDescriptor_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_AddRef
#define IUsbInterruptOutEndpointDescriptor_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_Release
#define IUsbInterruptOutEndpointDescriptor_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetIids
#define IUsbInterruptOutEndpointDescriptor_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetRuntimeClassName
#define IUsbInterruptOutEndpointDescriptor_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_GetTrustLevel
#define IUsbInterruptOutEndpointDescriptor_get_MaxPacketSize __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_MaxPacketSize
#define IUsbInterruptOutEndpointDescriptor_get_EndpointNumber __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_EndpointNumber
#define IUsbInterruptOutEndpointDescriptor_get_Interval __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_Interval
#define IUsbInterruptOutEndpointDescriptor_get_Pipe __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_get_Pipe
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbInterruptOutPipe interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe, 0xe984c8a9, 0xaaf9, 0x49d0, 0xb9,0x6c, 0xf6,0x61,0xab,0x4a,0x7f,0x95);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("e984c8a9-aaf9-49d0-b96c-f661ab4a7f95")
                IUsbInterruptOutPipe : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_EndpointDescriptor(
                        ABI::Windows::Devices::Usb::IUsbInterruptOutEndpointDescriptor **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE ClearStallAsync(
                        ABI::Windows::Foundation::IAsyncAction **operation) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_WriteOptions(
                        ABI::Windows::Devices::Usb::UsbWriteOptions value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_WriteOptions(
                        ABI::Windows::Devices::Usb::UsbWriteOptions *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_OutputStream(
                        ABI::Windows::Storage::Streams::IOutputStream **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe, 0xe984c8a9, 0xaaf9, 0x49d0, 0xb9,0x6c, 0xf6,0x61,0xab,0x4a,0x7f,0x95)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        TrustLevel *trustLevel);

    /*** IUsbInterruptOutPipe methods ***/
    HRESULT (STDMETHODCALLTYPE *get_EndpointDescriptor)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *ClearStallAsync)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        __x_ABI_CWindows_CFoundation_CIAsyncAction **operation);

    HRESULT (STDMETHODCALLTYPE *put_WriteOptions)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions value);

    HRESULT (STDMETHODCALLTYPE *get_WriteOptions)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions *value);

    HRESULT (STDMETHODCALLTYPE *get_OutputStream)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *This,
        __x_ABI_CWindows_CStorage_CStreams_CIOutputStream **value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipeVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbInterruptOutPipe methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_EndpointDescriptor(This,value) (This)->lpVtbl->get_EndpointDescriptor(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_ClearStallAsync(This,operation) (This)->lpVtbl->ClearStallAsync(This,operation)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_put_WriteOptions(This,value) (This)->lpVtbl->put_WriteOptions(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_WriteOptions(This,value) (This)->lpVtbl->get_WriteOptions(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_OutputStream(This,value) (This)->lpVtbl->get_OutputStream(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbInterruptOutPipe methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_EndpointDescriptor(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor **value) {
    return This->lpVtbl->get_EndpointDescriptor(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_ClearStallAsync(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,__x_ABI_CWindows_CFoundation_CIAsyncAction **operation) {
    return This->lpVtbl->ClearStallAsync(This,operation);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_put_WriteOptions(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,__x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions value) {
    return This->lpVtbl->put_WriteOptions(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_WriteOptions(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,__x_ABI_CWindows_CDevices_CUsb_CUsbWriteOptions *value) {
    return This->lpVtbl->get_WriteOptions(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_OutputStream(__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe* This,__x_ABI_CWindows_CStorage_CStreams_CIOutputStream **value) {
    return This->lpVtbl->get_OutputStream(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbInterruptOutPipe IID___x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe
#define IUsbInterruptOutPipeVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipeVtbl
#define IUsbInterruptOutPipe __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe
#define IUsbInterruptOutPipe_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_QueryInterface
#define IUsbInterruptOutPipe_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_AddRef
#define IUsbInterruptOutPipe_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_Release
#define IUsbInterruptOutPipe_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetIids
#define IUsbInterruptOutPipe_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetRuntimeClassName
#define IUsbInterruptOutPipe_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_GetTrustLevel
#define IUsbInterruptOutPipe_get_EndpointDescriptor __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_EndpointDescriptor
#define IUsbInterruptOutPipe_ClearStallAsync __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_ClearStallAsync
#define IUsbInterruptOutPipe_put_WriteOptions __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_put_WriteOptions
#define IUsbInterruptOutPipe_get_WriteOptions __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_WriteOptions
#define IUsbInterruptOutPipe_get_OutputStream __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_get_OutputStream
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IUsbSetupPacket interface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket, 0x104ba132, 0xc78f, 0x4c51, 0xb6,0x54, 0xe4,0x9d,0x02,0xf2,0xcb,0x03);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Devices {
            namespace Usb {
                MIDL_INTERFACE("104ba132-c78f-4c51-b654-e49d02f2cb03")
                IUsbSetupPacket : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_RequestType(
                        ABI::Windows::Devices::Usb::IUsbControlRequestType **value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_RequestType(
                        ABI::Windows::Devices::Usb::IUsbControlRequestType *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Request(
                        BYTE *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_Request(
                        BYTE value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Value(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_Value(
                        UINT32 value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Index(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_Index(
                        UINT32 value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_Length(
                        UINT32 *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE put_Length(
                        UINT32 value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket, 0x104ba132, 0xc78f, 0x4c51, 0xb6,0x54, 0xe4,0x9d,0x02,0xf2,0xcb,0x03)
#endif
#else
typedef struct __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        TrustLevel *trustLevel);

    /*** IUsbSetupPacket methods ***/
    HRESULT (STDMETHODCALLTYPE *get_RequestType)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType **value);

    HRESULT (STDMETHODCALLTYPE *put_RequestType)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *value);

    HRESULT (STDMETHODCALLTYPE *get_Request)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        BYTE *value);

    HRESULT (STDMETHODCALLTYPE *put_Request)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        BYTE value);

    HRESULT (STDMETHODCALLTYPE *get_Value)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *put_Value)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        UINT32 value);

    HRESULT (STDMETHODCALLTYPE *get_Index)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *put_Index)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        UINT32 value);

    HRESULT (STDMETHODCALLTYPE *get_Length)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *put_Length)(
        __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket *This,
        UINT32 value);

    END_INTERFACE
} __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketVtbl;

interface __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket {
    CONST_VTBL __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IUsbSetupPacket methods ***/
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_RequestType(This,value) (This)->lpVtbl->get_RequestType(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_RequestType(This,value) (This)->lpVtbl->put_RequestType(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Request(This,value) (This)->lpVtbl->get_Request(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Request(This,value) (This)->lpVtbl->put_Request(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Value(This,value) (This)->lpVtbl->put_Value(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Index(This,value) (This)->lpVtbl->get_Index(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Index(This,value) (This)->lpVtbl->put_Index(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Length(This,value) (This)->lpVtbl->get_Length(This,value)
#define __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Length(This,value) (This)->lpVtbl->put_Length(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_QueryInterface(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetIids(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetRuntimeClassName(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetTrustLevel(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IUsbSetupPacket methods ***/
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_RequestType(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType **value) {
    return This->lpVtbl->get_RequestType(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_RequestType(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbControlRequestType *value) {
    return This->lpVtbl->put_RequestType(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Request(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,BYTE *value) {
    return This->lpVtbl->get_Request(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Request(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,BYTE value) {
    return This->lpVtbl->put_Request(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Value(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,UINT32 *value) {
    return This->lpVtbl->get_Value(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Value(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,UINT32 value) {
    return This->lpVtbl->put_Value(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Index(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,UINT32 *value) {
    return This->lpVtbl->get_Index(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Index(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,UINT32 value) {
    return This->lpVtbl->put_Index(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Length(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,UINT32 *value) {
    return This->lpVtbl->get_Length(This,value);
}
static inline HRESULT __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Length(__x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket* This,UINT32 value) {
    return This->lpVtbl->put_Length(This,value);
}
#endif
#ifdef WIDL_using_Windows_Devices_Usb
#define IID_IUsbSetupPacket IID___x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket
#define IUsbSetupPacketVtbl __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacketVtbl
#define IUsbSetupPacket __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket
#define IUsbSetupPacket_QueryInterface __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_QueryInterface
#define IUsbSetupPacket_AddRef __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_AddRef
#define IUsbSetupPacket_Release __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_Release
#define IUsbSetupPacket_GetIids __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetIids
#define IUsbSetupPacket_GetRuntimeClassName __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetRuntimeClassName
#define IUsbSetupPacket_GetTrustLevel __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_GetTrustLevel
#define IUsbSetupPacket_get_RequestType __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_RequestType
#define IUsbSetupPacket_put_RequestType __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_RequestType
#define IUsbSetupPacket_get_Request __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Request
#define IUsbSetupPacket_put_Request __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Request
#define IUsbSetupPacket_get_Value __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Value
#define IUsbSetupPacket_put_Value __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Value
#define IUsbSetupPacket_get_Index __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Index
#define IUsbSetupPacket_put_Index __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Index
#define IUsbSetupPacket_get_Length __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_get_Length
#define IUsbSetupPacket_put_Length __x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_put_Length
#endif /* WIDL_using_Windows_Devices_Usb */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CDevices_CUsb_CIUsbSetupPacket_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbBulkInEndpointDescriptor
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbBulkInEndpointDescriptor_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbBulkInEndpointDescriptor_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkInEndpointDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','B','u','l','k','I','n','E','n','d','p','o','i','n','t','D','e','s','c','r','i','p','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkInEndpointDescriptor[] = L"Windows.Devices.Usb.UsbBulkInEndpointDescriptor";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkInEndpointDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','B','u','l','k','I','n','E','n','d','p','o','i','n','t','D','e','s','c','r','i','p','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbBulkInEndpointDescriptor_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbBulkInPipe
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbBulkInPipe_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbBulkInPipe_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkInPipe[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','B','u','l','k','I','n','P','i','p','e',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkInPipe[] = L"Windows.Devices.Usb.UsbBulkInPipe";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkInPipe[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','B','u','l','k','I','n','P','i','p','e',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbBulkInPipe_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbBulkOutEndpointDescriptor
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbBulkOutEndpointDescriptor_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbBulkOutEndpointDescriptor_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkOutEndpointDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','B','u','l','k','O','u','t','E','n','d','p','o','i','n','t','D','e','s','c','r','i','p','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkOutEndpointDescriptor[] = L"Windows.Devices.Usb.UsbBulkOutEndpointDescriptor";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkOutEndpointDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','B','u','l','k','O','u','t','E','n','d','p','o','i','n','t','D','e','s','c','r','i','p','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbBulkOutEndpointDescriptor_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbBulkOutPipe
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbBulkOutPipe_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbBulkOutPipe_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkOutPipe[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','B','u','l','k','O','u','t','P','i','p','e',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkOutPipe[] = L"Windows.Devices.Usb.UsbBulkOutPipe";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbBulkOutPipe[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','B','u','l','k','O','u','t','P','i','p','e',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbBulkOutPipe_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbConfiguration
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbConfiguration_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbConfiguration_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbConfiguration[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','C','o','n','f','i','g','u','r','a','t','i','o','n',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbConfiguration[] = L"Windows.Devices.Usb.UsbConfiguration";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbConfiguration[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','C','o','n','f','i','g','u','r','a','t','i','o','n',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbConfiguration_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbConfigurationDescriptor
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbConfigurationDescriptor_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbConfigurationDescriptor_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbConfigurationDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','C','o','n','f','i','g','u','r','a','t','i','o','n','D','e','s','c','r','i','p','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbConfigurationDescriptor[] = L"Windows.Devices.Usb.UsbConfigurationDescriptor";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbConfigurationDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','C','o','n','f','i','g','u','r','a','t','i','o','n','D','e','s','c','r','i','p','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbConfigurationDescriptor_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbControlRequestType
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbControlRequestType_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbControlRequestType_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbControlRequestType[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','C','o','n','t','r','o','l','R','e','q','u','e','s','t','T','y','p','e',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbControlRequestType[] = L"Windows.Devices.Usb.UsbControlRequestType";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbControlRequestType[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','C','o','n','t','r','o','l','R','e','q','u','e','s','t','T','y','p','e',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbControlRequestType_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbDescriptor
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbDescriptor_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbDescriptor_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','D','e','s','c','r','i','p','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbDescriptor[] = L"Windows.Devices.Usb.UsbDescriptor";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','D','e','s','c','r','i','p','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbDescriptor_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbDevice
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbDevice_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbDevice_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbDevice[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','D','e','v','i','c','e',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbDevice[] = L"Windows.Devices.Usb.UsbDevice";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbDevice[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','D','e','v','i','c','e',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbDevice_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbDeviceClass
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbDeviceClass_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbDeviceClass_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbDeviceClass[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','D','e','v','i','c','e','C','l','a','s','s',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbDeviceClass[] = L"Windows.Devices.Usb.UsbDeviceClass";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbDeviceClass[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','D','e','v','i','c','e','C','l','a','s','s',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbDeviceClass_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbDeviceDescriptor
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbDeviceDescriptor_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbDeviceDescriptor_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbDeviceDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','D','e','v','i','c','e','D','e','s','c','r','i','p','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbDeviceDescriptor[] = L"Windows.Devices.Usb.UsbDeviceDescriptor";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbDeviceDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','D','e','v','i','c','e','D','e','s','c','r','i','p','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbDeviceDescriptor_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbInterface
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbInterface_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbInterface_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterface[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','f','a','c','e',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterface[] = L"Windows.Devices.Usb.UsbInterface";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterface[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','f','a','c','e',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbInterface_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbInterfaceDescriptor
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbInterfaceDescriptor_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbInterfaceDescriptor_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterfaceDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','f','a','c','e','D','e','s','c','r','i','p','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterfaceDescriptor[] = L"Windows.Devices.Usb.UsbInterfaceDescriptor";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterfaceDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','f','a','c','e','D','e','s','c','r','i','p','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbInterfaceDescriptor_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbInterfaceSetting
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbInterfaceSetting_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbInterfaceSetting_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterfaceSetting[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','f','a','c','e','S','e','t','t','i','n','g',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterfaceSetting[] = L"Windows.Devices.Usb.UsbInterfaceSetting";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterfaceSetting[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','f','a','c','e','S','e','t','t','i','n','g',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbInterfaceSetting_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbInterruptInEventArgs
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInEventArgs_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInEventArgs_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','I','n','E','v','e','n','t','A','r','g','s',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInEventArgs[] = L"Windows.Devices.Usb.UsbInterruptInEventArgs";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInEventArgs[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','I','n','E','v','e','n','t','A','r','g','s',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInEventArgs_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbInterruptInEndpointDescriptor
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInEndpointDescriptor_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInEndpointDescriptor_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInEndpointDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','I','n','E','n','d','p','o','i','n','t','D','e','s','c','r','i','p','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInEndpointDescriptor[] = L"Windows.Devices.Usb.UsbInterruptInEndpointDescriptor";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInEndpointDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','I','n','E','n','d','p','o','i','n','t','D','e','s','c','r','i','p','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInEndpointDescriptor_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbInterruptInPipe
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInPipe_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInPipe_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInPipe[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','I','n','P','i','p','e',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInPipe[] = L"Windows.Devices.Usb.UsbInterruptInPipe";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptInPipe[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','I','n','P','i','p','e',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptInPipe_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptOutEndpointDescriptor_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptOutEndpointDescriptor_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptOutEndpointDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','O','u','t','E','n','d','p','o','i','n','t','D','e','s','c','r','i','p','t','o','r',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptOutEndpointDescriptor[] = L"Windows.Devices.Usb.UsbInterruptOutEndpointDescriptor";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptOutEndpointDescriptor[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','O','u','t','E','n','d','p','o','i','n','t','D','e','s','c','r','i','p','t','o','r',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptOutEndpointDescriptor_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbInterruptOutPipe
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptOutPipe_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptOutPipe_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptOutPipe[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','O','u','t','P','i','p','e',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptOutPipe[] = L"Windows.Devices.Usb.UsbInterruptOutPipe";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbInterruptOutPipe[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','I','n','t','e','r','r','u','p','t','O','u','t','P','i','p','e',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbInterruptOutPipe_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Devices.Usb.UsbSetupPacket
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Devices_Usb_UsbSetupPacket_DEFINED
#define RUNTIMECLASS_Windows_Devices_Usb_UsbSetupPacket_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Devices_Usb_UsbSetupPacket[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','S','e','t','u','p','P','a','c','k','e','t',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbSetupPacket[] = L"Windows.Devices.Usb.UsbSetupPacket";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Devices_Usb_UsbSetupPacket[] = {'W','i','n','d','o','w','s','.','D','e','v','i','c','e','s','.','U','s','b','.','U','s','b','S','e','t','u','p','P','a','c','k','e','t',0};
#endif
#endif /* RUNTIMECLASS_Windows_Devices_Usb_UsbSetupPacket_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IAsyncOperationCompletedHandler<ABI::Windows::Devices::Usb::UsbDevice* > interface
 */
#ifndef ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_INTERFACE_DEFINED__
#define ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice, 0x7331254f, 0x6caf, 0x587d, 0x9c,0x2a, 0x01,0x8c,0x66,0xd3,0x12,0xdb);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("7331254f-6caf-587d-9c2a-018c66d312db")
            IAsyncOperationCompletedHandler<ABI::Windows::Devices::Usb::UsbDevice* > : IAsyncOperationCompletedHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbDevice*, ABI::Windows::Devices::Usb::IUsbDevice* > >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice, 0x7331254f, 0x6caf, 0x587d, 0x9c,0x2a, 0x01,0x8c,0x66,0xd3,0x12,0xdb)
#endif
#else
typedef struct __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDeviceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice *This);

    /*** IAsyncOperationCompletedHandler<ABI::Windows::Devices::Usb::UsbDevice* > methods ***/
    HRESULT (STDMETHODCALLTYPE *Invoke)(
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice *This,
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *info,
        AsyncStatus status);

    END_INTERFACE
} __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDeviceVtbl;

interface __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice {
    CONST_VTBL __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_Release(This) (This)->lpVtbl->Release(This)
/*** IAsyncOperationCompletedHandler<ABI::Windows::Devices::Usb::UsbDevice* > methods ***/
#define __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_Invoke(This,info,status) (This)->lpVtbl->Invoke(This,info,status)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_QueryInterface(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_AddRef(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_Release(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** IAsyncOperationCompletedHandler<ABI::Windows::Devices::Usb::UsbDevice* > methods ***/
static inline HRESULT __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_Invoke(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice* This,__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *info,AsyncStatus status) {
    return This->lpVtbl->Invoke(This,info,status);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_IAsyncOperationCompletedHandler_UsbDevice IID___FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice
#define IAsyncOperationCompletedHandler_UsbDeviceVtbl __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDeviceVtbl
#define IAsyncOperationCompletedHandler_UsbDevice __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice
#define IAsyncOperationCompletedHandler_UsbDevice_QueryInterface __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_QueryInterface
#define IAsyncOperationCompletedHandler_UsbDevice_AddRef __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_AddRef
#define IAsyncOperationCompletedHandler_UsbDevice_Release __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_Release
#define IAsyncOperationCompletedHandler_UsbDevice_Invoke __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_Invoke
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor, 0x9c69ac78, 0x309e, 0x5763, 0xaf,0x26, 0x97,0x06,0xff,0xa4,0x7e,0xc0);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("9c69ac78-309e-5763-af26-9706ffa47ec0")
                IVectorView<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor*, ABI::Windows::Devices::Usb::IUsbBulkInEndpointDescriptor* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor, 0x9c69ac78, 0x309e, 0x5763, 0xaf,0x26, 0x97,0x06,0xff,0xa4,0x7e,0xc0)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptorVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkInEndpointDescriptor* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInEndpointDescriptor **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbBulkInEndpointDescriptor IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor
#define IVectorView_UsbBulkInEndpointDescriptorVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptorVtbl
#define IVectorView_UsbBulkInEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor
#define IVectorView_UsbBulkInEndpointDescriptor_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_QueryInterface
#define IVectorView_UsbBulkInEndpointDescriptor_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_AddRef
#define IVectorView_UsbBulkInEndpointDescriptor_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_Release
#define IVectorView_UsbBulkInEndpointDescriptor_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetIids
#define IVectorView_UsbBulkInEndpointDescriptor_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetRuntimeClassName
#define IVectorView_UsbBulkInEndpointDescriptor_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetTrustLevel
#define IVectorView_UsbBulkInEndpointDescriptor_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetAt
#define IVectorView_UsbBulkInEndpointDescriptor_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_get_Size
#define IVectorView_UsbBulkInEndpointDescriptor_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_IndexOf
#define IVectorView_UsbBulkInEndpointDescriptor_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInEndpointDescriptor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbBulkInPipe* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe, 0xa93c84bc, 0x6484, 0x5959, 0xb6,0x1a, 0x70,0x3c,0xc7,0x11,0x5f,0x6f);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("a93c84bc-6484-5959-b61a-703cc7115f6f")
                IVectorView<ABI::Windows::Devices::Usb::UsbBulkInPipe* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbBulkInPipe*, ABI::Windows::Devices::Usb::IUsbBulkInPipe* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe, 0xa93c84bc, 0x6484, 0x5959, 0xb6,0x1a, 0x70,0x3c,0xc7,0x11,0x5f,0x6f)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkInPipe* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipeVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkInPipe* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkInPipe* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkInPipe **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbBulkInPipe IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe
#define IVectorView_UsbBulkInPipeVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipeVtbl
#define IVectorView_UsbBulkInPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe
#define IVectorView_UsbBulkInPipe_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_QueryInterface
#define IVectorView_UsbBulkInPipe_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_AddRef
#define IVectorView_UsbBulkInPipe_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_Release
#define IVectorView_UsbBulkInPipe_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetIids
#define IVectorView_UsbBulkInPipe_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetRuntimeClassName
#define IVectorView_UsbBulkInPipe_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetTrustLevel
#define IVectorView_UsbBulkInPipe_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetAt
#define IVectorView_UsbBulkInPipe_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_get_Size
#define IVectorView_UsbBulkInPipe_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_IndexOf
#define IVectorView_UsbBulkInPipe_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkInPipe_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor, 0x22a53676, 0xa3ea, 0x5dcd, 0xbb,0x39, 0xb2,0x8a,0x53,0x27,0xc4,0xa3);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("22a53676-a3ea-5dcd-bb39-b28a5327c4a3")
                IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor*, ABI::Windows::Devices::Usb::IUsbBulkOutEndpointDescriptor* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor, 0x22a53676, 0xa3ea, 0x5dcd, 0xbb,0x39, 0xb2,0x8a,0x53,0x27,0xc4,0xa3)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptorVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutEndpointDescriptor* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutEndpointDescriptor **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbBulkOutEndpointDescriptor IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor
#define IVectorView_UsbBulkOutEndpointDescriptorVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptorVtbl
#define IVectorView_UsbBulkOutEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor
#define IVectorView_UsbBulkOutEndpointDescriptor_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_QueryInterface
#define IVectorView_UsbBulkOutEndpointDescriptor_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_AddRef
#define IVectorView_UsbBulkOutEndpointDescriptor_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_Release
#define IVectorView_UsbBulkOutEndpointDescriptor_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetIids
#define IVectorView_UsbBulkOutEndpointDescriptor_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetRuntimeClassName
#define IVectorView_UsbBulkOutEndpointDescriptor_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetTrustLevel
#define IVectorView_UsbBulkOutEndpointDescriptor_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetAt
#define IVectorView_UsbBulkOutEndpointDescriptor_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_get_Size
#define IVectorView_UsbBulkOutEndpointDescriptor_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_IndexOf
#define IVectorView_UsbBulkOutEndpointDescriptor_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutEndpointDescriptor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutPipe* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe, 0x0a873512, 0x15f1, 0x5e8e, 0xa7,0x2a, 0x04,0x5c,0xfd,0x7a,0x5e,0x83);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("0a873512-15f1-5e8e-a72a-045cfd7a5e83")
                IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutPipe* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbBulkOutPipe*, ABI::Windows::Devices::Usb::IUsbBulkOutPipe* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe, 0x0a873512, 0x15f1, 0x5e8e, 0xa7,0x2a, 0x04,0x5c,0xfd,0x7a,0x5e,0x83)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutPipe* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipeVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutPipe* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbBulkOutPipe* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbBulkOutPipe **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbBulkOutPipe IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe
#define IVectorView_UsbBulkOutPipeVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipeVtbl
#define IVectorView_UsbBulkOutPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe
#define IVectorView_UsbBulkOutPipe_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_QueryInterface
#define IVectorView_UsbBulkOutPipe_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_AddRef
#define IVectorView_UsbBulkOutPipe_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_Release
#define IVectorView_UsbBulkOutPipe_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetIids
#define IVectorView_UsbBulkOutPipe_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetRuntimeClassName
#define IVectorView_UsbBulkOutPipe_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetTrustLevel
#define IVectorView_UsbBulkOutPipe_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetAt
#define IVectorView_UsbBulkOutPipe_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_get_Size
#define IVectorView_UsbBulkOutPipe_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_IndexOf
#define IVectorView_UsbBulkOutPipe_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbBulkOutPipe_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor, 0x5408baa2, 0x291e, 0x537a, 0xb6,0x1f, 0x13,0x70,0x62,0xf7,0xff,0x7d);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("5408baa2-291e-537a-b61f-137062f7ff7d")
                IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbDescriptor*, ABI::Windows::Devices::Usb::IUsbDescriptor* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor, 0x5408baa2, 0x291e, 0x537a, 0xb6,0x1f, 0x13,0x70,0x62,0xf7,0xff,0x7d)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptorVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbDescriptor* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbDescriptor **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbDescriptor IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor
#define IVectorView_UsbDescriptorVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptorVtbl
#define IVectorView_UsbDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor
#define IVectorView_UsbDescriptor_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_QueryInterface
#define IVectorView_UsbDescriptor_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_AddRef
#define IVectorView_UsbDescriptor_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_Release
#define IVectorView_UsbDescriptor_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetIids
#define IVectorView_UsbDescriptor_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetRuntimeClassName
#define IVectorView_UsbDescriptor_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetTrustLevel
#define IVectorView_UsbDescriptor_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetAt
#define IVectorView_UsbDescriptor_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_get_Size
#define IVectorView_UsbDescriptor_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_IndexOf
#define IVectorView_UsbDescriptor_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbDescriptor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbInterface* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface, 0x9c69ec7f, 0x2e42, 0x58cd, 0xa7,0x4a, 0xf4,0x97,0x48,0x11,0x13,0x4d);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("9c69ec7f-2e42-58cd-a74a-f4974811134d")
                IVectorView<ABI::Windows::Devices::Usb::UsbInterface* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbInterface*, ABI::Windows::Devices::Usb::IUsbInterface* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface, 0x9c69ec7f, 0x2e42, 0x58cd, 0xa7,0x4a, 0xf4,0x97,0x48,0x11,0x13,0x4d)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbInterface* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterface **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterface* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterface* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterface **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbInterface IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface
#define IVectorView_UsbInterfaceVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceVtbl
#define IVectorView_UsbInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface
#define IVectorView_UsbInterface_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_QueryInterface
#define IVectorView_UsbInterface_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_AddRef
#define IVectorView_UsbInterface_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_Release
#define IVectorView_UsbInterface_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetIids
#define IVectorView_UsbInterface_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetRuntimeClassName
#define IVectorView_UsbInterface_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetTrustLevel
#define IVectorView_UsbInterface_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetAt
#define IVectorView_UsbInterface_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_get_Size
#define IVectorView_UsbInterface_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_IndexOf
#define IVectorView_UsbInterface_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterface_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbInterfaceSetting* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting, 0x71194af7, 0x77c2, 0x54d5, 0xa1,0x16, 0x28,0x7f,0x0b,0x7f,0xd5,0x3f);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("71194af7-77c2-54d5-a116-287f0b7fd53f")
                IVectorView<ABI::Windows::Devices::Usb::UsbInterfaceSetting* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbInterfaceSetting*, ABI::Windows::Devices::Usb::IUsbInterfaceSetting* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting, 0x71194af7, 0x77c2, 0x54d5, 0xa1,0x16, 0x28,0x7f,0x0b,0x7f,0xd5,0x3f)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSettingVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbInterfaceSetting* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSettingVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSettingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterfaceSetting* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterfaceSetting* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterfaceSetting **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbInterfaceSetting IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting
#define IVectorView_UsbInterfaceSettingVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSettingVtbl
#define IVectorView_UsbInterfaceSetting __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting
#define IVectorView_UsbInterfaceSetting_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_QueryInterface
#define IVectorView_UsbInterfaceSetting_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_AddRef
#define IVectorView_UsbInterfaceSetting_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_Release
#define IVectorView_UsbInterfaceSetting_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetIids
#define IVectorView_UsbInterfaceSetting_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetRuntimeClassName
#define IVectorView_UsbInterfaceSetting_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetTrustLevel
#define IVectorView_UsbInterfaceSetting_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetAt
#define IVectorView_UsbInterfaceSetting_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_get_Size
#define IVectorView_UsbInterfaceSetting_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_IndexOf
#define IVectorView_UsbInterfaceSetting_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterfaceSetting_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor, 0x3fc7f890, 0x218e, 0x5057, 0x90,0x4d, 0x63,0x87,0xc5,0x91,0xcc,0x93);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("3fc7f890-218e-5057-904d-6387c591cc93")
                IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor*, ABI::Windows::Devices::Usb::IUsbInterruptInEndpointDescriptor* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor, 0x3fc7f890, 0x218e, 0x5057, 0x90,0x4d, 0x63,0x87,0xc5,0x91,0xcc,0x93)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptorVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInEndpointDescriptor* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEndpointDescriptor **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbInterruptInEndpointDescriptor IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor
#define IVectorView_UsbInterruptInEndpointDescriptorVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptorVtbl
#define IVectorView_UsbInterruptInEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor
#define IVectorView_UsbInterruptInEndpointDescriptor_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_QueryInterface
#define IVectorView_UsbInterruptInEndpointDescriptor_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_AddRef
#define IVectorView_UsbInterruptInEndpointDescriptor_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_Release
#define IVectorView_UsbInterruptInEndpointDescriptor_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetIids
#define IVectorView_UsbInterruptInEndpointDescriptor_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetRuntimeClassName
#define IVectorView_UsbInterruptInEndpointDescriptor_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetTrustLevel
#define IVectorView_UsbInterruptInEndpointDescriptor_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetAt
#define IVectorView_UsbInterruptInEndpointDescriptor_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_get_Size
#define IVectorView_UsbInterruptInEndpointDescriptor_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_IndexOf
#define IVectorView_UsbInterruptInEndpointDescriptor_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInEndpointDescriptor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInPipe* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe, 0x37469574, 0xb4c5, 0x5ba0, 0x96,0x16, 0x89,0x4d,0xd8,0x22,0xff,0x5b);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("37469574-b4c5-5ba0-9616-894dd822ff5b")
                IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInPipe* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbInterruptInPipe*, ABI::Windows::Devices::Usb::IUsbInterruptInPipe* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe, 0x37469574, 0xb4c5, 0x5ba0, 0x96,0x16, 0x89,0x4d,0xd8,0x22,0xff,0x5b)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInPipe* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipeVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInPipe* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptInPipe* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbInterruptInPipe IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe
#define IVectorView_UsbInterruptInPipeVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipeVtbl
#define IVectorView_UsbInterruptInPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe
#define IVectorView_UsbInterruptInPipe_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_QueryInterface
#define IVectorView_UsbInterruptInPipe_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_AddRef
#define IVectorView_UsbInterruptInPipe_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_Release
#define IVectorView_UsbInterruptInPipe_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetIids
#define IVectorView_UsbInterruptInPipe_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetRuntimeClassName
#define IVectorView_UsbInterruptInPipe_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetTrustLevel
#define IVectorView_UsbInterruptInPipe_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetAt
#define IVectorView_UsbInterruptInPipe_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_get_Size
#define IVectorView_UsbInterruptInPipe_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_IndexOf
#define IVectorView_UsbInterruptInPipe_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptInPipe_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor, 0x984e7e15, 0xc5ac, 0x5140, 0xa3,0xc0, 0xb5,0x83,0x19,0x00,0x85,0xd7);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("984e7e15-c5ac-5140-a3c0-b583190085d7")
                IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor*, ABI::Windows::Devices::Usb::IUsbInterruptOutEndpointDescriptor* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor, 0x984e7e15, 0xc5ac, 0x5140, 0xa3,0xc0, 0xb5,0x83,0x19,0x00,0x85,0xd7)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptorVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutEndpointDescriptor* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutEndpointDescriptor **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbInterruptOutEndpointDescriptor IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor
#define IVectorView_UsbInterruptOutEndpointDescriptorVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptorVtbl
#define IVectorView_UsbInterruptOutEndpointDescriptor __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor
#define IVectorView_UsbInterruptOutEndpointDescriptor_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_QueryInterface
#define IVectorView_UsbInterruptOutEndpointDescriptor_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_AddRef
#define IVectorView_UsbInterruptOutEndpointDescriptor_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_Release
#define IVectorView_UsbInterruptOutEndpointDescriptor_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetIids
#define IVectorView_UsbInterruptOutEndpointDescriptor_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetRuntimeClassName
#define IVectorView_UsbInterruptOutEndpointDescriptor_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetTrustLevel
#define IVectorView_UsbInterruptOutEndpointDescriptor_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetAt
#define IVectorView_UsbInterruptOutEndpointDescriptor_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_get_Size
#define IVectorView_UsbInterruptOutEndpointDescriptor_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_IndexOf
#define IVectorView_UsbInterruptOutEndpointDescriptor_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutEndpointDescriptor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutPipe* > interface
 */
#ifndef ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_INTERFACE_DEFINED__
#define ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe, 0x748196c8, 0x83bf, 0x5ec3, 0x8d,0x28, 0xa3,0x11,0x2b,0x3e,0xe3,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("748196c8-83bf-5ec3-8d28-a3112b3ee3cc")
                IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutPipe* > : IVectorView_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbInterruptOutPipe*, ABI::Windows::Devices::Usb::IUsbInterruptOutPipe* > >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe, 0x748196c8, 0x83bf, 0x5ec3, 0x8d,0x28, 0xa3,0x11,0x2b,0x3e,0xe3,0xcc)
#endif
#else
typedef struct __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This,
        TrustLevel *trustLevel);

    /*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutPipe* > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This,
        UINT32 index,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe **value);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This,
        UINT32 *value);

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe **items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipeVtbl;

interface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe {
    CONST_VTBL __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutPipe* > methods ***/
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetMany(This,start_index,items_size,items,value) (This)->lpVtbl->GetMany(This,start_index,items_size,items,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_QueryInterface(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_AddRef(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_Release(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetIids(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetRuntimeClassName(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetTrustLevel(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Devices::Usb::UsbInterruptOutPipe* > methods ***/
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetAt(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This,UINT32 index,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe **value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_get_Size(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_IndexOf(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe *element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetMany(__FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptOutPipe **items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_UsbInterruptOutPipe IID___FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe
#define IVectorView_UsbInterruptOutPipeVtbl __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipeVtbl
#define IVectorView_UsbInterruptOutPipe __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe
#define IVectorView_UsbInterruptOutPipe_QueryInterface __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_QueryInterface
#define IVectorView_UsbInterruptOutPipe_AddRef __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_AddRef
#define IVectorView_UsbInterruptOutPipe_Release __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_Release
#define IVectorView_UsbInterruptOutPipe_GetIids __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetIids
#define IVectorView_UsbInterruptOutPipe_GetRuntimeClassName __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetRuntimeClassName
#define IVectorView_UsbInterruptOutPipe_GetTrustLevel __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetTrustLevel
#define IVectorView_UsbInterruptOutPipe_GetAt __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetAt
#define IVectorView_UsbInterruptOutPipe_get_Size __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_get_Size
#define IVectorView_UsbInterruptOutPipe_IndexOf __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_IndexOf
#define IVectorView_UsbInterruptOutPipe_GetMany __FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_Windows__CDevices__CUsb__CUsbInterruptOutPipe_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IAsyncOperation<ABI::Windows::Devices::Usb::UsbDevice* > interface
 */
#ifndef ____FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_INTERFACE_DEFINED__
#define ____FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice, 0x2138c5ed, 0xb71a, 0x5166, 0x99,0x48, 0xd5,0x57,0x92,0x74,0x8f,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("2138c5ed-b71a-5166-9948-d55792748f5c")
            IAsyncOperation<ABI::Windows::Devices::Usb::UsbDevice* > : IAsyncOperation_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbDevice*, ABI::Windows::Devices::Usb::IUsbDevice* > >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice, 0x2138c5ed, 0xb71a, 0x5166, 0x99,0x48, 0xd5,0x57,0x92,0x74,0x8f,0x5c)
#endif
#else
typedef struct __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDeviceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This,
        TrustLevel *trustLevel);

    /*** IAsyncOperation<ABI::Windows::Devices::Usb::UsbDevice* > methods ***/
    HRESULT (STDMETHODCALLTYPE *put_Completed)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This,
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice *handler);

    HRESULT (STDMETHODCALLTYPE *get_Completed)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This,
        __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice **handler);

    HRESULT (STDMETHODCALLTYPE *GetResults)(
        __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice **results);

    END_INTERFACE
} __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDeviceVtbl;

interface __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice {
    CONST_VTBL __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IAsyncOperation<ABI::Windows::Devices::Usb::UsbDevice* > methods ***/
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_put_Completed(This,handler) (This)->lpVtbl->put_Completed(This,handler)
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_get_Completed(This,handler) (This)->lpVtbl->get_Completed(This,handler)
#define __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetResults(This,results) (This)->lpVtbl->GetResults(This,results)
#else
/*** IUnknown methods ***/
static inline HRESULT __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_QueryInterface(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_AddRef(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_Release(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetIids(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetRuntimeClassName(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetTrustLevel(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IAsyncOperation<ABI::Windows::Devices::Usb::UsbDevice* > methods ***/
static inline HRESULT __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_put_Completed(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This,__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice *handler) {
    return This->lpVtbl->put_Completed(This,handler);
}
static inline HRESULT __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_get_Completed(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This,__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice **handler) {
    return This->lpVtbl->get_Completed(This,handler);
}
static inline HRESULT __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetResults(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice **results) {
    return This->lpVtbl->GetResults(This,results);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_IAsyncOperation_UsbDevice IID___FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice
#define IAsyncOperation_UsbDeviceVtbl __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDeviceVtbl
#define IAsyncOperation_UsbDevice __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice
#define IAsyncOperation_UsbDevice_QueryInterface __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_QueryInterface
#define IAsyncOperation_UsbDevice_AddRef __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_AddRef
#define IAsyncOperation_UsbDevice_Release __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_Release
#define IAsyncOperation_UsbDevice_GetIids __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetIids
#define IAsyncOperation_UsbDevice_GetRuntimeClassName __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetRuntimeClassName
#define IAsyncOperation_UsbDevice_GetTrustLevel __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetTrustLevel
#define IAsyncOperation_UsbDevice_put_Completed __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_put_Completed
#define IAsyncOperation_UsbDevice_get_Completed __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_get_Completed
#define IAsyncOperation_UsbDevice_GetResults __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_GetResults
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ITypedEventHandler<ABI::Windows::Devices::Usb::UsbInterruptInPipe*,ABI::Windows::Devices::Usb::UsbInterruptInEventArgs* > interface
 */
#ifndef ____FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_INTERFACE_DEFINED__
#define ____FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_INTERFACE_DEFINED__

DEFINE_GUID(IID___FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs, 0xe6db9449, 0xf36a, 0x50f2, 0x92,0x6c, 0x2a,0xfd,0x85,0xc4,0x9f,0x01);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            template<>
            MIDL_INTERFACE("e6db9449-f36a-50f2-926c-2afd85c49f01")
            ITypedEventHandler<ABI::Windows::Devices::Usb::UsbInterruptInPipe*,ABI::Windows::Devices::Usb::UsbInterruptInEventArgs* > : ITypedEventHandler_impl<ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbInterruptInPipe*, ABI::Windows::Devices::Usb::IUsbInterruptInPipe* >, ABI::Windows::Foundation::Internal::AggregateType<ABI::Windows::Devices::Usb::UsbInterruptInEventArgs*, ABI::Windows::Devices::Usb::IUsbInterruptInEventArgs* > >
            {
            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs, 0xe6db9449, 0xf36a, 0x50f2, 0x92,0x6c, 0x2a,0xfd,0x85,0xc4,0x9f,0x01)
#endif
#else
typedef struct __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs *This);

    /*** ITypedEventHandler<ABI::Windows::Devices::Usb::UsbInterruptInPipe*,ABI::Windows::Devices::Usb::UsbInterruptInEventArgs* > methods ***/
    HRESULT (STDMETHODCALLTYPE *Invoke)(
        __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs *This,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *sender,
        __x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *args);

    END_INTERFACE
} __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgsVtbl;

interface __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs {
    CONST_VTBL __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_Release(This) (This)->lpVtbl->Release(This)
/*** ITypedEventHandler<ABI::Windows::Devices::Usb::UsbInterruptInPipe*,ABI::Windows::Devices::Usb::UsbInterruptInEventArgs* > methods ***/
#define __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_Invoke(This,sender,args) (This)->lpVtbl->Invoke(This,sender,args)
#else
/*** IUnknown methods ***/
static inline HRESULT __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_QueryInterface(__FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_AddRef(__FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_Release(__FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs* This) {
    return This->lpVtbl->Release(This);
}
/*** ITypedEventHandler<ABI::Windows::Devices::Usb::UsbInterruptInPipe*,ABI::Windows::Devices::Usb::UsbInterruptInEventArgs* > methods ***/
static inline HRESULT __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_Invoke(__FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs* This,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInPipe *sender,__x_ABI_CWindows_CDevices_CUsb_CIUsbInterruptInEventArgs *args) {
    return This->lpVtbl->Invoke(This,sender,args);
}
#endif
#ifdef WIDL_using_Windows_Foundation
#define IID_ITypedEventHandler_UsbInterruptInPipe_UsbInterruptInEventArgs IID___FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs
#define ITypedEventHandler_UsbInterruptInPipe_UsbInterruptInEventArgsVtbl __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgsVtbl
#define ITypedEventHandler_UsbInterruptInPipe_UsbInterruptInEventArgs __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs
#define ITypedEventHandler_UsbInterruptInPipe_UsbInterruptInEventArgs_QueryInterface __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_QueryInterface
#define ITypedEventHandler_UsbInterruptInPipe_UsbInterruptInEventArgs_AddRef __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_AddRef
#define ITypedEventHandler_UsbInterruptInPipe_UsbInterruptInEventArgs_Release __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_Release
#define ITypedEventHandler_UsbInterruptInPipe_UsbInterruptInEventArgs_Invoke __FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_Invoke
#endif /* WIDL_using_Windows_Foundation */
#endif

#endif

#endif  /* ____FITypedEventHandler_2_Windows__CDevices__CUsb__CUsbInterruptInPipe_Windows__CDevices__CUsb__CUsbInterruptInEventArgs_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER HSTRING_UserSize     (ULONG *, ULONG, HSTRING *);
unsigned char * __RPC_USER HSTRING_UserMarshal  (ULONG *, unsigned char *, HSTRING *);
unsigned char * __RPC_USER HSTRING_UserUnmarshal(ULONG *, unsigned char *, HSTRING *);
void            __RPC_USER HSTRING_UserFree     (ULONG *, HSTRING *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __windows_devices_usb_h__ */
