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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Networking.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(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Networking
    {
        runtimeclass HostName;
    }
}
namespace Windows
{
    namespace System
    {
        namespace RemoteSystems
        {
            typedef enum RemoteSystemAccessStatus RemoteSystemAccessStatus;

            typedef enum RemoteSystemDiscoveryType RemoteSystemDiscoveryType;

            typedef enum RemoteSystemStatus RemoteSystemStatus;

            typedef enum RemoteSystemStatusType RemoteSystemStatusType;

            interface IRemoteSystem;

            interface IRemoteSystemAddedEventArgs;

            interface IRemoteSystemConnectionRequest;

            interface IRemoteSystemConnectionRequestFactory;

            interface IRemoteSystemDiscoveryTypeFilter;

            interface IRemoteSystemDiscoveryTypeFilterFactory;

            interface IRemoteSystemFilter;

            interface IRemoteSystemKindFilter;

            interface IRemoteSystemKindFilterFactory;

            interface IRemoteSystemKindStatics;

            interface IRemoteSystemRemovedEventArgs;

            interface IRemoteSystemStatics;

            interface IRemoteSystemStatusTypeFilter;

            interface IRemoteSystemStatusTypeFilterFactory;

            interface IRemoteSystemUpdatedEventArgs;

            interface IRemoteSystemWatcher;

            runtimeclass RemoteSystem;

            runtimeclass RemoteSystemAddedEventArgs;

            runtimeclass RemoteSystemConnectionRequest;

            runtimeclass RemoteSystemDiscoveryTypeFilter;

            runtimeclass RemoteSystemKindFilter;

            runtimeclass RemoteSystemKinds;

            runtimeclass RemoteSystemRemovedEventArgs;

            runtimeclass RemoteSystemStatusTypeFilter;

            runtimeclass RemoteSystemUpdatedEventArgs;

            runtimeclass RemoteSystemWatcher;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace System
    {
        namespace RemoteSystems
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.System.RemoteSystems.IRemoteSystemFilter*>;

                interface Windows.Foundation.Collections.IIterator<Windows.System.RemoteSystems.IRemoteSystemFilter*>;

                interface Windows.Foundation.IAsyncOperation<Windows.System.RemoteSystems.RemoteSystem*>;

                interface Windows.Foundation.IAsyncOperation<Windows.System.RemoteSystems.RemoteSystemAccessStatus>;

                interface Windows.Foundation.TypedEventHandler<Windows.System.RemoteSystems.RemoteSystemWatcher*, Windows.System.RemoteSystems.RemoteSystemAddedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.System.RemoteSystems.RemoteSystemWatcher*, Windows.System.RemoteSystems.RemoteSystemRemovedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.System.RemoteSystems.RemoteSystemWatcher*, Windows.System.RemoteSystems.RemoteSystemUpdatedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace System
    {
        namespace RemoteSystems
        {
            [version(0x0A000000)]
            enum RemoteSystemAccessStatus
            {
                Unspecified    = 0,
                Allowed        = 1,
                DeniedByUser   = 2,
                DeniedBySystem = 3
            };

            [version(0x0A000000)]
            enum RemoteSystemDiscoveryType
            {
                Any      = 0,
                Proximal = 1,
                Cloud    = 2
            };

            [version(0x0A000000)]
            enum RemoteSystemStatus
            {
                Unavailable             = 0,
                DiscoveringAvailability = 1,
                Available               = 2,
                Unknown                 = 3
            };

            [version(0x0A000000)]
            enum RemoteSystemStatusType
            {
                Any       = 0,
                Available = 1
            };

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystem)]
            [uuid(ED5838CD-1E10-4A8C-B4A6-4E5FD6F97721)]
            [version(0x0A000000)]
            interface IRemoteSystem : IInspectable
            {
                [propget] HRESULT DisplayName([out] [retval] HSTRING* value);
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT Kind([out] [retval] HSTRING* value);
                [propget] HRESULT Status([out] [retval] Windows.System.RemoteSystems.RemoteSystemStatus* value);
                [propget] HRESULT IsAvailableByProximity([out] [retval] boolean* value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemAddedEventArgs)]
            [uuid(8F39560F-E534-4697-8836-7ABEA151516E)]
            [version(0x0A000000)]
            interface IRemoteSystemAddedEventArgs : IInspectable
            {
                [propget] HRESULT RemoteSystem([out] [retval] Windows.System.RemoteSystems.RemoteSystem** value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemConnectionRequest)]
            [uuid(84ED4104-8D5E-4D72-8238-7621576C7A67)]
            [version(0x0A000000)]
            interface IRemoteSystemConnectionRequest : IInspectable
            {
                [propget] HRESULT RemoteSystem([out] [retval] Windows.System.RemoteSystems.RemoteSystem** value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemConnectionRequest)]
            [uuid(AA0A0A20-BAEB-4575-B530-810BB9786334)]
            [version(0x0A000000)]
            interface IRemoteSystemConnectionRequestFactory : IInspectable
            {
                HRESULT Create([in] Windows.System.RemoteSystems.RemoteSystem* remoteSystem, [out] [retval] Windows.System.RemoteSystems.RemoteSystemConnectionRequest** result);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemDiscoveryTypeFilter)]
            [uuid(42D9041F-EE5A-43DA-AC6A-6FEE25460741)]
            [version(0x0A000000)]
            interface IRemoteSystemDiscoveryTypeFilter : IInspectable
            {
                [propget] HRESULT RemoteSystemDiscoveryType([out] [retval] Windows.System.RemoteSystems.RemoteSystemDiscoveryType* value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemDiscoveryTypeFilter)]
            [uuid(9F9EB993-C260-4161-92F2-9C021F23FE5D)]
            [version(0x0A000000)]
            interface IRemoteSystemDiscoveryTypeFilterFactory : IInspectable
            {
                HRESULT Create([in] Windows.System.RemoteSystems.RemoteSystemDiscoveryType discoveryType, [out] [retval] Windows.System.RemoteSystems.RemoteSystemDiscoveryTypeFilter** result);
            }

            [uuid(4A3BA9E4-99EB-45EB-BA16-0367728FF374)]
            [version(0x0A000000)]
            interface IRemoteSystemFilter : IInspectable
            {
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemKindFilter)]
            [uuid(38E1C9EC-22C3-4EF6-901A-BBB1C7AAD4ED)]
            [version(0x0A000000)]
            interface IRemoteSystemKindFilter : IInspectable
            {
                [propget] HRESULT RemoteSystemKinds([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemKindFilter)]
            [uuid(A1FB18EE-99EA-40BC-9A39-C670AA804A28)]
            [version(0x0A000000)]
            interface IRemoteSystemKindFilterFactory : IInspectable
            {
                HRESULT Create([in] Windows.Foundation.Collections.IIterable<HSTRING>* remoteSystemKinds, [out] [retval] Windows.System.RemoteSystems.RemoteSystemKindFilter** result);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemKinds)]
            [uuid(F6317633-AB14-41D0-9553-796AADB882DB)]
            [version(0x0A000000)]
            interface IRemoteSystemKindStatics : IInspectable
            {
                [propget] HRESULT Phone([out] [retval] HSTRING* value);
                [propget] HRESULT Hub([out] [retval] HSTRING* value);
                [propget] HRESULT Holographic([out] [retval] HSTRING* value);
                [propget] HRESULT Desktop([out] [retval] HSTRING* value);
                [propget] HRESULT Xbox([out] [retval] HSTRING* value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemRemovedEventArgs)]
            [uuid(8B3D16BB-7306-49EA-B7DF-67D5714CB013)]
            [version(0x0A000000)]
            interface IRemoteSystemRemovedEventArgs : IInspectable
            {
                [propget] HRESULT RemoteSystemId([out] [retval] HSTRING* value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystem)]
            [uuid(A485B392-FF2B-4B47-BE62-743F2F140F30)]
            [version(0x0A000000)]
            interface IRemoteSystemStatics : IInspectable
            {
                HRESULT FindByHostNameAsync([in] Windows.Networking.HostName* hostName, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.System.RemoteSystems.RemoteSystem*>** operation);
                [overload("CreateWatcher")] HRESULT CreateWatcher([out] [retval] Windows.System.RemoteSystems.RemoteSystemWatcher** result);
                [overload("CreateWatcher")] HRESULT CreateWatcherWithFilters([in] Windows.Foundation.Collections.IIterable<Windows.System.RemoteSystems.IRemoteSystemFilter*>* filters, [out] [retval] Windows.System.RemoteSystems.RemoteSystemWatcher** result);
                HRESULT RequestAccessAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.System.RemoteSystems.RemoteSystemAccessStatus>** operation);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemStatusTypeFilter)]
            [uuid(0C39514E-CBB6-4777-8534-2E0C521AFFA2)]
            [version(0x0A000000)]
            interface IRemoteSystemStatusTypeFilter : IInspectable
            {
                [propget] HRESULT RemoteSystemStatusType([out] [retval] Windows.System.RemoteSystems.RemoteSystemStatusType* value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemStatusTypeFilter)]
            [uuid(33CF78FA-D724-4125-AC7A-8D281E44C949)]
            [version(0x0A000000)]
            interface IRemoteSystemStatusTypeFilterFactory : IInspectable
            {
                HRESULT Create([in] Windows.System.RemoteSystems.RemoteSystemStatusType remoteSystemStatusType, [out] [retval] Windows.System.RemoteSystems.RemoteSystemStatusTypeFilter** result);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemUpdatedEventArgs)]
            [uuid(7502FF0E-DBCB-4155-B4CA-B30A04F27627)]
            [version(0x0A000000)]
            interface IRemoteSystemUpdatedEventArgs : IInspectable
            {
                [propget] HRESULT RemoteSystem([out] [retval] Windows.System.RemoteSystems.RemoteSystem** value);
            }

            [exclusiveto(Windows.System.RemoteSystems.RemoteSystemWatcher)]
            [uuid(5D600C7E-2C07-48C5-889C-455D2B099771)]
            [version(0x0A000000)]
            interface IRemoteSystemWatcher : IInspectable
            {
                HRESULT Start();
                HRESULT Stop();
                [eventadd] HRESULT RemoteSystemAdded([in] Windows.Foundation.TypedEventHandler<Windows.System.RemoteSystems.RemoteSystemWatcher*, Windows.System.RemoteSystems.RemoteSystemAddedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RemoteSystemAdded([in] EventRegistrationToken token);
                [eventadd] HRESULT RemoteSystemUpdated([in] Windows.Foundation.TypedEventHandler<Windows.System.RemoteSystems.RemoteSystemWatcher*, Windows.System.RemoteSystems.RemoteSystemUpdatedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RemoteSystemUpdated([in] EventRegistrationToken token);
                [eventadd] HRESULT RemoteSystemRemoved([in] Windows.Foundation.TypedEventHandler<Windows.System.RemoteSystems.RemoteSystemWatcher*, Windows.System.RemoteSystems.RemoteSystemRemovedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RemoteSystemRemoved([in] EventRegistrationToken token);
            }

            [marshaling_behavior(agile)]
            [static(Windows.System.RemoteSystems.IRemoteSystemStatics, 0x0A000000)]
            [version(0x0A000000)]
            runtimeclass RemoteSystem
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystem;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemAddedEventArgs
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystemAddedEventArgs;
            }

            [activatable(Windows.System.RemoteSystems.IRemoteSystemConnectionRequestFactory, 0x0A000000)]
            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemConnectionRequest
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystemConnectionRequest;
            }

            [activatable(Windows.System.RemoteSystems.IRemoteSystemDiscoveryTypeFilterFactory, 0x0A000000)]
            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemDiscoveryTypeFilter
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystemDiscoveryTypeFilter;
                interface Windows.System.RemoteSystems.IRemoteSystemFilter;
            }

            [activatable(Windows.System.RemoteSystems.IRemoteSystemKindFilterFactory, 0x0A000000)]
            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemKindFilter
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystemKindFilter;
                interface Windows.System.RemoteSystems.IRemoteSystemFilter;
            }

            [static(Windows.System.RemoteSystems.IRemoteSystemKindStatics, 0x0A000000)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemKinds
            {
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemRemovedEventArgs
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystemRemovedEventArgs;
            }

            [activatable(Windows.System.RemoteSystems.IRemoteSystemStatusTypeFilterFactory, 0x0A000000)]
            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemStatusTypeFilter
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystemStatusTypeFilter;
                interface Windows.System.RemoteSystems.IRemoteSystemFilter;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemUpdatedEventArgs
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystemUpdatedEventArgs;
            }

            [marshaling_behavior(agile)]
            [version(0x0A000000)]
            runtimeclass RemoteSystemWatcher
            {
                [default] interface Windows.System.RemoteSystems.IRemoteSystemWatcher;
            }
        }
    }
}
