/*** Autogenerated by WIDL 10.13 from include/windows.security.isolation.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_security_isolation_h__
#define __windows_security_isolation_h__

/* Forward declarations */

#ifndef ____x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics ABI::Windows::Security::Isolation::IIsolatedWindowsEnvironmentHostStatics
namespace ABI {
    namespace Windows {
        namespace Security {
            namespace Isolation {
                interface IIsolatedWindowsEnvironmentHostStatics;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHost_FWD_DEFINED__
#define ____x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHost_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Security {
            namespace Isolation {
                class IsolatedWindowsEnvironmentHost;
            }
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHost __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHost;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHost_FWD_DEFINED__ */

#ifndef ____FIVectorView_1_IsolatedWindowsEnvironmentHostError_FWD_DEFINED__
#define ____FIVectorView_1_IsolatedWindowsEnvironmentHostError_FWD_DEFINED__
typedef interface __FIVectorView_1_IsolatedWindowsEnvironmentHostError __FIVectorView_1_IsolatedWindowsEnvironmentHostError;
#ifdef __cplusplus
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError >
#endif /* __cplusplus */
#endif

/* Headers for imported files */

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

#ifdef __cplusplus
extern "C" {
#endif

#if !defined(WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION)
#define WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION 0x30000
#endif // defined(WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION)

#if WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError_ENUM_DEFINED__
#define ____x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError_ENUM_DEFINED__
#ifdef __cplusplus
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Security {
            namespace Isolation {
                enum IsolatedWindowsEnvironmentHostError {
                    IsolatedWindowsEnvironmentHostError_AdminPolicyIsDisabledOrNotPresent = 0,
                    IsolatedWindowsEnvironmentHostError_FeatureNotInstalled = 1,
                    IsolatedWindowsEnvironmentHostError_HardwareRequirementsNotMet = 2,
                    IsolatedWindowsEnvironmentHostError_RebootRequired = 3,
                    IsolatedWindowsEnvironmentHostError_UnknownError = 4
                };
            }
        }
    }
}
extern "C" {
#else
enum __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError {
    IsolatedWindowsEnvironmentHostError_AdminPolicyIsDisabledOrNotPresent = 0,
    IsolatedWindowsEnvironmentHostError_FeatureNotInstalled = 1,
    IsolatedWindowsEnvironmentHostError_HardwareRequirementsNotMet = 2,
    IsolatedWindowsEnvironmentHostError_RebootRequired = 3,
    IsolatedWindowsEnvironmentHostError_UnknownError = 4
};
#ifdef WIDL_using_Windows_Security_Isolation
#define IsolatedWindowsEnvironmentHostError __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError
#endif /* WIDL_using_Windows_Security_Isolation */
#endif

#endif /* ____x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError_ENUM_DEFINED__ */
#endif /* WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION >= 0x10000 */
#ifndef __cplusplus
typedef enum __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError;
#endif /* __cplusplus */

#ifndef ____x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_FWD_DEFINED__
#define ____x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics;
#ifdef __cplusplus
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics ABI::Windows::Security::Isolation::IIsolatedWindowsEnvironmentHostStatics
namespace ABI {
    namespace Windows {
        namespace Security {
            namespace Isolation {
                interface IIsolatedWindowsEnvironmentHostStatics;
            }
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____FIVectorView_1_IsolatedWindowsEnvironmentHostError_FWD_DEFINED__
#define ____FIVectorView_1_IsolatedWindowsEnvironmentHostError_FWD_DEFINED__
typedef interface __FIVectorView_1_IsolatedWindowsEnvironmentHostError __FIVectorView_1_IsolatedWindowsEnvironmentHostError;
#ifdef __cplusplus
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError >
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * IIsolatedWindowsEnvironmentHostStatics interface
 */
#if WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION >= 0x10000
#ifndef ____x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics, 0x2c0e22c7, 0x05a0, 0x517a, 0xb8,0x1c, 0x6e,0xe8,0x79,0x0c,0x38,0x1f);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Security {
            namespace Isolation {
                MIDL_INTERFACE("2c0e22c7-05a0-517a-b81c-6ee8790c381f")
                IIsolatedWindowsEnvironmentHostStatics : public IInspectable
                {
                    virtual HRESULT STDMETHODCALLTYPE get_IsReady(
                        boolean *value) = 0;

                    virtual HRESULT STDMETHODCALLTYPE get_HostErrors(
                        ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError > **value) = 0;

                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics, 0x2c0e22c7, 0x05a0, 0x517a, 0xb8,0x1c, 0x6e,0xe8,0x79,0x0c,0x38,0x1f)
#endif
#else
typedef struct __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStaticsVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

    /*** IIsolatedWindowsEnvironmentHostStatics methods ***/
    HRESULT (STDMETHODCALLTYPE *get_IsReady)(
        __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics *This,
        boolean *value);

    HRESULT (STDMETHODCALLTYPE *get_HostErrors)(
        __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics *This,
        __FIVectorView_1_IsolatedWindowsEnvironmentHostError **value);

    END_INTERFACE
} __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStaticsVtbl;

interface __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics {
    CONST_VTBL __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStaticsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IIsolatedWindowsEnvironmentHostStatics methods ***/
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_get_IsReady(This,value) (This)->lpVtbl->get_IsReady(This,value)
#define __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_get_HostErrors(This,value) (This)->lpVtbl->get_HostErrors(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_QueryInterface(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_AddRef(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_Release(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetIids(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetRuntimeClassName(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetTrustLevel(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IIsolatedWindowsEnvironmentHostStatics methods ***/
static inline HRESULT __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_get_IsReady(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics* This,boolean *value) {
    return This->lpVtbl->get_IsReady(This,value);
}
static inline HRESULT __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_get_HostErrors(__x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics* This,__FIVectorView_1_IsolatedWindowsEnvironmentHostError **value) {
    return This->lpVtbl->get_HostErrors(This,value);
}
#endif
#ifdef WIDL_using_Windows_Security_Isolation
#define IID_IIsolatedWindowsEnvironmentHostStatics IID___x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics
#define IIsolatedWindowsEnvironmentHostStaticsVtbl __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStaticsVtbl
#define IIsolatedWindowsEnvironmentHostStatics __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics
#define IIsolatedWindowsEnvironmentHostStatics_QueryInterface __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_QueryInterface
#define IIsolatedWindowsEnvironmentHostStatics_AddRef __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_AddRef
#define IIsolatedWindowsEnvironmentHostStatics_Release __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_Release
#define IIsolatedWindowsEnvironmentHostStatics_GetIids __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetIids
#define IIsolatedWindowsEnvironmentHostStatics_GetRuntimeClassName __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetRuntimeClassName
#define IIsolatedWindowsEnvironmentHostStatics_GetTrustLevel __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_GetTrustLevel
#define IIsolatedWindowsEnvironmentHostStatics_get_IsReady __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_get_IsReady
#define IIsolatedWindowsEnvironmentHostStatics_get_HostErrors __x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_get_HostErrors
#endif /* WIDL_using_Windows_Security_Isolation */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CSecurity_CIsolation_CIIsolatedWindowsEnvironmentHostStatics_INTERFACE_DEFINED__ */
#endif /* WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION >= 0x10000 */

/*
 * Class Windows.Security.Isolation.IsolatedWindowsEnvironmentHost
 */
#if WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION >= 0x10000
#ifndef RUNTIMECLASS_Windows_Security_Isolation_IsolatedWindowsEnvironmentHost_DEFINED
#define RUNTIMECLASS_Windows_Security_Isolation_IsolatedWindowsEnvironmentHost_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Security_Isolation_IsolatedWindowsEnvironmentHost[] = {'W','i','n','d','o','w','s','.','S','e','c','u','r','i','t','y','.','I','s','o','l','a','t','i','o','n','.','I','s','o','l','a','t','e','d','W','i','n','d','o','w','s','E','n','v','i','r','o','n','m','e','n','t','H','o','s','t',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Security_Isolation_IsolatedWindowsEnvironmentHost[] = L"Windows.Security.Isolation.IsolatedWindowsEnvironmentHost";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Security_Isolation_IsolatedWindowsEnvironmentHost[] = {'W','i','n','d','o','w','s','.','S','e','c','u','r','i','t','y','.','I','s','o','l','a','t','i','o','n','.','I','s','o','l','a','t','e','d','W','i','n','d','o','w','s','E','n','v','i','r','o','n','m','e','n','t','H','o','s','t',0};
#endif
#endif /* RUNTIMECLASS_Windows_Security_Isolation_IsolatedWindowsEnvironmentHost_DEFINED */
#endif /* WINDOWS_SECURITY_ISOLATION_ISOLATEDWINDOWSENVIRONMENTCONTRACT_VERSION >= 0x10000 */

/*****************************************************************************
 * IVectorView<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError > interface
 */
#ifndef ____FIVectorView_1_IsolatedWindowsEnvironmentHostError_INTERFACE_DEFINED__
#define ____FIVectorView_1_IsolatedWindowsEnvironmentHostError_INTERFACE_DEFINED__

DEFINE_GUID(IID___FIVectorView_1_IsolatedWindowsEnvironmentHostError, 0xa830f621, 0xa4ae, 0x5f5c, 0xa0,0x03, 0x98,0x5f,0xe3,0xe0,0x1e,0x51);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Foundation {
            namespace Collections {
                template<>
                MIDL_INTERFACE("a830f621-a4ae-5f5c-a003-985fe3e01e51")
                IVectorView<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError > : IVectorView_impl<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError >
                {
                };
            }
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__FIVectorView_1_IsolatedWindowsEnvironmentHostError, 0xa830f621, 0xa4ae, 0x5f5c, 0xa0,0x03, 0x98,0x5f,0xe3,0xe0,0x1e,0x51)
#endif
#else
typedef struct __FIVectorView_1_IsolatedWindowsEnvironmentHostErrorVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

    /*** IVectorView<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError > methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAt)(
        __FIVectorView_1_IsolatedWindowsEnvironmentHostError *This,
        UINT32 index,
        __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError *value);

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

    HRESULT (STDMETHODCALLTYPE *IndexOf)(
        __FIVectorView_1_IsolatedWindowsEnvironmentHostError *This,
        __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError element,
        UINT32 *index,
        BOOLEAN *value);

    HRESULT (STDMETHODCALLTYPE *GetMany)(
        __FIVectorView_1_IsolatedWindowsEnvironmentHostError *This,
        UINT32 start_index,
        UINT32 items_size,
        __x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError *items,
        UINT32 *value);

    END_INTERFACE
} __FIVectorView_1_IsolatedWindowsEnvironmentHostErrorVtbl;

interface __FIVectorView_1_IsolatedWindowsEnvironmentHostError {
    CONST_VTBL __FIVectorView_1_IsolatedWindowsEnvironmentHostErrorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IVectorView<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError > methods ***/
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetAt(This,index,value) (This)->lpVtbl->GetAt(This,index,value)
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_get_Size(This,value) (This)->lpVtbl->get_Size(This,value)
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_IndexOf(This,element,index,value) (This)->lpVtbl->IndexOf(This,element,index,value)
#define __FIVectorView_1_IsolatedWindowsEnvironmentHostError_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_IsolatedWindowsEnvironmentHostError_QueryInterface(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __FIVectorView_1_IsolatedWindowsEnvironmentHostError_AddRef(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __FIVectorView_1_IsolatedWindowsEnvironmentHostError_Release(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetIids(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetRuntimeClassName(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetTrustLevel(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IVectorView<ABI::Windows::Security::Isolation::IsolatedWindowsEnvironmentHostError > methods ***/
static inline HRESULT __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetAt(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This,UINT32 index,__x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError *value) {
    return This->lpVtbl->GetAt(This,index,value);
}
static inline HRESULT __FIVectorView_1_IsolatedWindowsEnvironmentHostError_get_Size(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This,UINT32 *value) {
    return This->lpVtbl->get_Size(This,value);
}
static inline HRESULT __FIVectorView_1_IsolatedWindowsEnvironmentHostError_IndexOf(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This,__x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError element,UINT32 *index,BOOLEAN *value) {
    return This->lpVtbl->IndexOf(This,element,index,value);
}
static inline HRESULT __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetMany(__FIVectorView_1_IsolatedWindowsEnvironmentHostError* This,UINT32 start_index,UINT32 items_size,__x_ABI_CWindows_CSecurity_CIsolation_CIsolatedWindowsEnvironmentHostError *items,UINT32 *value) {
    return This->lpVtbl->GetMany(This,start_index,items_size,items,value);
}
#endif
#ifdef WIDL_using_Windows_Foundation_Collections
#define IID_IVectorView_IsolatedWindowsEnvironmentHostError IID___FIVectorView_1_IsolatedWindowsEnvironmentHostError
#define IVectorView_IsolatedWindowsEnvironmentHostErrorVtbl __FIVectorView_1_IsolatedWindowsEnvironmentHostErrorVtbl
#define IVectorView_IsolatedWindowsEnvironmentHostError __FIVectorView_1_IsolatedWindowsEnvironmentHostError
#define IVectorView_IsolatedWindowsEnvironmentHostError_QueryInterface __FIVectorView_1_IsolatedWindowsEnvironmentHostError_QueryInterface
#define IVectorView_IsolatedWindowsEnvironmentHostError_AddRef __FIVectorView_1_IsolatedWindowsEnvironmentHostError_AddRef
#define IVectorView_IsolatedWindowsEnvironmentHostError_Release __FIVectorView_1_IsolatedWindowsEnvironmentHostError_Release
#define IVectorView_IsolatedWindowsEnvironmentHostError_GetIids __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetIids
#define IVectorView_IsolatedWindowsEnvironmentHostError_GetRuntimeClassName __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetRuntimeClassName
#define IVectorView_IsolatedWindowsEnvironmentHostError_GetTrustLevel __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetTrustLevel
#define IVectorView_IsolatedWindowsEnvironmentHostError_GetAt __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetAt
#define IVectorView_IsolatedWindowsEnvironmentHostError_get_Size __FIVectorView_1_IsolatedWindowsEnvironmentHostError_get_Size
#define IVectorView_IsolatedWindowsEnvironmentHostError_IndexOf __FIVectorView_1_IsolatedWindowsEnvironmentHostError_IndexOf
#define IVectorView_IsolatedWindowsEnvironmentHostError_GetMany __FIVectorView_1_IsolatedWindowsEnvironmentHostError_GetMany
#endif /* WIDL_using_Windows_Foundation_Collections */
#endif

#endif

#endif  /* ____FIVectorView_1_IsolatedWindowsEnvironmentHostError_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __windows_security_isolation_h__ */
