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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.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(__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
    {
        interface IAsyncAction;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IBuffer;

            interface IInputStream;

            interface IOutputStream;
        }
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Cryptography
        {
            namespace DataProtection
            {
                interface IDataProtectionProvider;

                interface IDataProtectionProviderFactory;

                runtimeclass DataProtectionProvider;
            }
        }
    }
}

// Generic instantiations

// Type definition
namespace Windows
{
    namespace Security
    {
        namespace Cryptography
        {
            namespace DataProtection
            {
                [uuid(09639948-ED22-4270-BD1C-6D72C00F8787)]
                [exclusiveto(Windows.Security.Cryptography.DataProtection.DataProtectionProvider)]
                [version(0x06020000)]
                interface IDataProtectionProvider : IInspectable
                {
                    HRESULT ProtectAsync([in] Windows.Storage.Streams.IBuffer* data, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IBuffer*>** value);
                    HRESULT UnprotectAsync([in] Windows.Storage.Streams.IBuffer* data, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IBuffer*>** value);
                    HRESULT ProtectStreamAsync([in] Windows.Storage.Streams.IInputStream* src, [in] Windows.Storage.Streams.IOutputStream* dest, [out] [retval] Windows.Foundation.IAsyncAction** value);
                    HRESULT UnprotectStreamAsync([in] Windows.Storage.Streams.IInputStream* src, [in] Windows.Storage.Streams.IOutputStream* dest, [out] [retval] Windows.Foundation.IAsyncAction** value);
                }

                [uuid(ADF33DAC-4932-4CDF-AC41-7214333514CA)]
                [version(0x06020000)]
                [exclusiveto(Windows.Security.Cryptography.DataProtection.DataProtectionProvider)]
                interface IDataProtectionProviderFactory : IInspectable
                {
                    HRESULT CreateOverloadExplicit([in] HSTRING protectionDescriptor, [out] [retval] Windows.Security.Cryptography.DataProtection.DataProtectionProvider** value);
                }

                [version(0x06020000)]
                [marshaling_behavior(agile)]
                [activatable(Windows.Security.Cryptography.DataProtection.IDataProtectionProviderFactory, 0x06020000)]
                [activatable(0x06020000)]
                [threading(both)]
                runtimeclass DataProtectionProvider
                {
                    [default] interface Windows.Security.Cryptography.DataProtection.IDataProtectionProvider;
                }
            }
        }
    }
}
