//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.System.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Authorization
        {
            namespace AppCapabilityAccess
            {
                typedef enum AppCapabilityAccessStatus AppCapabilityAccessStatus;

                interface IAppCapability;

                interface IAppCapability2;

                interface IAppCapabilityAccessChangedEventArgs;

                interface IAppCapabilityStatics;

                runtimeclass AppCapability;

                runtimeclass AppCapabilityAccessChangedEventArgs;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Security
    {
        namespace Authorization
        {
            namespace AppCapabilityAccess
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>*>;

                    interface Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>;

                    interface Windows.Foundation.Collections.IMapView<HSTRING, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IMapView<HSTRING, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Security.Authorization.AppCapabilityAccess.AppCapability*, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessChangedEventArgs*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Security
    {
        namespace Authorization
        {
            namespace AppCapabilityAccess
            {
                [contract(Windows.Foundation.UniversalApiContract, 8.0)]
                enum AppCapabilityAccessStatus
                {
                    DeniedBySystem     = 0,
                    NotDeclaredByApp   = 1,
                    DeniedByUser       = 2,
                    UserPromptRequired = 3,
                    Allowed            = 4
                };

                [contract(Windows.Foundation.UniversalApiContract, 8.0)]
                [exclusiveto(Windows.Security.Authorization.AppCapabilityAccess.AppCapability)]
                [uuid(4C49D915-8A2A-4295-9437-2DF7C396AFF4)]
                interface IAppCapability : IInspectable
                {
                    [propget] HRESULT CapabilityName([out] [retval] HSTRING* value);
                    [propget] HRESULT User([out] [retval] Windows.System.User** value);
                    HRESULT RequestAccessAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>** operation);
                    HRESULT CheckAccess([out] [retval] Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus* result);
                    [eventadd] HRESULT AccessChanged([in] Windows.Foundation.TypedEventHandler<Windows.Security.Authorization.AppCapabilityAccess.AppCapability*, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT AccessChanged([in] EventRegistrationToken token);
                }

                [contract(Windows.Foundation.UniversalApiContract, 15.0)]
                [exclusiveto(Windows.Security.Authorization.AppCapabilityAccess.AppCapability)]
                [uuid(11C7CCB6-C74F-50A3-B960-88008767D939)]
                interface IAppCapability2 : IInspectable
                {
                    [propget] HRESULT DisplayMessage([out] [retval] HSTRING* value);
                    [propput] HRESULT DisplayMessage([in] HSTRING value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 8.0)]
                [exclusiveto(Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessChangedEventArgs)]
                [uuid(0A578D15-BDD7-457E-8CCA-6F53BD2E5944)]
                interface IAppCapabilityAccessChangedEventArgs : IInspectable
                {
                }

                [contract(Windows.Foundation.UniversalApiContract, 8.0)]
                [exclusiveto(Windows.Security.Authorization.AppCapabilityAccess.AppCapability)]
                [uuid(7C353E2A-46EE-44E5-AF3D-6AD3FC49BD22)]
                interface IAppCapabilityStatics : IInspectable
                {
                    HRESULT RequestAccessForCapabilitiesAsync([in] Windows.Foundation.Collections.IIterable<HSTRING>* capabilityNames, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IMapView<HSTRING, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>*>** operation);
                    HRESULT RequestAccessForCapabilitiesForUserAsync([in] Windows.System.User* user, [in] Windows.Foundation.Collections.IIterable<HSTRING>* capabilityNames, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IMapView<HSTRING, Windows.Security.Authorization.AppCapabilityAccess.AppCapabilityAccessStatus>*>** operation);
                    HRESULT Create([in] HSTRING capabilityName, [out] [retval] Windows.Security.Authorization.AppCapabilityAccess.AppCapability** result);
                    HRESULT CreateWithProcessIdForUser([in] Windows.System.User* user, [in] HSTRING capabilityName, [in] UINT32 pid, [out] [retval] Windows.Security.Authorization.AppCapabilityAccess.AppCapability** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 8.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Security.Authorization.AppCapabilityAccess.IAppCapabilityStatics, Windows.Foundation.UniversalApiContract, 8.0)]
                [threading(both)]
                runtimeclass AppCapability
                {
                    [default] interface Windows.Security.Authorization.AppCapabilityAccess.IAppCapability;
                    [contract(Windows.Foundation.UniversalApiContract, 15.0)] interface Windows.Security.Authorization.AppCapabilityAccess.IAppCapability2;
                }

                [contract(Windows.Foundation.UniversalApiContract, 8.0)]
                [marshaling_behavior(agile)]
                runtimeclass AppCapabilityAccessChangedEventArgs
                {
                    [default] interface Windows.Security.Authorization.AppCapabilityAccess.IAppCapabilityAccessChangedEventArgs;
                }
            }
        }
    }
}
