//
// 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.ApplicationModel.idl";
import "Windows.Gaming.Preview.idl";
import "Windows.Storage.idl";

// Forward Declare
namespace Windows
{
    namespace ApplicationModel
    {
        runtimeclass AppDisplayInfo;
    }
}
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Preview
        {
            apicontract GamesEnumerationContract;
        }
    }
}
namespace Windows
{
    namespace Storage
    {
        interface IStorageFile;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Preview
        {
            namespace GamesEnumeration
            {
                typedef enum GameListCategory GameListCategory;

                typedef enum GameListEntryLaunchableState GameListEntryLaunchableState;

                delegate GameListChangedEventHandler;

                delegate GameListRemovedEventHandler;

                interface IGameListEntry;

                interface IGameListEntry2;

                interface IGameListStatics;

                interface IGameListStatics2;

                interface IGameModeConfiguration;

                interface IGameModeUserConfiguration;

                interface IGameModeUserConfigurationStatics;

                runtimeclass GameList;

                runtimeclass GameListEntry;

                runtimeclass GameModeConfiguration;

                runtimeclass GameModeUserConfiguration;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Gaming
    {
        namespace Preview
        {
            namespace GamesEnumeration
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Gaming
    {
        namespace Preview
        {
            namespace GamesEnumeration
            {
                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 1.0)]
                enum GameListCategory
                {
                    Candidate         = 0,
                    ConfirmedBySystem = 1,
                    ConfirmedByUser   = 2
                };

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                enum GameListEntryLaunchableState
                {
                    NotLaunchable         = 0,
                    ByLastRunningFullPath = 1,
                    ByUserProvidedPath    = 2,
                    ByTile                = 3
                };

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 1.0)]
                [uuid(25F6A421-D8F5-4D91-B40E-53D5E86FDE64)]
                delegate
                    HRESULT GameListChangedEventHandler([in] Windows.Gaming.Preview.GamesEnumeration.GameListEntry* game);

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 1.0)]
                [uuid(10C5648F-6C8F-4712-9B38-474BC22E76D8)]
                delegate
                    HRESULT GameListRemovedEventHandler([in] HSTRING identifier);

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 1.0)]
                [uuid(735924D3-811F-4494-B69C-C641A0C61543)]
                interface IGameListEntry : IInspectable
                {
                    [propget] HRESULT DisplayInfo([out] [retval] Windows.ApplicationModel.AppDisplayInfo** value);
                    HRESULT LaunchAsync([out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
                    [propget] HRESULT Category([out] [retval] Windows.Gaming.Preview.GamesEnumeration.GameListCategory* value);
                    [propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, IInspectable*>** value);
                    HRESULT SetCategoryAsync([in] Windows.Gaming.Preview.GamesEnumeration.GameListCategory value, [out] [retval] Windows.Foundation.IAsyncAction** action);
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [exclusiveto(Windows.Gaming.Preview.GamesEnumeration.GameListEntry)]
                [uuid(D84A8F8B-8749-4A25-90D3-F6C5A427886D)]
                interface IGameListEntry2 : IInspectable
                    requires
                        Windows.Gaming.Preview.GamesEnumeration.IGameListEntry
                {
                    [propget] HRESULT LaunchableState([out] [retval] Windows.Gaming.Preview.GamesEnumeration.GameListEntryLaunchableState* value);
                    [propget] HRESULT LauncherExecutable([out] [retval] Windows.Storage.IStorageFile** value);
                    [propget] HRESULT LaunchParameters([out] [retval] HSTRING* value);
                    [overload("SetLauncherExecutableFileAsync")] HRESULT SetLauncherExecutableFileAsync([in] Windows.Storage.IStorageFile* executableFile, [out] [retval] Windows.Foundation.IAsyncAction** operation);
                    [overload("SetLauncherExecutableFileAsync")] HRESULT SetLauncherExecutableFileWithParamsAsync([in] Windows.Storage.IStorageFile* executableFile, [in] HSTRING launchParams, [out] [retval] Windows.Foundation.IAsyncAction** operation);
                    [propget] HRESULT TitleId([out] [retval] HSTRING* value);
                    HRESULT SetTitleIdAsync([in] HSTRING id, [out] [retval] Windows.Foundation.IAsyncAction** operation);
                    [propget] HRESULT GameModeConfiguration([out] [retval] Windows.Gaming.Preview.GamesEnumeration.GameModeConfiguration** value);
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 1.0)]
                [exclusiveto(Windows.Gaming.Preview.GamesEnumeration.GameList)]
                [uuid(2DDD0F6F-9C66-4B05-945C-D6ED78491B8C)]
                interface IGameListStatics : IInspectable
                {
                    [overload("FindAllAsync")] HRESULT FindAllAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>*>** operation);
                    [overload("FindAllAsync")] HRESULT FindAllAsyncPackageFamilyName([in] HSTRING packageFamilyName, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>*>** operation);
                    [eventadd] HRESULT GameAdded([in] Windows.Gaming.Preview.GamesEnumeration.GameListChangedEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT GameAdded([in] EventRegistrationToken token);
                    [eventadd] HRESULT GameRemoved([in] Windows.Gaming.Preview.GamesEnumeration.GameListRemovedEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT GameRemoved([in] EventRegistrationToken token);
                    [eventadd] HRESULT GameUpdated([in] Windows.Gaming.Preview.GamesEnumeration.GameListChangedEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT GameUpdated([in] EventRegistrationToken token);
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [exclusiveto(Windows.Gaming.Preview.GamesEnumeration.GameList)]
                [uuid(395F2098-EA1A-45AA-9268-A83905686F27)]
                interface IGameListStatics2 : IInspectable
                {
                    HRESULT MergeEntriesAsync([in] Windows.Gaming.Preview.GamesEnumeration.GameListEntry* left, [in] Windows.Gaming.Preview.GamesEnumeration.GameListEntry* right, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>** operation);
                    HRESULT UnmergeEntryAsync([in] Windows.Gaming.Preview.GamesEnumeration.GameListEntry* mergedEntry, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Gaming.Preview.GamesEnumeration.GameListEntry*>*>** operation);
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [exclusiveto(Windows.Gaming.Preview.GamesEnumeration.GameModeConfiguration)]
                [uuid(78E591AF-B142-4EF0-8830-55BC2BE4F5EA)]
                interface IGameModeConfiguration : IInspectable
                {
                    [propget] HRESULT IsEnabled([out] [retval] boolean* value);
                    [propput] HRESULT IsEnabled([in] boolean value);
                    [propget] HRESULT RelatedProcessNames([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
                    [propget] HRESULT PercentGpuTimeAllocatedToGame([out] [retval] Windows.Foundation.IReference<INT32>** value);
                    [propput] HRESULT PercentGpuTimeAllocatedToGame([in] Windows.Foundation.IReference<INT32>* value);
                    [propget] HRESULT PercentGpuMemoryAllocatedToGame([out] [retval] Windows.Foundation.IReference<INT32>** value);
                    [propput] HRESULT PercentGpuMemoryAllocatedToGame([in] Windows.Foundation.IReference<INT32>* value);
                    [propget] HRESULT PercentGpuMemoryAllocatedToSystemCompositor([out] [retval] Windows.Foundation.IReference<INT32>** value);
                    [propput] HRESULT PercentGpuMemoryAllocatedToSystemCompositor([in] Windows.Foundation.IReference<INT32>* value);
                    [propget] HRESULT MaxCpuCount([out] [retval] Windows.Foundation.IReference<INT32>** value);
                    [propput] HRESULT MaxCpuCount([in] Windows.Foundation.IReference<INT32>* value);
                    [propget] HRESULT CpuExclusivityMaskLow([out] [retval] Windows.Foundation.IReference<INT32>** value);
                    [propput] HRESULT CpuExclusivityMaskLow([in] Windows.Foundation.IReference<INT32>* value);
                    [propget] HRESULT CpuExclusivityMaskHigh([out] [retval] Windows.Foundation.IReference<INT32>** value);
                    [propput] HRESULT CpuExclusivityMaskHigh([in] Windows.Foundation.IReference<INT32>* value);
                    [propget] HRESULT AffinitizeToExclusiveCpus([out] [retval] boolean* value);
                    [propput] HRESULT AffinitizeToExclusiveCpus([in] boolean value);
                    HRESULT SaveAsync([out] [retval] Windows.Foundation.IAsyncAction** operation);
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [exclusiveto(Windows.Gaming.Preview.GamesEnumeration.GameModeUserConfiguration)]
                [uuid(72D34AF4-756B-470F-A0C2-BA62A90795DB)]
                interface IGameModeUserConfiguration : IInspectable
                {
                    [propget] HRESULT GamingRelatedProcessNames([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** processNames);
                    HRESULT SaveAsync([out] [retval] Windows.Foundation.IAsyncAction** operation);
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [exclusiveto(Windows.Gaming.Preview.GamesEnumeration.GameModeUserConfiguration)]
                [uuid(6E50D97C-66EA-478E-A4A1-F57C0E8D00E7)]
                interface IGameModeUserConfigurationStatics : IInspectable
                {
                    HRESULT GetDefault([out] [retval] Windows.Gaming.Preview.GamesEnumeration.GameModeUserConfiguration** userConfiguration);
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Gaming.Preview.GamesEnumeration.IGameListStatics, Windows.Gaming.Preview.GamesEnumerationContract, 1.0)]
                [static(Windows.Gaming.Preview.GamesEnumeration.IGameListStatics2, Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [threading(both)]
                runtimeclass GameList
                {
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass GameListEntry
                {
                    [default] interface Windows.Gaming.Preview.GamesEnumeration.IGameListEntry;
                    [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)] interface Windows.Gaming.Preview.GamesEnumeration.IGameListEntry2;
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass GameModeConfiguration
                {
                    [default] interface Windows.Gaming.Preview.GamesEnumeration.IGameModeConfiguration;
                }

                [contract(Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Gaming.Preview.GamesEnumeration.IGameModeUserConfigurationStatics, Windows.Gaming.Preview.GamesEnumerationContract, 2.0)]
                [threading(both)]
                runtimeclass GameModeUserConfiguration
                {
                    [default] interface Windows.Gaming.Preview.GamesEnumeration.IGameModeUserConfiguration;
                }
            }
        }
    }
}
