//*****************************************************************************
//
// Microsoft Windows Media
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// FileName:            WMNetSourceCreator.idl
//
// Abstract:            
//
//*****************************************************************************

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows Media")
cpp_quote("//  Copyright (C) Microsoft Corporation. All rights reserved")
cpp_quote("//")
cpp_quote("//  Automatically generated by Midl from WMNetSourceCreator.idl")
cpp_quote("//")
cpp_quote("// DO NOT EDIT THIS FILE.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")

import "oaidl.idl";

cpp_quote( "EXTERN_GUID( CLSID_ClientNetManager, 0xCD12A3CE,0x9C42,0x11D2,0xBE,0xED,0x00,0x60,0x08,0x2F,0x20,0x54  );" )
cpp_quote( "EXTERN_GUID( IID_INSNetSourceCreator, 0x0C0E4080,0x9081,0x11d2,0xBE,0xEC,0x00,0x60,0x08,0x2F,0x20,0x54  );" )

interface INSNetSourceCreator;

typedef unsigned __int64    QWORD;

//////////////////////////////////////////////////////////////////////////////
//
// Interface for creating a NetSource plugin.
//
[
    object,
    uuid(0C0E4080-9081-11d2-BEEC-0060082F2054),
    version(1.0),
    pointer_default(unique)
]
interface INSNetSourceCreator : IUnknown
{
    HRESULT Initialize();

    //
    // This method is called to create an instance of the a particular
    // Network Source plugin
    //
    HRESULT CreateNetSource(
        [in] LPCWSTR pszStreamName,
        [in] IUnknown *pMonitor,
        [in] BYTE *pData,
        [in] IUnknown *pUserContext,
        [in] IUnknown *pCallback,
        [in] QWORD qwContext
        );

    //
    // This method returns the namespace node for the properties of the
    // the Network Source plugin that would be used given the
    // provided stream name.
    //
    HRESULT GetNetSourceProperties(
        [in] LPCWSTR pszStreamName,
        [out] IUnknown **ppPropertiesNode
        );

    //
    // Returns part of the Namespace that is used for values that are
    // shared among all Network Source plugins
    //
    HRESULT GetNetSourceSharedNamespace(
        [out] IUnknown **ppSharedNamespace
        );

    HRESULT GetNetSourceAdminInterface(
        [in] LPCWSTR pszStreamName,
        [out] VARIANT *pVal
        );

    //
    // Iterate through the network protocols supported
    //
    HRESULT GetNumProtocolsSupported( 
        [out] DWORD *pcProtocols 
        );

    HRESULT GetProtocolName( 
        [in]  DWORD dwProtocolNum, 
        [out] WCHAR *pwszProtocolName, 
        [in, out] WORD *pcchProtocolName
        );

    HRESULT Shutdown();
};


