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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Networking.idl";
import "Windows.Storage.idl";
import "Windows.Storage.Streams.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Enetworking_h__)")
cpp_quote("#include <Windows.Networking.h>")
cpp_quote("#endif // !defined(__windows2Enetworking_h__)")
cpp_quote("#if !defined(__windows2Estorage_h__)")
cpp_quote("#include <Windows.Storage.h>")
cpp_quote("#endif // !defined(__windows2Estorage_h__)")
cpp_quote("#if !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#include <Windows.Storage.Streams.h>")
cpp_quote("#endif // !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;

        runtimeclass Deferral;

        interface IClosable;
    }
}
namespace Windows
{
    namespace Networking
    {
        runtimeclass HostName;
    }
}
namespace Windows
{
    namespace Storage
    {
        typedef enum CreationCollisionOption CreationCollisionOption;

        interface IStorageFile;

        interface IStorageFolder;

        interface IStorageItem;

        runtimeclass StorageFile;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IBuffer;

            interface IInputStream;

            interface IOutputStream;

            interface IRandomAccessStream;
        }
    }
}
namespace Windows
{
    namespace Security
    {
        namespace EnterpriseData
        {
            typedef enum ProtectionPolicyEvaluationResult ProtectionPolicyEvaluationResult;

            typedef enum FileProtectionStatus FileProtectionStatus;

            typedef enum ProtectedImportExportStatus ProtectedImportExportStatus;

            typedef enum DataProtectionStatus DataProtectionStatus;

            interface IFileRevocationManagerStatics;

            interface IFileProtectionManagerStatics;

            interface IProtectedFileCreateResult;

            interface IFileProtectionInfo;

            interface IProtectedContainerExportResult;

            interface IProtectedContainerImportResult;

            interface IDataProtectionManagerStatics;

            interface IDataProtectionInfo;

            interface IBufferProtectUnprotectResult;

            interface IProtectionPolicyManager;

            interface IProtectionPolicyManagerStatics;

            interface IThreadNetworkContext;

            interface IProtectedAccessSuspendingEventArgs;

            interface IProtectedAccessResumedEventArgs;

            interface IProtectedContentRevokedEventArgs;

            runtimeclass FileProtectionInfo;

            runtimeclass ProtectedContainerExportResult;

            runtimeclass ProtectedContainerImportResult;

            runtimeclass ProtectedFileCreateResult;

            runtimeclass BufferProtectUnprotectResult;

            runtimeclass DataProtectionInfo;

            runtimeclass ThreadNetworkContext;

            runtimeclass ProtectionPolicyManager;

            runtimeclass ProtectedAccessSuspendingEventArgs;

            runtimeclass ProtectedAccessResumedEventArgs;

            runtimeclass ProtectedContentRevokedEventArgs;

            runtimeclass FileRevocationManager;

            runtimeclass FileProtectionManager;

            runtimeclass DataProtectionManager;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Security
    {
        namespace EnterpriseData
        {
            declare
            {
                interface Windows.Foundation.EventHandler<Windows.Security.EnterpriseData.ProtectedAccessResumedEventArgs*>;

                interface Windows.Foundation.EventHandler<Windows.Security.EnterpriseData.ProtectedAccessSuspendingEventArgs*>;

                interface Windows.Foundation.EventHandler<Windows.Security.EnterpriseData.ProtectedContentRevokedEventArgs*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.BufferProtectUnprotectResult*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.DataProtectionInfo*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.FileProtectionInfo*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.FileProtectionStatus>;

                interface Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectedContainerExportResult*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectedContainerImportResult*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectedFileCreateResult*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectionPolicyEvaluationResult>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Security
    {
        namespace EnterpriseData
        {
            [version(0x0A000000)]
            enum ProtectionPolicyEvaluationResult
            {
                Allowed         = 0,
                Blocked         = 1,
                ConsentRequired = 2
            };

            [version(0x06030000)]
            enum FileProtectionStatus
            {
                [deprecated("Undetermined might be unavailable after Windows 10. Instead, use Unknown.", deprecate, 0x0A000000)]
                [version(0x06030000)]
                Undetermined               = 0,
                [version(0x0A000000)]
                Unknown                    = 0,
                Unprotected                = 1,
                Revoked                    = 2,
                Protected                  = 3,
                [deprecated("ProtectedByOtherUser might be unavailable after Windows 10. Instead, use ProtectedToOtherIdentity.", deprecate, 0x0A000000)]
                [version(0x06030000)]
                ProtectedByOtherUser       = 4,
                [deprecated("ProtectedToOtherEnterprise might be unavailable after Windows 10. Instead, use ProtectedToOtherIdentity.", deprecate, 0x0A000000)]
                [version(0x06030000)]
                ProtectedToOtherEnterprise = 5,
                NotProtectable             = 6,
                [version(0x0A000000)]
                ProtectedToOtherIdentity   = 7
            };

            [version(0x0A000000)]
            enum ProtectedImportExportStatus
            {
                Ok                       = 0,
                Undetermined             = 1,
                Unprotected              = 2,
                Revoked                  = 3,
                NotRoamable              = 4,
                ProtectedToOtherIdentity = 5
            };

            [version(0x0A000000)]
            enum DataProtectionStatus
            {
                ProtectedToOtherIdentity = 0,
                Protected                = 1,
                Revoked                  = 2,
                Unprotected              = 3
            };

            [deprecated("FileRevocationManager might be unavailable after Windows 10. Instead, use FileProtectionManager.", deprecate, 0x0A000000)]
            [exclusiveto(Windows.Security.EnterpriseData.FileRevocationManager)]
            [uuid(256BBC3D-1C5D-4260-8C75-9144CFB78BA9)]
            [version(0x06030000)]
            interface IFileRevocationManagerStatics : IInspectable
            {
                [deprecated("FileRevocationManager might be unavailable after Windows 10. Instead, use FileProtectionManager.", deprecate, 0x0A000000)] HRESULT ProtectAsync([in] Windows.Storage.IStorageItem* storageItem, [in] HSTRING enterpriseIdentity, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.FileProtectionStatus>** result);
                [deprecated("FileRevocationManager might be unavailable after Windows 10. Instead, use FileProtectionManager.", deprecate, 0x0A000000)] HRESULT CopyProtectionAsync([in] Windows.Storage.IStorageItem* sourceStorageItem, [in] Windows.Storage.IStorageItem* targetStorageItem, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** result);
                [deprecated("FileRevocationManager might be unavailable after Windows 10. Instead, use FileProtectionManager.", deprecate, 0x0A000000)] HRESULT Revoke([in] HSTRING enterpriseIdentity);
                [deprecated("FileRevocationManager might be unavailable after Windows 10. Instead, use FileProtectionManager.", deprecate, 0x0A000000)] HRESULT GetStatusAsync([in] Windows.Storage.IStorageItem* storageItem, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.FileProtectionStatus>** result);
            }

            [exclusiveto(Windows.Security.EnterpriseData.FileProtectionManager)]
            [uuid(5846FC9B-E613-426B-BB38-88CBA1DC9ADB)]
            [version(0x0A000000)]
            interface IFileProtectionManagerStatics : IInspectable
            {
                HRESULT ProtectAsync([in] Windows.Storage.IStorageItem* target, [in] HSTRING identity, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.FileProtectionInfo*>** result);
                HRESULT CopyProtectionAsync([in] Windows.Storage.IStorageItem* source, [in] Windows.Storage.IStorageItem* target, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** result);
                HRESULT GetProtectionInfoAsync([in] Windows.Storage.IStorageItem* source, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.FileProtectionInfo*>** result);
                HRESULT SaveFileAsContainerAsync([in] Windows.Storage.IStorageFile* protectedFile, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectedContainerExportResult*>** result);
                [overload("LoadFileFromContainerAsync")] HRESULT LoadFileFromContainerAsync([in] Windows.Storage.IStorageFile* containerFile, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectedContainerImportResult*>** result);
                [overload("LoadFileFromContainerAsync")] HRESULT LoadFileFromContainerWithTargetAsync([in] Windows.Storage.IStorageFile* containerFile, [in] Windows.Storage.IStorageItem* target, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectedContainerImportResult*>** result);
                HRESULT CreateProtectedAndOpenAsync([in] Windows.Storage.IStorageFolder* parentFolder, [in] HSTRING desiredName, [in] HSTRING identity, [in] Windows.Storage.CreationCollisionOption collisionOption, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectedFileCreateResult*>** result);
            }

            [exclusiveto(Windows.Security.EnterpriseData.ProtectedFileCreateResult)]
            [uuid(28E3ED6A-E9E7-4A03-9F53-BDB16172699B)]
            [version(0x0A000000)]
            interface IProtectedFileCreateResult : IInspectable
            {
                [propget] HRESULT File([out] [retval] Windows.Storage.StorageFile** value);
                [propget] HRESULT Stream([out] [retval] Windows.Storage.Streams.IRandomAccessStream** value);
                [propget] HRESULT ProtectionInfo([out] [retval] Windows.Security.EnterpriseData.FileProtectionInfo** value);
            }

            [exclusiveto(Windows.Security.EnterpriseData.FileProtectionInfo)]
            [uuid(4EE96486-147E-4DD0-8FAF-5253ED91AD0C)]
            [version(0x0A000000)]
            interface IFileProtectionInfo : IInspectable
            {
                [propget] HRESULT Status([out] [retval] Windows.Security.EnterpriseData.FileProtectionStatus* value);
                [propget] HRESULT IsRoamable([out] [retval] boolean* value);
                [propget] HRESULT Identity([out] [retval] HSTRING* value);
            }

            [exclusiveto(Windows.Security.EnterpriseData.ProtectedContainerExportResult)]
            [uuid(3948EF95-F7FB-4B42-AFB0-DF70B41543C1)]
            [version(0x0A000000)]
            interface IProtectedContainerExportResult : IInspectable
            {
                [propget] HRESULT Status([out] [retval] Windows.Security.EnterpriseData.ProtectedImportExportStatus* value);
                [propget] HRESULT File([out] [retval] Windows.Storage.StorageFile** value);
            }

            [exclusiveto(Windows.Security.EnterpriseData.ProtectedContainerImportResult)]
            [uuid(CDB780D1-E7BB-4D1A-9339-34DC41149F9B)]
            [version(0x0A000000)]
            interface IProtectedContainerImportResult : IInspectable
            {
                [propget] HRESULT Status([out] [retval] Windows.Security.EnterpriseData.ProtectedImportExportStatus* value);
                [propget] HRESULT File([out] [retval] Windows.Storage.StorageFile** value);
            }

            [exclusiveto(Windows.Security.EnterpriseData.DataProtectionManager)]
            [uuid(B6149B74-9144-4EE4-8A8A-30B5F361430E)]
            [version(0x0A000000)]
            interface IDataProtectionManagerStatics : IInspectable
            {
                HRESULT ProtectAsync([in] Windows.Storage.Streams.IBuffer* data, [in] HSTRING identity, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.BufferProtectUnprotectResult*>** result);
                HRESULT UnprotectAsync([in] Windows.Storage.Streams.IBuffer* data, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.BufferProtectUnprotectResult*>** result);
                HRESULT ProtectStreamAsync([in] Windows.Storage.Streams.IInputStream* unprotectedStream, [in] HSTRING identity, [in] Windows.Storage.Streams.IOutputStream* protectedStream, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.DataProtectionInfo*>** result);
                HRESULT UnprotectStreamAsync([in] Windows.Storage.Streams.IInputStream* protectedStream, [in] Windows.Storage.Streams.IOutputStream* unprotectedStream, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.DataProtectionInfo*>** result);
                HRESULT GetProtectionInfoAsync([in] Windows.Storage.Streams.IBuffer* protectedData, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.DataProtectionInfo*>** result);
                HRESULT GetStreamProtectionInfoAsync([in] Windows.Storage.Streams.IInputStream* protectedStream, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.DataProtectionInfo*>** result);
            }

            [exclusiveto(Windows.Security.EnterpriseData.DataProtectionInfo)]
            [uuid(8420B0C1-5E31-4405-9540-3F943AF0CB26)]
            [version(0x0A000000)]
            interface IDataProtectionInfo : IInspectable
            {
                [propget] HRESULT Status([out] [retval] Windows.Security.EnterpriseData.DataProtectionStatus* value);
                [propget] HRESULT Identity([out] [retval] HSTRING* value);
            }

            [exclusiveto(Windows.Security.EnterpriseData.BufferProtectUnprotectResult)]
            [uuid(47995EDC-6CEC-4E3A-B251-9E7485D79E7A)]
            [version(0x0A000000)]
            interface IBufferProtectUnprotectResult : IInspectable
            {
                [propget] HRESULT Buffer([out] [retval] Windows.Storage.Streams.IBuffer** value);
                [propget] HRESULT ProtectionInfo([out] [retval] Windows.Security.EnterpriseData.DataProtectionInfo** value);
            }

            [exclusiveto(Windows.Security.EnterpriseData.ProtectionPolicyManager)]
            [uuid(D5703E18-A08D-47E6-A240-9934D7165EB5)]
            [version(0x0A000000)]
            interface IProtectionPolicyManager : IInspectable
            {
                [propput] HRESULT Identity([in] HSTRING value);
                [propget] HRESULT Identity([out] [retval] HSTRING* value);
            }

            [exclusiveto(Windows.Security.EnterpriseData.ProtectionPolicyManager)]
            [uuid(C0BFFC66-8C3D-4D56-8804-C68F0AD32EC5)]
            [version(0x0A000000)]
            interface IProtectionPolicyManagerStatics : IInspectable
            {
                HRESULT IsIdentityManaged([in] HSTRING identity, [out] [retval] boolean* result);
                HRESULT TryApplyProcessUIPolicy([in] HSTRING identity, [out] [retval] boolean* result);
                HRESULT ClearProcessUIPolicy();
                HRESULT CreateCurrentThreadNetworkContext([in] HSTRING identity, [out] [retval] Windows.Security.EnterpriseData.ThreadNetworkContext** result);
                HRESULT GetPrimaryManagedIdentityForNetworkEndpointAsync([in] Windows.Networking.HostName* endpointHost, [out] [retval] Windows.Foundation.IAsyncOperation<HSTRING>** result);
                HRESULT RevokeContent([in] HSTRING identity);
                HRESULT GetForCurrentView([out] [retval] Windows.Security.EnterpriseData.ProtectionPolicyManager** result);
                [eventadd] HRESULT ProtectedAccessSuspending([in] Windows.Foundation.EventHandler<Windows.Security.EnterpriseData.ProtectedAccessSuspendingEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT ProtectedAccessSuspending([in] EventRegistrationToken token);
                [eventadd] HRESULT ProtectedAccessResumed([in] Windows.Foundation.EventHandler<Windows.Security.EnterpriseData.ProtectedAccessResumedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT ProtectedAccessResumed([in] EventRegistrationToken token);
                [eventadd] HRESULT ProtectedContentRevoked([in] Windows.Foundation.EventHandler<Windows.Security.EnterpriseData.ProtectedContentRevokedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT ProtectedContentRevoked([in] EventRegistrationToken token);
                HRESULT CheckAccess([in] HSTRING sourceIdentity, [in] HSTRING targetIdentity, [out] [retval] Windows.Security.EnterpriseData.ProtectionPolicyEvaluationResult* result);
                HRESULT RequestAccessAsync([in] HSTRING sourceIdentity, [in] HSTRING targetIdentity, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.EnterpriseData.ProtectionPolicyEvaluationResult>** result);
            }

            [exclusiveto(Windows.Security.EnterpriseData.ThreadNetworkContext)]
            [uuid(FA4EA8E9-EF13-405A-B12C-D7348C6F41FC)]
            [version(0x0A000000)]
            interface IThreadNetworkContext : IInspectable
            {
            }

            [exclusiveto(Windows.Security.EnterpriseData.ProtectedAccessSuspendingEventArgs)]
            [uuid(75A193E0-A344-429F-B975-04FC1F88C185)]
            [version(0x0A000000)]
            interface IProtectedAccessSuspendingEventArgs : IInspectable
            {
                [propget] HRESULT Identities([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
                [propget] HRESULT Deadline([out] [retval] Windows.Foundation.DateTime* value);
                HRESULT GetDeferral([out] [retval] Windows.Foundation.Deferral** result);
            }

            [exclusiveto(Windows.Security.EnterpriseData.ProtectedAccessResumedEventArgs)]
            [uuid(AC4DCA59-5D80-4E95-8C5F-8539450EEBE0)]
            [version(0x0A000000)]
            interface IProtectedAccessResumedEventArgs : IInspectable
            {
                [propget] HRESULT Identities([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
            }

            [exclusiveto(Windows.Security.EnterpriseData.ProtectedContentRevokedEventArgs)]
            [uuid(63686821-58B9-47EE-93D9-F0F741CF43F0)]
            [version(0x0A000000)]
            interface IProtectedContentRevokedEventArgs : IInspectable
            {
                [propget] HRESULT Identities([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass FileProtectionInfo
            {
                [default] interface Windows.Security.EnterpriseData.IFileProtectionInfo;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass ProtectedContainerExportResult
            {
                [default] interface Windows.Security.EnterpriseData.IProtectedContainerExportResult;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass ProtectedContainerImportResult
            {
                [default] interface Windows.Security.EnterpriseData.IProtectedContainerImportResult;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass ProtectedFileCreateResult
            {
                [default] interface Windows.Security.EnterpriseData.IProtectedFileCreateResult;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass BufferProtectUnprotectResult
            {
                [default] interface Windows.Security.EnterpriseData.IBufferProtectUnprotectResult;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DataProtectionInfo
            {
                [default] interface Windows.Security.EnterpriseData.IDataProtectionInfo;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass ThreadNetworkContext
            {
                [default] interface Windows.Security.EnterpriseData.IThreadNetworkContext;
                interface Windows.Foundation.IClosable;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Security.EnterpriseData.IProtectionPolicyManagerStatics, 0x0A000000)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass ProtectionPolicyManager
            {
                [default] interface Windows.Security.EnterpriseData.IProtectionPolicyManager;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass ProtectedAccessSuspendingEventArgs
            {
                [default] interface Windows.Security.EnterpriseData.IProtectedAccessSuspendingEventArgs;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass ProtectedAccessResumedEventArgs
            {
                [default] interface Windows.Security.EnterpriseData.IProtectedAccessResumedEventArgs;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass ProtectedContentRevokedEventArgs
            {
                [default] interface Windows.Security.EnterpriseData.IProtectedContentRevokedEventArgs;
            }

            [deprecated("FileRevocationManager might be unavailable after Windows 10. Instead, use FileProtectionManager.", deprecate, 0x0A000000)]
            [marshaling_behavior(agile)]
            [static(Windows.Security.EnterpriseData.IFileRevocationManagerStatics, 0x06030000)]
            [threading(both)]
            [version(0x06030000)]
            runtimeclass FileRevocationManager
            {
            }

            [marshaling_behavior(agile)]
            [static(Windows.Security.EnterpriseData.IFileProtectionManagerStatics, 0x0A000000)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass FileProtectionManager
            {
            }

            [marshaling_behavior(agile)]
            [static(Windows.Security.EnterpriseData.IDataProtectionManagerStatics, 0x0A000000)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DataProtectionManager
            {
            }
        }
    }
}
