/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

import "wtypes.idl";
import "hstring.idl";
import "unknwn.idl";

typedef enum TrustLevel { 
  BaseTrust     = 0,
  PartialTrust  = 1,
  FullTrust     = 2
} TrustLevel;

[
    object,
    uuid(af86e2e0-b12d-4c6a-9c5a-d7aa65101e90),
    pointer_default(unique)
]
interface IInspectable : IUnknown
{
    HRESULT GetIids(
            [out] ULONG *iidCount,
            [out, size_is(*iidCount)]  IID **iids);

    HRESULT GetRuntimeClassName(
            [out] HSTRING *className);

    HRESULT GetTrustLevel(
            [out] TrustLevel *trustLevel);
}
