//
// 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.Devices.Enumeration.idl";

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        namespace Enumeration
        {
            typedef enum DeviceWatcherStatus DeviceWatcherStatus;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Enumeration
        {
            namespace Pnp
            {
                typedef enum PnpObjectType PnpObjectType;

                interface IPnpObject;

                interface IPnpObjectStatics;

                interface IPnpObjectUpdate;

                interface IPnpObjectWatcher;

                runtimeclass PnpObject;

                runtimeclass PnpObjectCollection;

                runtimeclass PnpObjectUpdate;

                runtimeclass PnpObjectWatcher;
            }
        }
    }
}

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

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

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

                    interface Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.Pnp.PnpObject*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.Pnp.PnpObjectCollection*>;

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

                    interface Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.Pnp.PnpObjectWatcher*, Windows.Devices.Enumeration.Pnp.PnpObject*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.Pnp.PnpObjectWatcher*, Windows.Devices.Enumeration.Pnp.PnpObjectUpdate*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Enumeration
        {
            namespace Pnp
            {
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum PnpObjectType
                {
                    Unknown                      = 0,
                    DeviceInterface              = 1,
                    DeviceContainer              = 2,
                    Device                       = 3,
                    DeviceInterfaceClass         = 4,
                    AssociationEndpoint          = 5,
                    AssociationEndpointContainer = 6,
                    AssociationEndpointService   = 7,
                    [contract(Windows.Foundation.UniversalApiContract, 7.0)]
                    DevicePanel                  = 8,
                    [contract(Windows.Foundation.UniversalApiContract, 19.0)]
                    AssociationEndpointProtocol  = 9
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Devices.Enumeration.Pnp.PnpObject)]
                [uuid(95C66258-733B-4A8F-93A3-DB078AC870C1)]
                interface IPnpObject : IInspectable
                {
                    [propget] HRESULT Type([out] [retval] Windows.Devices.Enumeration.Pnp.PnpObjectType* value);
                    [propget] HRESULT Id([out] [retval] HSTRING* value);
                    [propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, IInspectable*>** value);
                    HRESULT Update([in] Windows.Devices.Enumeration.Pnp.PnpObjectUpdate* updateInfo);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Devices.Enumeration.Pnp.PnpObject)]
                [uuid(B3C32A3D-D168-4660-BBF3-A733B14B6E01)]
                interface IPnpObjectStatics : IInspectable
                {
                    HRESULT CreateFromIdAsync([in] Windows.Devices.Enumeration.Pnp.PnpObjectType type, [in] HSTRING id, [in] Windows.Foundation.Collections.IIterable<HSTRING>* requestedProperties, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.Pnp.PnpObject*>** asyncOp);
                    [overload("FindAllAsync")] HRESULT FindAllAsync([in] Windows.Devices.Enumeration.Pnp.PnpObjectType type, [in] Windows.Foundation.Collections.IIterable<HSTRING>* requestedProperties, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.Pnp.PnpObjectCollection*>** asyncOp);
                    [overload("FindAllAsync")] HRESULT FindAllAsyncAqsFilter([in] Windows.Devices.Enumeration.Pnp.PnpObjectType type, [in] Windows.Foundation.Collections.IIterable<HSTRING>* requestedProperties, [in] HSTRING aqsFilter, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Enumeration.Pnp.PnpObjectCollection*>** asyncOp);
                    [overload("CreateWatcher")] HRESULT CreateWatcher([in] Windows.Devices.Enumeration.Pnp.PnpObjectType type, [in] Windows.Foundation.Collections.IIterable<HSTRING>* requestedProperties, [out] [retval] Windows.Devices.Enumeration.Pnp.PnpObjectWatcher** watcher);
                    [overload("CreateWatcher")] HRESULT CreateWatcherAqsFilter([in] Windows.Devices.Enumeration.Pnp.PnpObjectType type, [in] Windows.Foundation.Collections.IIterable<HSTRING>* requestedProperties, [in] HSTRING aqsFilter, [out] [retval] Windows.Devices.Enumeration.Pnp.PnpObjectWatcher** watcher);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Devices.Enumeration.Pnp.PnpObjectUpdate)]
                [uuid(6F59E812-001E-4844-BCC6-432886856A17)]
                interface IPnpObjectUpdate : IInspectable
                {
                    [propget] HRESULT Type([out] [retval] Windows.Devices.Enumeration.Pnp.PnpObjectType* value);
                    [propget] HRESULT Id([out] [retval] HSTRING* value);
                    [propget] HRESULT Properties([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, IInspectable*>** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Devices.Enumeration.Pnp.PnpObjectWatcher)]
                [uuid(83C95CA8-4772-4A7A-ACA8-E48C42A89C44)]
                interface IPnpObjectWatcher : IInspectable
                {
                    [eventadd] HRESULT Added([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.Pnp.PnpObjectWatcher*, Windows.Devices.Enumeration.Pnp.PnpObject*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT Added([in] EventRegistrationToken token);
                    [eventadd] HRESULT Updated([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.Pnp.PnpObjectWatcher*, Windows.Devices.Enumeration.Pnp.PnpObjectUpdate*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT Updated([in] EventRegistrationToken token);
                    [eventadd] HRESULT Removed([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.Pnp.PnpObjectWatcher*, Windows.Devices.Enumeration.Pnp.PnpObjectUpdate*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT Removed([in] EventRegistrationToken token);
                    [eventadd] HRESULT EnumerationCompleted([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.Pnp.PnpObjectWatcher*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT EnumerationCompleted([in] EventRegistrationToken token);
                    [eventadd] HRESULT Stopped([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Enumeration.Pnp.PnpObjectWatcher*, 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();
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Devices.Enumeration.Pnp.IPnpObjectStatics, Windows.Foundation.UniversalApiContract, 1.0)]
                [threading(both)]
                runtimeclass PnpObject
                {
                    [default] interface Windows.Devices.Enumeration.Pnp.IPnpObject;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass PnpObjectCollection
                {
                    [default] interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Enumeration.Pnp.PnpObject*>;
                    interface Windows.Foundation.Collections.IIterable<Windows.Devices.Enumeration.Pnp.PnpObject*>;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass PnpObjectUpdate
                {
                    [default] interface Windows.Devices.Enumeration.Pnp.IPnpObjectUpdate;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass PnpObjectWatcher
                {
                    [default] interface Windows.Devices.Enumeration.Pnp.IPnpObjectWatcher;
                }
            }
        }
    }
}
