/*** Autogenerated by WIDL 11.6 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__ */
