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

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 IClosable;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IContentTypeProvider;

            interface IInputStream;

            interface IOutputStream;

            interface IRandomAccessStream;

            interface IRandomAccessStreamWithContentType;
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Enumeration
        {
            typedef enum DeviceClass DeviceClass;

            typedef enum DeviceWatcherStatus DeviceWatcherStatus;

            typedef enum Panel Panel;

            typedef enum DeviceAccessStatus DeviceAccessStatus;

            interface IEnclosureLocation;

            interface IDeviceInformationUpdate;

            interface IDeviceWatcher;

            interface IDeviceInformationStatics;

            interface IDeviceInformation;

            interface IDeviceAccessChangedEventArgs;

            interface IDeviceAccessInformation;

            interface IDeviceAccessInformationStatics;

            runtimeclass DeviceThumbnail;

            runtimeclass EnclosureLocation;

            runtimeclass DeviceInformationUpdate;

            runtimeclass DeviceInformationCollection;

            runtimeclass DeviceWatcher;

            runtimeclass DeviceInformation;

            runtimeclass DeviceAccessChangedEventArgs;

            runtimeclass DeviceAccessInformation;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Devices
    {
        namespace Enumeration
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Enumeration.DeviceInformation*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Enumeration.DeviceInformation*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Enumeration.DeviceInformation*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceInformation*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceInformationCollection*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceThumbnail*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceAccessInformation*, Windows.Devices.Enumeration.DeviceAccessChangedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceWatcher*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceWatcher*, Windows.Devices.Enumeration.DeviceInformation*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceWatcher*, Windows.Devices.Enumeration.DeviceInformationUpdate*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Enumeration
        {
            [version(0x06020000)]
            enum DeviceClass
            {
                All                   = 0,
                AudioCapture          = 1,
                AudioRender           = 2,
                PortableStorageDevice = 3,
                VideoCapture          = 4,
                [version(0x06030000)]
                ImageScanner          = 5,
                [version(0x06030000)]
                Location              = 6
            };

            [version(0x06020000)]
            enum DeviceWatcherStatus
            {
                Created              = 0,
                Started              = 1,
                EnumerationCompleted = 2,
                Stopping             = 3,
                Stopped              = 4,
                Aborted              = 5
            };

            [version(0x06020000)]
            enum Panel
            {
                Unknown = 0,
                Front   = 1,
                Back    = 2,
                Top     = 3,
                Bottom  = 4,
                Left    = 5,
                Right   = 6
            };

            [version(0x06030000)]
            enum DeviceAccessStatus
            {
                Unspecified    = 0,
                Allowed        = 1,
                DeniedByUser   = 2,
                DeniedBySystem = 3
            };

            [exclusiveto(Windows.Devices.Enumeration.EnclosureLocation)]
            [uuid(42340A27-5810-459C-AABB-C65E1F813ECF)]
            [version(0x06020000)]
            interface IEnclosureLocation : IInspectable
            {
                [propget] HRESULT InDock([out] [retval] boolean* value);
                [propget] HRESULT InLid([out] [retval] boolean* value);
                [propget] HRESULT Panel([out] [retval] Windows.Devices.Enumeration.Panel* value);
            }

            [exclusiveto(Windows.Devices.Enumeration.DeviceInformationUpdate)]
            [uuid(8F315305-D972-44B7-A37E-9E822C78213B)]
            [version(0x06020000)]
            interface IDeviceInformationUpdate : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, IInspectable*>** value);
            }

            [exclusiveto(Windows.Devices.Enumeration.DeviceWatcher)]
            [uuid(C9EAB97D-8F6B-4F96-A9F4-ABC814E22271)]
            [version(0x06020000)]
            interface IDeviceWatcher : IInspectable
            {
                [eventadd] HRESULT Added([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceWatcher*, Windows.Devices.Enumeration.DeviceInformation*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT Added([in] EventRegistrationToken token);
                [eventadd] HRESULT Updated([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceWatcher*, Windows.Devices.Enumeration.DeviceInformationUpdate*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT Updated([in] EventRegistrationToken token);
                [eventadd] HRESULT Removed([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceWatcher*, Windows.Devices.Enumeration.DeviceInformationUpdate*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT Removed([in] EventRegistrationToken token);
                [eventadd] HRESULT EnumerationCompleted([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceWatcher*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT EnumerationCompleted([in] EventRegistrationToken token);
                [eventadd] HRESULT Stopped([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceWatcher*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT Stopped([in] EventRegistrationToken token);
                [propget] HRESULT Status([out] [retval] Windows.Devices.Enumeration.DeviceWatcherStatus* status);
                HRESULT Start();
                HRESULT Stop();
            }

            [exclusiveto(Windows.Devices.Enumeration.DeviceInformation)]
            [uuid(C17F100E-3A46-4A78-8013-769DC9B97390)]
            [version(0x06020000)]
            interface IDeviceInformationStatics : IInspectable
            {
                [overload("CreateFromIdAsync")] HRESULT CreateFromIdAsync([in] HSTRING deviceId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceInformation*>** asyncOp);
                [overload("CreateFromIdAsync")] HRESULT CreateFromIdAsyncAdditionalProperties([in] HSTRING deviceId, [in] Windows.Foundation.Collections.IIterable<HSTRING>* additionalProperties, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceInformation*>** asyncOp);
                [overload("FindAllAsync")] HRESULT FindAllAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceInformationCollection*>** asyncOp);
                [default_overload] [overload("FindAllAsync")] HRESULT FindAllAsyncDeviceClass([in] Windows.Devices.Enumeration.DeviceClass deviceClass, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceInformationCollection*>** asyncOp);
                [overload("FindAllAsync")] HRESULT FindAllAsyncAqsFilter([in] HSTRING aqsFilter, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceInformationCollection*>** asyncOp);
                [overload("FindAllAsync")] HRESULT FindAllAsyncAqsFilterAndAdditionalProperties([in] HSTRING aqsFilter, [in] Windows.Foundation.Collections.IIterable<HSTRING>* additionalProperties, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceInformationCollection*>** asyncOp);
                [overload("CreateWatcher")] HRESULT CreateWatcher([out] [retval] Windows.Devices.Enumeration.DeviceWatcher** watcher);
                [default_overload] [overload("CreateWatcher")] HRESULT CreateWatcherDeviceClass([in] Windows.Devices.Enumeration.DeviceClass deviceClass, [out] [retval] Windows.Devices.Enumeration.DeviceWatcher** watcher);
                [overload("CreateWatcher")] HRESULT CreateWatcherAqsFilter([in] HSTRING aqsFilter, [out] [retval] Windows.Devices.Enumeration.DeviceWatcher** watcher);
                [overload("CreateWatcher")] HRESULT CreateWatcherAqsFilterAndAdditionalProperties([in] HSTRING aqsFilter, [in] Windows.Foundation.Collections.IIterable<HSTRING>* additionalProperties, [out] [retval] Windows.Devices.Enumeration.DeviceWatcher** watcher);
            }

            [exclusiveto(Windows.Devices.Enumeration.DeviceInformation)]
            [uuid(ABA0FB95-4398-489D-8E44-E6130927011F)]
            [version(0x06020000)]
            interface IDeviceInformation : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT Name([out] [retval] HSTRING* value);
                [propget] HRESULT IsEnabled([out] [retval] boolean* value);
                [propget] HRESULT IsDefault([out] [retval] boolean* value);
                [propget] HRESULT EnclosureLocation([out] [retval] Windows.Devices.Enumeration.EnclosureLocation** value);
                [propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, IInspectable*>** value);
                HRESULT Update([in] Windows.Devices.Enumeration.DeviceInformationUpdate* updateInfo);
                HRESULT GetThumbnailAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceThumbnail*>** asyncOp);
                HRESULT GetGlyphThumbnailAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.DeviceThumbnail*>** asyncOp);
            }

            [exclusiveto(Windows.Devices.Enumeration.DeviceAccessChangedEventArgs)]
            [uuid(DEDA0BCC-4F9D-4F58-9DBA-A9BC800408D5)]
            [version(0x06030000)]
            interface IDeviceAccessChangedEventArgs : IInspectable
            {
                [propget] HRESULT Status([out] [retval] Windows.Devices.Enumeration.DeviceAccessStatus* value);
            }

            [exclusiveto(Windows.Devices.Enumeration.DeviceAccessInformation)]
            [uuid(0BAA9A73-6DE5-4915-8DDD-9A0554A6F545)]
            [version(0x06030000)]
            interface IDeviceAccessInformation : IInspectable
            {
                [eventadd] HRESULT AccessChanged([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.DeviceAccessInformation*, Windows.Devices.Enumeration.DeviceAccessChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT AccessChanged([in] EventRegistrationToken cookie);
                [propget] HRESULT CurrentStatus([out] [retval] Windows.Devices.Enumeration.DeviceAccessStatus* status);
            }

            [exclusiveto(Windows.Devices.Enumeration.DeviceAccessInformation)]
            [uuid(574BD3D3-5F30-45CD-8A94-724FE5973084)]
            [version(0x06030000)]
            interface IDeviceAccessInformationStatics : IInspectable
            {
                HRESULT CreateFromId([in] HSTRING deviceId, [out] [retval] Windows.Devices.Enumeration.DeviceAccessInformation** value);
                HRESULT CreateFromDeviceClassId([in] GUID deviceClassId, [out] [retval] Windows.Devices.Enumeration.DeviceAccessInformation** value);
                HRESULT CreateFromDeviceClass([in] Windows.Devices.Enumeration.DeviceClass deviceClass, [out] [retval] Windows.Devices.Enumeration.DeviceAccessInformation** value);
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DeviceThumbnail
            {
                [default] interface Windows.Storage.Streams.IRandomAccessStreamWithContentType;
                interface Windows.Storage.Streams.IContentTypeProvider;
                interface Windows.Storage.Streams.IRandomAccessStream;
                interface Windows.Storage.Streams.IOutputStream;
                interface Windows.Foundation.IClosable;
                interface Windows.Storage.Streams.IInputStream;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass EnclosureLocation
            {
                [default] interface Windows.Devices.Enumeration.IEnclosureLocation;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DeviceInformationUpdate
            {
                [default] interface Windows.Devices.Enumeration.IDeviceInformationUpdate;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DeviceInformationCollection
            {
                [default] interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Enumeration.DeviceInformation*>;
                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Enumeration.DeviceInformation*>;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DeviceWatcher
            {
                [default] interface Windows.Devices.Enumeration.IDeviceWatcher;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Devices.Enumeration.IDeviceInformationStatics, 0x06020000)]
            [threading(both)]
            [version(0x06020000)]
            runtimeclass DeviceInformation
            {
                [default] interface Windows.Devices.Enumeration.IDeviceInformation;
            }

            [marshaling_behavior(agile)]
            [version(0x06030000)]
            runtimeclass DeviceAccessChangedEventArgs
            {
                [default] interface Windows.Devices.Enumeration.IDeviceAccessChangedEventArgs;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Devices.Enumeration.IDeviceAccessInformationStatics, 0x06030000)]
            [threading(both)]
            [version(0x06030000)]
            runtimeclass DeviceAccessInformation
            {
                [default] interface Windows.Devices.Enumeration.IDeviceAccessInformation;
            }
        }
    }
}
