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

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#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_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_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_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_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 ____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

/* 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

#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_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_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 ____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

/*****************************************************************************
 * 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 __WIDL_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 __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDevice_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceClass* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 */

/*****************************************************************************
 * 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 __WIDL_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 __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_AddRef(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics_Release(__x_ABI_CWindows_CDevices_CUsb_CIUsbDeviceStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 */

/*
 * 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.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.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 __WIDL_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 __WIDL_INLINE ULONG __FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice_AddRef(__FIAsyncOperationCompletedHandler_1_Windows__CDevices__CUsb__CUsbDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_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 __WIDL_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__ */

/*****************************************************************************
 * 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 __WIDL_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 __WIDL_INLINE ULONG __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_AddRef(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG __FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice_Release(__FIAsyncOperation_1_Windows__CDevices__CUsb__CUsbDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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 __WIDL_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__ */

/* 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__ */
