/*
 * Copyright 2023 Hans Leidekker for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifdef __WIDL__
#pragma winrt ns_prefix
#endif

#ifndef DO_NO_IMPORTS
import "inspectable.idl";
import "asyncinfo.idl";
import "eventtoken.idl";
import "windowscontracts.idl";
import "windows.foundation.idl";
import "windows.storage.fileproperties.idl";
/* import "windows.storage.provider.idl"; */
import "windows.storage.search.idl";
import "windows.storage.streams.idl";
import "windows.system.idl";
#endif

namespace Windows.System {
    runtimeclass User;
}

namespace Windows.Storage {
    typedef enum ApplicationDataCreateDisposition ApplicationDataCreateDisposition;
    typedef enum ApplicationDataLocality ApplicationDataLocality;
    typedef enum CreationCollisionOption CreationCollisionOption;
    typedef enum FileAccessMode FileAccessMode;
    typedef enum FileAttributes FileAttributes;
    typedef enum KnownFolderId KnownFolderId;
    typedef enum KnownFoldersAccessStatus KnownFoldersAccessStatus;
    typedef enum NameCollisionOption NameCollisionOption;
    typedef enum StorageDeleteOption StorageDeleteOption;
    typedef enum StorageItemTypes StorageItemTypes;

    interface IApplicationData;
    interface IApplicationData2;
    interface IApplicationData3;
    interface IApplicationDataContainer;
    interface IApplicationDataStatics;
    interface IApplicationDataStatics2;
    interface IKnownFoldersCameraRollStatics;
    interface IKnownFoldersPlaylistsStatics;
    interface IKnownFoldersSavedPicturesStatics;
    interface IKnownFoldersStatics;
    interface IKnownFoldersStatics2;
    interface IKnownFoldersStatics3;
    interface IKnownFoldersStatics4;
    interface ISetVersionDeferral;
    interface ISetVersionRequest;
    interface IStorageFileStatics;
    interface IStorageFileStatics2;
    interface IStorageFolder;
    interface IStorageFolderStatics;
    interface IStorageFolderStatics2;
    interface IStorageItem;

    runtimeclass ApplicationData;
    runtimeclass ApplicationDataContainer;
    runtimeclass KnownFolders;
    runtimeclass SetVersionDeferral;
    runtimeclass SetVersionRequest;
    runtimeclass StorageFolder;
    runtimeclass StorageFile;
    runtimeclass StorageStreamTransaction;

    declare {
        interface Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Storage.ApplicationDataContainer *>;
        interface Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Storage.ApplicationDataContainer *> *>;
        interface Windows.Foundation.Collections.IIterator<Windows.Foundation.Collections.IKeyValuePair<HSTRING, Windows.Storage.ApplicationDataContainer *> *>;
        interface Windows.Foundation.Collections.IMapView<HSTRING, Windows.Storage.ApplicationDataContainer *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Storage.ApplicationData *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Storage.ApplicationData *>;
        interface Windows.Foundation.TypedEventHandler<Windows.Storage.ApplicationData *, IInspectable *>;
#ifndef _WINDOWS_APPLICATIONDATA
        interface Windows.Foundation.Collections.IIterable<Windows.Storage.IStorageItem *>;
        interface Windows.Foundation.Collections.IIterator<Windows.Storage.IStorageItem *>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Storage.IStorageItem *>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFile *>;
        interface Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFolder *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Foundation.Collections.IVectorView<Windows.Storage.IStorageItem *> *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFile *> *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFolder *> *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Storage.KnownFoldersAccessStatus>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Storage.IStorageItem *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Storage.StorageFile *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Storage.StorageFolder *>;
        interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Storage.StorageStreamTransaction *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Storage.IStorageItem *> *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFile *> *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFolder *> *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Storage.KnownFoldersAccessStatus>;
        interface Windows.Foundation.IAsyncOperation<Windows.Storage.IStorageItem *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFolder *>;
        interface Windows.Foundation.IAsyncOperation<Windows.Storage.StorageStreamTransaction *>;
#endif
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum ApplicationDataCreateDisposition
    {
        Always   = 0,
        Existing = 1,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum ApplicationDataLocality
    {
        Local       = 0,
        Roaming     = 1,
        Temporary   = 2,
        LocalCache  = 3,
        [contract(Windows.Foundation.UniversalApiContract, 12.0)]
        SharedLocal = 4,
    };

#ifndef _WINDOWS_APPLICATIONDATA
    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum CreationCollisionOption
    {
        GenerateUniqueName = 0,
        ReplaceExisting    = 1,
        FailIfExists       = 2,
        OpenIfExists       = 3,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum FileAccessMode
    {
        Read      = 0,
        ReadWrite = 1,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        flags
    ]
    enum FileAttributes
    {
        Normal            = 0x0,
        ReadOnly          = 0x1,
        Directory         = 0x10,
        Archive           = 0x20,
        Temporary         = 0x100,
        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        LocallyIncomplete = 0x200,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0)
    ]
    enum KnownFolderId
    {
        AppCaptures        = 0,
        CameraRoll         = 1,
        DocumentsLibrary   = 2,
        HomeGroup          = 3,
        MediaServerDevices = 4,
        MusicLibrary       = 5,
        Objects3D          = 6,
        PicturesLibrary    = 7,
        Playlists          = 8,
        RecordedCalls      = 9,
        RemovableDevices   = 10,
        SavedPictures      = 11,
        Screenshots        = 12,
        VideosLibrary      = 13,
        [contract(Windows.Foundation.UniversalApiContract, 4.0)]
        AllAppMods         = 14,
        [contract(Windows.Foundation.UniversalApiContract, 4.0)]
        CurrentAppMods     = 15,
        [contract(Windows.Foundation.UniversalApiContract, 11.0)]
        DownloadsFolder    = 16,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 10.0)
    ]
    enum KnownFoldersAccessStatus
    {
        DeniedBySystem      = 0,
        NotDeclaredByApp    = 1,
        DeniedByUser        = 2,
        UserPromptRequired  = 3,
        Allowed             = 4,
        [contract(Windows.Foundation.UniversalApiContract, 11.0)]
        AllowedPerAppFolder = 5,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum NameCollisionOption
    {
        GenerateUniqueName = 0,
        ReplaceExisting    = 1,
        FailIfExists       = 2,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum StorageDeleteOption
    {
        Default         = 0,
        PermanentDelete = 1,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        flags
    ]
    enum StorageItemTypes
    {
        None   = 0x0,
        File   = 0x1,
        Folder = 0x2,
    };
#endif

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(a05791e6-cc9f-4687-acab-a364fd785463)
    ]
    delegate HRESULT ApplicationDataSetVersionHandler([in] Windows.Storage.SetVersionRequest *version);

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.ApplicationData),
        uuid(c3da6fb7-b744-4b45-b0b8-223a0938d0dc)
    ]
    interface IApplicationData : IInspectable
    {
        [propget] HRESULT Version([out, retval] UINT32 *value);
        HRESULT SetVersionAsync(
            [in] UINT32 version,
            [in] Windows.Storage.ApplicationDataSetVersionHandler *handler,
            [out, retval] Windows.Foundation.IAsyncAction **operation
        );
        [overload("ClearAsync")]
        HRESULT ClearAllAsync(
            [out, retval] Windows.Foundation.IAsyncAction **operation
        );
        [overload("ClearAsync")]
        HRESULT ClearAsync(
            [in] Windows.Storage.ApplicationDataLocality locality,
            [out, retval] Windows.Foundation.IAsyncAction **operation
        );
        [propget] HRESULT LocalSettings([out, retval] Windows.Storage.ApplicationDataContainer **value);
        [propget] HRESULT RoamingSettings([out, retval] Windows.Storage.ApplicationDataContainer **value);
        [propget] HRESULT LocalFolder([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT RoamingFolder([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT TemporaryFolder([out, retval] Windows.Storage.StorageFolder **value);
        [eventadd] HRESULT DataChanged(
            [in] Windows.Foundation.TypedEventHandler<Windows.Storage.ApplicationData *, IInspectable *> *handler,
            [out, retval] EventRegistrationToken *token
        );
        [eventremove] HRESULT DataChanged([in] EventRegistrationToken token);
        HRESULT SignalDataChanged();
        [propget] HRESULT RoamingStorageQuota([out, retval] UINT64 *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.ApplicationData),
        uuid(9e65cd69-0ba3-4e32-be29-b02de6607638)
    ]
    interface IApplicationData2 : IInspectable
    {
        [propget] HRESULT LocalCacheFolder([out, retval] Windows.Storage.StorageFolder **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.ApplicationData),
        uuid(dc222cf4-2772-4c1d-aa2c-c9f743ade8d1)
    ]
    interface IApplicationData3 : IInspectable
    {
        HRESULT GetPublisherCacheFolder(
            [in] HSTRING folder_name,
            [out, retval] Windows.Storage.StorageFolder **value
        );
        HRESULT ClearPublisherCacheFolderAsync(
            [in] HSTRING folder_name,
            [out, retval] Windows.Foundation.IAsyncAction **operation
        );
        [propget] HRESULT SharedLocalFolder([out, retval] Windows.Storage.StorageFolder **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.ApplicationDataContainer),
        uuid(c5aefd1e-f467-40ba-8566-ab640a441e1d)
    ]
    interface IApplicationDataContainer : IInspectable
    {
        [propget] HRESULT Name([out, retval] HSTRING *value);
        [propget] HRESULT Locality([out, retval] Windows.Storage.ApplicationDataLocality *value);
        [propget] HRESULT Values([out, retval] Windows.Foundation.Collections.IPropertySet **value);
        [propget] HRESULT Containers([out, retval] Windows.Foundation.Collections.IMapView<HSTRING, Windows.Storage.ApplicationDataContainer *> **value);
        HRESULT CreateContainer(
            [in] HSTRING name,
            [in] Windows.Storage.ApplicationDataCreateDisposition disposition,
            [out, retval] Windows.Storage.ApplicationDataContainer **container
        );
        HRESULT DeleteContainer([in] HSTRING name);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.ApplicationData),
        uuid(5612147b-e843-45e3-94d8-06169e3c8e17)
    ]
    interface IApplicationDataStatics : IInspectable
    {
        [propget] HRESULT Current([out, retval] Windows.Storage.ApplicationData **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.ApplicationData),
        uuid(cd606211-cf49-40a4-a47c-c7f0dbba8107)
    ]
    interface IApplicationDataStatics2 : IInspectable
    {
        HRESULT GetForUserAsync(
            [in] Windows.System.User *user,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.ApplicationData *> **operation
        );
    }

#ifndef _WINDOWS_APPLICATIONDATA
    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.KnownFolders),
        uuid(5d115e66-27e8-492f-b8e5-2f90896cd4cd)
    ]
    interface IKnownFoldersCameraRollStatics : IInspectable
    {
        [propget] HRESULT CameraRoll([out, retval] Windows.Storage.StorageFolder **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.KnownFolders),
        uuid(dad5ecd6-306f-4d6a-b496-46ba8eb106ce)
    ]
    interface IKnownFoldersPlaylistsStatics : IInspectable
    {
        [propget] HRESULT Playlists([out, retval] Windows.Storage.StorageFolder **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.KnownFolders),
        uuid(055c93ea-253d-467c-b6ca-a97da1e9a18d)
    ]
    interface IKnownFoldersSavedPicturesStatics : IInspectable
    {
        [propget] HRESULT SavedPictures([out, retval] Windows.Storage.StorageFolder **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.KnownFolders),
        uuid(5a2a7520-4802-452d-9ad9-4351ada7ec35)
    ]
    interface IKnownFoldersStatics : IInspectable
    {
        [propget] HRESULT MusicLibrary([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT PicturesLibrary([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT VideosLibrary([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT DocumentsLibrary([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT HomeGroup([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT RemovableDevices([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT MediaServerDevices([out, retval] Windows.Storage.StorageFolder **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.KnownFolders),
        uuid(194bd0cd-cf6e-4d07-9d53-e9163a2536e9)
    ]
    interface IKnownFoldersStatics2 : IInspectable
    {
        [propget] HRESULT Objects3D([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT AppCaptures([out, retval] Windows.Storage.StorageFolder **value);
        [propget] HRESULT RecordedCalls([out, retval] Windows.Storage.StorageFolder **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 2.0),
        exclusiveto(Windows.Storage.KnownFolders),
        uuid(c5194341-9742-4ed5-823d-fc1401148764)
    ]
    interface IKnownFoldersStatics3 : IInspectable
    {
        HRESULT GetFolderForUserAsync(
            [in] Windows.System.User *user,
            [in] Windows.Storage.KnownFolderId folder_id,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFolder *> **operation
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 10.0),
        exclusiveto(Windows.Storage.KnownFolders),
        uuid(1722e6bf-9ff9-4b21-bed5-90ecb13a192e)
    ]
    interface IKnownFoldersStatics4 : IInspectable
    {
        HRESULT RequestAccessAsync(
            [in] Windows.Storage.KnownFolderId folder_id,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.KnownFoldersAccessStatus> **operation
        );
        HRESULT RequestAccessForUserAsync(
            [in] Windows.System.User *user,
            [in] Windows.Storage.KnownFolderId folder_id,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.KnownFoldersAccessStatus> **operation
        );
        HRESULT GetFolderAsync(
            [in] Windows.Storage.KnownFolderId folder_id,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFolder *> **operation
        );
    }
#endif

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.SetVersionDeferral),
        uuid(033508a2-781a-437a-b078-3f32badcfe47)
    ]
    interface ISetVersionDeferral : IInspectable
    {
        HRESULT Complete();
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.SetVersionRequest),
        uuid(b9c76b9b-1056-4e69-8330-162619956f9b)
    ]
    interface ISetVersionRequest : IInspectable
    {
        [propget] HRESULT CurrentVersion([out, retval] UINT32 *version);
        [propget] HRESULT DesiredVersion([out, retval] UINT32 *version);
        HRESULT GetDeferral([out, retval] Windows.Storage.SetVersionDeferral **deferral);
    }

#ifndef _WINDOWS_APPLICATIONDATA
    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(fa3f6186-4214-428c-a64c-14c9ac7315ea)
    ]
    interface IStorageFile : IInspectable
        requires Windows.Storage.IStorageItem,
                 Windows.Storage.Streams.IRandomAccessStreamReference,
                 Windows.Storage.Streams.IInputStreamReference
    {
        [propget] HRESULT FileType([out, retval] HSTRING *value);
        [propget] HRESULT ContentType([out, retval] HSTRING *value);
        HRESULT OpenAsync(
            [in] Windows.Storage.FileAccessMode mode,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IRandomAccessStream *> **operation
        );
        HRESULT OpenTransactedWriteAsync([out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageStreamTransaction *> **operation);
        [overload("CopyAsync")]
        HRESULT CopyOverloadDefaultNameAndOptions(
            [in] Windows.Storage.IStorageFolder *folder,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile *> **operation
        );
        [overload("CopyAsync")]
        HRESULT CopyOverloadDefaultOptions(
            [in] Windows.Storage.IStorageFolder *folder,
            [in] HSTRING name,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile *> **operation);
        [overload("CopyAsync")]
        HRESULT CopyOverload(
            [in] Windows.Storage.IStorageFolder *folder,
            [in] HSTRING name,
            [in] Windows.Storage.NameCollisionOption option,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile *> **operation
        );
        HRESULT CopyAndReplaceAsync([in] Windows.Storage.IStorageFile *file, [out, retval] Windows.Foundation.IAsyncAction **operation);
        [overload("MoveAsync")]
        HRESULT MoveOverloadDefaultNameAndOptions([in] Windows.Storage.IStorageFolder *folder, [out, retval] Windows.Foundation.IAsyncAction **operation);
        [overload("MoveAsync")]
        HRESULT MoveOverloadDefaultOptions(
            [in] Windows.Storage.IStorageFolder *folder,
            [in] HSTRING name,
            [out, retval] Windows.Foundation.IAsyncAction **operation
        );
        [overload("MoveAsync")]
        HRESULT MoveOverload(
            [in] Windows.Storage.IStorageFolder *folder,
            [in] HSTRING name,
            [in] Windows.Storage.NameCollisionOption option,
            [out, retval] Windows.Foundation.IAsyncAction **operation);
        HRESULT MoveAndReplaceAsync([in] Windows.Storage.IStorageFile *file, [out, retval] Windows.Foundation.IAsyncAction **operation);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(72d1cb78-b3ef-4f75-a80b-6fd9dae2944b)
    ]
    interface IStorageFolder : IInspectable
        requires Windows.Storage.IStorageItem
    {
        [overload("CreateFileAsync")]
        HRESULT CreateFileAsyncOverloadDefaultOptions(
            [in] HSTRING name,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile *> **operation
        );
        [overload("CreateFileAsync")]
        HRESULT CreateFileAsync(
            [in] HSTRING name,
            [in] Windows.Storage.CreationCollisionOption options,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile *> **operation
        );
        [overload("CreateFolderAsync")]
        HRESULT CreateFolderAsyncOverloadDefaultOptions(
            [in] HSTRING name,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFolder *> **operation
        );
        [overload("CreateFolderAsync")]
        HRESULT CreateFolderAsync(
            [in] HSTRING name,
            [in] Windows.Storage.CreationCollisionOption options,
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFolder *> **operation
        );
        HRESULT GetFileAsync([in] HSTRING name, [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile *> **operation);
        HRESULT GetFolderAsync([in] HSTRING name, [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFolder *> **operation);
        HRESULT GetItemAsync([in] HSTRING name, [out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.IStorageItem *> **operation);
        [overload("GetFilesAsync")]
        HRESULT GetFilesAsyncOverloadDefaultOptionsStartAndCount(
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFile *> *> **operation
        );
        [overload("GetFoldersAsync")]
        HRESULT GetFoldersAsyncOverloadDefaultOptionsStartAndCount(
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFolder *> *> **operation
        );
        [overload("GetItemsAsync")]
        HRESULT GetItemsAsyncOverloadDefaultStartAndCount(
            [out, retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Storage.IStorageItem *> *> **operation
        );
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(4207a996-ca2f-42f7-bde8-8b10457a7f30)
    ]
    interface IStorageItem : IInspectable
    {
        [overload("RenameAsync")]
        HRESULT RenameAsyncOverloadDefaultOptions([in] HSTRING name, [out, retval] Windows.Foundation.IAsyncAction **operation);
        [overload("RenameAsync")]
        HRESULT RenameAsync([in] HSTRING name, [in] Windows.Storage.NameCollisionOption option, [out, retval] Windows.Foundation.IAsyncAction **operation);
        [overload("DeleteAsync")]
        HRESULT DeleteAsyncOverloadDefaultOptions([out, retval] Windows.Foundation.IAsyncAction **operation);
        [overload("DeleteAsync")]
        HRESULT DeleteAsync([in] Windows.Storage.StorageDeleteOption option, [out, retval] Windows.Foundation.IAsyncAction **operation);
        HRESULT GetBasicPropertiesAsync([out, retval] Windows.Foundation.IAsyncOperation<Windows.Storage.FileProperties.BasicProperties *> **operation);
        [propget] HRESULT Name([out, retval] HSTRING *value);
        [propget] HRESULT Path([out, retval] HSTRING *value);
        [propget] HRESULT Attributes([out, retval] Windows.Storage.FileAttributes *value);
        [propget] HRESULT DateCreated([out, retval] Windows.Foundation.DateTime *value);
        HRESULT IsOfType([in] Windows.Storage.StorageItemTypes type, [out, retval] boolean *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.Storage.StorageStreamTransaction),
        uuid(f67cf363-a53d-4d94-ae2c-67232d93acdd)
    ]
    interface IStorageStreamTransaction : IInspectable
        requires Windows.Foundation.IClosable
    {
        [propget] HRESULT Stream([out, retval] Windows.Storage.Streams.IRandomAccessStream **value);
        HRESULT CommitAsync([out, retval] Windows.Foundation.IAsyncAction **operation);
    }
#endif

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
        static(Windows.Storage.IApplicationDataStatics, Windows.Foundation.UniversalApiContract, 1.0),
        static(Windows.Storage.IApplicationDataStatics2, Windows.Foundation.UniversalApiContract, 1.0),
        threading(mta)
    ]
    runtimeclass ApplicationData
    {
        [default] interface Windows.Storage.IApplicationData;
        [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IApplicationData2;
        [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IApplicationData3;
        [contract(Windows.Foundation.UniversalApiContract, 12.0)] interface Windows.Foundation.IClosable;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile)
    ]
    runtimeclass ApplicationDataContainer
    {
        [default] interface Windows.Storage.IApplicationDataContainer;
        [contract(Windows.Foundation.UniversalApiContract, 12.0)] interface Windows.Foundation.IClosable;
    }

#ifndef _WINDOWS_APPLICATIONDATA
    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile),
        static(Windows.Storage.IKnownFoldersCameraRollStatics, Windows.Foundation.UniversalApiContract, 1.0),
        static(Windows.Storage.IKnownFoldersPlaylistsStatics, Windows.Foundation.UniversalApiContract, 1.0),
        static(Windows.Storage.IKnownFoldersSavedPicturesStatics, Windows.Foundation.UniversalApiContract, 1.0),
        static(Windows.Storage.IKnownFoldersStatics, Windows.Foundation.UniversalApiContract, 1.0),
        static(Windows.Storage.IKnownFoldersStatics2, Windows.Foundation.UniversalApiContract, 1.0),
        static(Windows.Storage.IKnownFoldersStatics3, Windows.Foundation.UniversalApiContract, 2.0),
        static(Windows.Storage.IKnownFoldersStatics4, Windows.Foundation.UniversalApiContract, 10.0)
    ]
    runtimeclass KnownFolders
    {
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile)
    ]
    runtimeclass SetVersionDeferral
    {
        [default] interface Windows.Storage.ISetVersionDeferral;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile)
    ]
    runtimeclass SetVersionRequest
    {
        [default] interface Windows.Storage.ISetVersionRequest;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        /* static(Windows.Storage.IStorageFileStatics, Windows.Foundation.UniversalApiContract, 1.0), */
        /* static(Windows.Storage.IStorageFileStatics2, Windows.Foundation.UniversalApiContract, 10.0) */
    ]
    runtimeclass StorageFile
    {
        [default] interface Windows.Storage.IStorageFile;
        interface Windows.Storage.Streams.IInputStreamReference;
        interface Windows.Storage.Streams.IRandomAccessStreamReference;
        interface Windows.Storage.IStorageItem;
        /* interface Windows.Storage.IStorageItemProperties; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageItemProperties2; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageItem2; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageItemPropertiesWithProvider; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageFilePropertiesWithAvailability; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageFile2; */
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        /* static(Windows.Storage.IStorageFolderStatics, Windows.Foundation.UniversalApiContract, 1.0), */
        /* static(Windows.Storage.IStorageFolderStatics2, Windows.Foundation.UniversalApiContract, 10.0) */
    ]
    runtimeclass StorageFolder
    {
        [default] interface Windows.Storage.IStorageFolder;
        interface Windows.Storage.IStorageItem;
        /* interface Windows.Storage.Search.IStorageFolderQueryOperations; */
        /* interface Windows.Storage.IStorageItemProperties; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageItemProperties2; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageItem2; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageFolder2; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.IStorageItemPropertiesWithProvider; */
        /* [contract(Windows.Foundation.UniversalApiContract, 6.0)] interface Windows.Storage.IStorageFolder3; */
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    runtimeclass StorageStreamTransaction
    {
        [default] interface Windows.Storage.IStorageStreamTransaction;
        interface Windows.Foundation.IClosable;
    }
#endif
}
