//+-------------------------------------------------------------------------
//
//  Microsoft Windows Media Technologies
//  Copyright (C) Microsoft Corporation. All rights reserved.
//
//  File:         wmsServer.idl
//
//  Contents:     Interface definitions for Admin Interfaces
//  
//--------------------------------------------------------------------------
cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows Media Technologies")
cpp_quote("//  Copyright (C) Microsoft Corporation. All rights reserved.")
cpp_quote("//")
cpp_quote("//  Automatically generated by Midl from WMSServer.idl ")
cpp_quote("//")
cpp_quote("// DO NOT EDIT THIS FILE.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")

import "oaidl.idl";
import "xmldom.idl";
import "WMSNamedValues.idl";
import "WMSPlugin.idl";
import "wmsXMLDOMExtensions.idl";
import "streamcache.idl";

#include "colldispid.h"

cpp_quote( "#ifndef __wmsserver_iid" )
cpp_quote( "#define __wmsserver_iid" )

// Manually generated CLSID.  Do not need a library block to create just this.
cpp_quote( "EXTERN_GUID( CLSID_WMSServerMainImpl,    0x1E62CD49,0x3961,0x11D2,0x9E,0xFC,0x00,0x60,0x97,0xD2,0xD7,0xCF  );" )

cpp_quote( "#include <WMSDefs.h>" )




[
        object,
        uuid(DFC750A9-F846-48be-87AE-79F851C9CD92),
        dual,
        nonextensible,
        helpstring("Contains a collection of root directory paths for enabled data source plug-ins."),
        pointer_default(unique)
]
interface IWMSRootDirectories : IDispatch
{
    COLLECTION_METHODS( BSTR, "Retrieves a specific root directory path from the collection." )
};

//////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(5AC19D62-6057-4431-BE7E-2153FDF91397),
        dual,
        nonextensible,
        helpstring("Contains properties that describe a specific error or warning event for the server or a plug-in."),
        pointer_default(unique)
    ]
    interface IWMSDiagnosticEvent : IDispatch
    {
        typedef [public, uuid(5AC19D63-6057-4431-BE7E-2153FDF91397)] enum WMS_DIAGNOSTIC_EVENT
        {
            WMS_DIAGNOSTIC_EVENT_LIMIT_HIT                  = 0,
            WMS_DIAGNOSTIC_EVENT_PLUGIN_EVENT_LOG_ERROR     = 1,
            WMS_DIAGNOSTIC_EVENT_PLUGIN_EVENT_LOG_WARNING   = 2,
            WMS_DIAGNOSTIC_EVENT_SERVER_EVENT_LOG_ERROR     = 3,
            WMS_DIAGNOSTIC_EVENT_SERVER_EVENT_LOG_WARNING   = 4
        } WMS_DIAGNOSTIC_EVENT;

            [propget, id(DISPID_VALUE), helpstring("Retrieves the name of the limit or plug-in associated with the event.")] HRESULT
        Name([out, retval] BSTR *pVal);
            [propget, id(1), helpstring("Retrieves an enumeration value indicating the event type.")] HRESULT
        Type([out, retval] WMS_DIAGNOSTIC_EVENT * pVal);
            [propget, id(4), helpstring("Retrieves the name of the publishing point that raised the event.")] HRESULT
        PublishingPointName([out, retval] BSTR *pVal);
            [propget, id(3), helpstring("Retrieves the date and time of the event.")] HRESULT
        Time([out, retval] DATE *pVal);
            [propget, id(5), helpstring("Retrieves the number of times the event has occurred.")] HRESULT
        NumberOfOccurrences([out, retval] long *pVal);
            [propget, id(2), helpstring("Retrieves the text message associated with the event.")] HRESULT
        AdditionalInfo([out, retval] BSTR *pVal);
            [propget, id(6), helpstring("Retrieves the HRESULT return code associated with the event.")] HRESULT
        ErrorCode([out, retval] long *pVal);
   };

//////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(5AC19D61-6057-4431-BE7E-2153FDF91397),
        dual,
        nonextensible,
        helpstring("Contains a collection of IWMSDiagnosticEvent objects."),
        pointer_default(unique)
    ]
    interface IWMSDiagnosticEvents : IDispatch
    {
        // Standard collection Methods & Properties: Item, Count & _NewEnum
        COLLECTION_METHODS( IWMSDiagnosticEvent*, "Retrieves an IWMSDiagnosticEvent object from the collection." )
            [id(4), helpstring("Removes all IWMSDiagnosticEvent objects from the collection.")] HRESULT
        RemoveAll( );
    };



//////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(4124B8B3-BCE4-41c8-B49A-DA98C1401D3B),
        dual,
        nonextensible,
        helpstring("Contains properties that describe a directory or multimedia file."),
        pointer_default(unique)
    ]
    interface IWMSFileDescription : IDispatch
    {
        typedef [public, uuid(4124B8B4-BCE4-41c8-B49A-DA98C1401D3B)] enum WMS_FILE_TYPE
        {
            WMS_FILE_UNSPECIFIED    = 0,
            WMS_FILE_DIRECTORY      = 1,
            WMS_FILE_MEDIA          = 2,
            WMS_FILE_PLAYLIST       = 3,
            WMS_FILE_STREAM_FORMAT  = 4,
            WMS_FILE_REMOTE_FILE    = 5
        } WMS_FILE_TYPE;

            [propget, id(DISPID_VALUE), helpstring("Retrieves the name of the directory or multimedia file.")] HRESULT
        Name([out, retval] BSTR *pVal);
            [propget, id(1), helpstring("Retrieves an enumeration value that specifies the type of the multimedia file or directory.")] HRESULT
        Type([out, retval] WMS_FILE_TYPE* pVal);
   };

//////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(4124B8B2-BCE4-41c8-B49A-DA98C1401D3B),
        dual,
        nonextensible,
        helpstring("Contains a collection of IWMSFileDescription objects."),
        pointer_default(unique)
    ]
    interface IWMSFileDescriptions : IDispatch
    {
        // Standard collection Methods & Properties: Item, Count & _NewEnum
        COLLECTION_METHODS( IWMSFileDescription*, "Retrieves an IWMSFileDescription object from the collection." )
            [id(1), helpstring("Removes an IWMSFileDescription object from the collection.") ] HRESULT 
        Delete ([in] const VARIANT varIndex);
            [id(2), helpstring("Creates a new directory.") ] HRESULT 
        CreateDataSourceDirectory ([in] BSTR bstrName );
    };


//////////////////////////////////////////////////////////////////////////////

    [
        object,
        uuid(3FC1A813-759F-4441-BA48-21889EC8AC20),
        dual,
        nonextensible,
        helpstring("Contains a collection of IP addresses that are available for use by a control protocol plug-in."),
        pointer_default(unique)
    ]
    interface IWMSAvailableIPAddresses : IDispatch
    {
        // Standard collection Methods & Properties: Item, Count, length & _NewEnum
        COLLECTION_METHODS( BSTR, "Retrieves a specific IP address, by index, from the collection." )
    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(517758ec-603c-4b98-82c1-4b2fa7787166),
        dual,
        nonextensible,
        helpstring("Contains a collection of plug-ins."),
        pointer_default(unique)
    ]
    interface IWMSPlugins : IDispatch
    {
        // Standard collection Methods & Properties: Item, Count & _NewEnum
        COLLECTION_METHODS( IWMSPlugin*, "Retrieves a plug-in from the collection." )

            [id(4), helpstring("Removes a plug-in from the collection.")] HRESULT
        Remove([in] VARIANT varIndex);
            [id(5), helpstring("Updates the list of plug-ins in the collection to reflect the plug-ins that are registered for use by the server.")] HRESULT
        Refresh();
            [id(6), helpstring("Creates a duplicate instance of a specific plug-in.")] HRESULT
        Clone( [in] BSTR bstrDestName, [in] IWMSPlugin *pSrcPlugin, [out,retval] IWMSPlugin **pDestPlugin );
            [propget, id(7), helpstring("Retrieves the category name for the plug-in collection.")] HRESULT
        Category([out, retval] BSTR *pVal);
   };

//////////////////////////////////////////////////////////////////////////////

    [
        object,
        uuid(517758e8-603c-4b98-82c1-4b2fa7787166),
        dual,
        nonextensible,
        helpstring("Contains properties that describe content that has been cached by a cache plug-in."),
        pointer_default(unique)
    ]
    interface IWMSCacheItem : IDispatch
    {
            [propget, id(0), helpstring("Retrieves the absolute URL for the cached content.")] HRESULT
        OriginUrl( [out,retval] BSTR *pOriginUrl);

            [propget, id(2), helpstring("Retrieves the size of the content in bytes.")] HRESULT
        ContentSize( [out,retval] VARIANT *pContentSize );
    };

//////////////////////////////////////////////////////////////////////////////

    [
        object,
        uuid(517758e9-603c-4b98-82c1-4b2fa7787166),
        dual,
        nonextensible,
        helpstring("Contains a collection of IWMSCacheItem objects."),
        pointer_default(unique)
    ]
    interface IWMSCacheItems : IDispatch
    {
        // Standard collection Methods & Properties: Item, Count & _NewEnum
        COLLECTION_METHODS( IWMSCacheItem*, "Retrieves an IWMSCacheItem object from the collection." )

            [id(3), helpstring("Removes an IWMSCacheItem object from the collection.")] HRESULT
        Delete([in] VARIANT varIndex);

            [id(4), helpstring("Removes all IWMSCacheItem objects from the collection.")] HRESULT
        DeleteAll( );
    };

//////////////////////////////////////////////////////////////////////////////

    [
        object,
        uuid(517758eb-603c-4b98-82c1-4b2fa7787166),
        dual,
        nonextensible,
        helpstring("Contains properties and methods to manage a cache or proxy plug-in."),
        pointer_default(unique)
    ]
    interface IWMSCacheProxyPlugin : IWMSPlugin
    {
            [id(20), helpstring("Fills the cache with content.")] HRESULT
        PreStuff( [in] BSTR OriginURL, 
                  [in,defaultvalue("")] BSTR SourcePath, 
                  [in,defaultvalue(-1)] long lExpiration,
                  [in,defaultvalue(0)] long lBandwidth,
                  [in,defaultvalue(0)] long lRemoteEventFlags
                  );
        
            [propget, id(21), helpstring("Retrieves a collection of IWMSCacheItem objects.")] HRESULT
        CacheItems( [out,retval] IWMSCacheItems* *ppVal );
    };



/////////////////////////////////////////////////////////////////////////////
    typedef [public, uuid(60f2ee55-dcaa-4cb6-a6d2-12bc23ac9df0)] enum WMS_CLIENT_STATUS
    {
        WMS_CLIENT_DISCONNECTED     = 0x0000,
        WMS_CLIENT_IDLE             = 0x0001,
        WMS_CLIENT_OPEN             = 0x0002,
        WMS_CLIENT_STREAMING        = 0x0003,
    } WMS_CLIENT_STATUS;


//////////////////////////////////////////////////////////////////////////////

    [
        object,
        uuid(60f2ee54-dcaa-4cb6-a6d2-12bc23ac9df0),
        dual,
        nonextensible,
        helpstring("Contains properties that describe an outgoing distribution connection client."),
        pointer_default(unique)
    ]
    interface IWMSOutgoingDistributionConnection : IDispatch
    {
            [propget, id(0), helpstring("Retrieves a unique value identifying the client.")] HRESULT
        ID([out, retval] long *pVal);

            [propget, id(2), helpstring("Retrieves the network address of the client.")] HRESULT
        NetworkAddress([out, retval] BSTR *pVal);
        
            [propget, id(3), helpstring("Retrieves the client's requested playlist object.")] HRESULT
        RequestedPlaylist([out, retval] IWMSPlaylist **pVal);

            [propget, id(4), helpstring("Retrieves the URL that the client used to request its distribution connection.")] HRESULT
        RequestedURL([out, retval] BSTR *pVal);
        
            [propget, id(5), helpstring("Retrieves the physical URL of the content being streamed to the client.")] HRESULT
        ResolvedURL([out, retval] BSTR *pVal);
        
            [propget, id(6), helpstring("Retrieves the status of the client.")] HRESULT
        Status([out, retval] WMS_CLIENT_STATUS *pVal);
        
            [propget, id(7), helpstring("Retrieves the authenticated name of the client.")] HRESULT
        UserName([out, retval] BSTR *pVal);
        
            [propget, id(8), helpstring("Retrieves the client's wrapper playlist object.")] HRESULT
        WrapperPlaylist([out, retval] IWMSPlaylist **pVal);

            [propget, id(9), helpstring("Retrieves the port number of the client.")] HRESULT
        Port([out, retval] long *pVal);
        
    };

//////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(60f2ee53-dcaa-4cb6-a6d2-12bc23ac9df0),
        dual,
        nonextensible,
        helpstring("Contains a collection of IWMSOutgoingDistributionConnection objects."),
        pointer_default(unique)
    ]
    interface IWMSOutgoingDistributionConnections : IDispatch
    {
        // Standard collection Methods & Properties: Item, Count & _NewEnum
        COLLECTION_METHODS( IWMSOutgoingDistributionConnection*, "Retrieves an IWMSOutgoingDistributionConnection object from the collection." )
        
            [id(2), helpstring("Updates the list of IWMSOutgoingDistributionConnection objects in the collection.")] HRESULT
        Refresh();
        
            [id(3), helpstring("Disconnects a specific outgoing distribution connection client from the server and removes it from the collection.")] HRESULT
        Remove([in] VARIANT varIndex);
            [id(4), helpstring("Disconnects all outgoing distribution connection clients from the server and removes them from the collection.")] HRESULT
        RemoveAll();
    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(18812736-4BEC-11D2-BF25-00805FBE84A6),
        dual,
        nonextensible,
        helpstring("Contains properties that describe a connected player."),
        pointer_default(unique)
    ]
    interface IWMSPlayer : IDispatch
    {
            [propget, id(0), helpstring("Retrieves a unique value identifying the player.")] HRESULT
        ID([out, retval] long *pVal);

            [propget, id(2), helpstring("Retrieves the network address of the player.")] HRESULT
        NetworkAddress([out, retval] BSTR *pVal);
        
            [propget, id(3), helpstring("Retrieves the player's requested playlist object.")] HRESULT
        RequestedPlaylist([out, retval] IWMSPlaylist **pVal);

            [propget, id(4), helpstring("Retrieves the URL that the player used to request its connection.")] HRESULT
        RequestedURL([out, retval] BSTR *pVal);
        
            [propget, id(5), helpstring("Retrieves the URL of the content being streamed to the player.")] HRESULT
        ResolvedURL([out, retval] BSTR *pVal);

            [propget, id(6), helpstring("Retrieves the status of the player.")] HRESULT
        Status([out, retval] WMS_CLIENT_STATUS *pVal);
        
            [propget, id(7), helpstring("Retrieves the authenticated name of the player.")] HRESULT
        UserName([out, retval] BSTR *pVal);
        
            [propget, id(8), helpstring("Retrieves the player's wrapper playlist object.")] HRESULT
        WrapperPlaylist([out, retval] IWMSPlaylist **pVal);

            [propget, id(9), helpstring("Retrieves the port number of the player.")] HRESULT
        Port([out, retval] long *pVal);
        
    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(18812738-4BEC-11D2-BF25-00805FBE84A6),
        dual,
        nonextensible,
        helpstring("Contains a collection of IWMSPlayer objects."),
        pointer_default(unique)
    ]
    interface IWMSPlayers : IDispatch
    {
        // Standard collection Methods & Properties: Item, Count & _NewEnum
        COLLECTION_METHODS( IWMSPlayer*, "Retrieves a specific IWMSPlayer object from the collection." )

            [id(2), helpstring("Updates the list of IWMSPlayer objects in the collection.")] HRESULT
        Refresh();
        
            [id(3), helpstring("Disconnects a specific player from the server and removes it from the collection.")] HRESULT
        Remove([in] VARIANT varIndex);
            [id(4), helpstring("Disconnects all players from the server and removes them from the collection.")] HRESULT
        RemoveAll();
    };


/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(638DFA30-1054-48bd-B030-C3DA1FC18154),
        dual,
        nonextensible,
        helpstring("Contains properties that provide real-time counter values for a publishing point."),
        pointer_default(unique)
    ]
    interface IWMSPublishingPointCurrentCounters : IDispatch
    {
            [propget, id(0), helpstring("Retrieves the number of players connected to the publishing point.")] HRESULT
        ConnectedPlayers([out, retval] long *pVal);

            [propget, id(2), helpstring("Retrieves the number of players being streamed content using the HTTP protocol.")] HRESULT
        StreamingHTTPPlayers([out, retval] long *pVal);

            [propget, id(3), helpstring("Retrieves the number of players being streamed content using the MMS protocol.")] HRESULT
        StreamingMMSPlayers([out, retval] long *pVal);

            [propget, id(5), helpstring("Retrieves the bandwidth, in Kbps, allocated for outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionAllocatedBandwidth([out, retval] long *pVal);

            [propget, id(6), helpstring("Retrieves the number of outgoing distribution connection clients connected to the publishing point.")] HRESULT
        OutgoingDistributionConnections([out, retval] long *pVal);

            [propget, id(7), helpstring("Retrieves the bandwidth, in Kbps, allocated for player connections.")] HRESULT
        PlayerAllocatedBandwidth([out, retval] long *pVal);

            [propget, id(8), helpstring("Retrieves the number of players being streamed content using the RTSP protocol.")] HRESULT
        StreamingRTSPPlayers([out, retval] long *pVal);

            [propget, id(9), helpstring("Retrieves the number of players being streamed content.")] HRESULT
        StreamingPlayers([out, retval] long *pVal);

           [propget, id(30), helpstring("Retrieves an array that contains all of the current counters.")] HRESULT
        AllCounters([out,retval] SAFEARRAY(VARIANT) *ppsaCounters);

    };

/////////////////////////////////////////////////////////////////////////////

    [
        object,
        uuid(43B20CC5-CA36-4e7b-ADAF-C9C60D00BB0E),
        dual,
        nonextensible,
        helpstring("Contains properties that provide peak counter values for a publishing point."),
        pointer_default(unique)
    ]
    interface IWMSPublishingPointPeakCounters : IDispatch
    {
            [propget, id(0), helpstring("Retrieves the peak number of players that have been connected.")] HRESULT
        ConnectedPlayers([out, retval] long *pVal);

            [propget, id(2), helpstring("Retrieves the peak number of outgoing distribution connection clients that have been connected.")] HRESULT
        OutgoingDistributionConnections([out, retval] long *pVal);

            [propget, id(3), helpstring("Retrieves the peak bandwidth, in Kbps, that has been allocated for outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionAllocatedBandwidth([out, retval] long *pVal);

            [propget, id(4), helpstring("Retrieves the peak bandwidth, in Kbps, that has been allocated for player connections.")] HRESULT
        PlayerAllocatedBandwidth([out, retval] long *pVal);

            [propget, id(5), helpstring("Retrieves the date and time at which the publishing point started monitoring the peak counters.")] HRESULT
        CountersStartTime([out, retval] DATE *pVal );
        
            [propget, id(6), helpstring("Retrieves the peak number of players that have been streamed content.")] HRESULT
        StreamingPlayers([out, retval] long *pVal);

            [id(8), helpstring("Resets all of the peak counters to the current values.")] HRESULT
        Reset();
        
            [propget, id(30), helpstring("Retrieves an array that contains all of the peak counters.")] HRESULT
        AllCounters([out,retval] SAFEARRAY(VARIANT) *ppsaCounters);

    };

/////////////////////////////////////////////////////////////////////////////

    [
        object,
        uuid(6CD5BC19-35FD-4501-A953-FEB57AAE9C13),
        dual,
        nonextensible,
        helpstring("Contains properties to retrieve and manage publishing point limits."),
        pointer_default(unique)
    ]
    interface IWMSPublishingPointLimits : IDispatch
    {
            [propget, id(0), helpstring("Specifies or retrieves the maximum number of players that can be connected.")] HRESULT
        ConnectedPlayers([out, retval] long *pVal);
            [propput, id(0), helpstring("Specifies or retrieves the maximum number of players that can be connected.")] HRESULT
        ConnectedPlayers([in] long Val);

            [propget, id(3), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionBandwidth([out, retval] long *pVal);
            [propput, id(3), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionBandwidth([in] long Val);

            [propget, id(4), helpstring("Specifies or retrieves the maximum number of outgoing distribution connection clients that can be connected.")] HRESULT
        OutgoingDistributionConnections([out, retval] long *pVal);
            [propput, id(4), helpstring("Specifies or retrieves the maximum number of outgoing distribution connection clients that can be connected.")] HRESULT
        OutgoingDistributionConnections([in] long Val);

            [propget, id(5), helpstring("Specifies or retrieves the maximum allocated bandwidth, in Kbps, permitted for an outgoing distribution connection client.")] HRESULT
        PerOutgoingDistributionConnectionBandwidth([out, retval] long *pVal);
            [propput, id(5), helpstring("Specifies or retrieves the maximum allocated bandwidth, in Kbps, permitted for an outgoing distribution connection client.")] HRESULT
        PerOutgoingDistributionConnectionBandwidth([in] long Val);

            [propget, id(6), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all player connections.")] HRESULT
        PlayerBandwidth([out, retval] long *pVal);
            [propput, id(6), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all player connections.")] HRESULT
        PlayerBandwidth([in] long Val);

            [propget, id(7), helpstring("Specifies or retrieves the maximum allocated bandwidth, in Kbps, permitted for a player connection.")] HRESULT
        PerPlayerConnectionBandwidth([out, retval] long *pVal);
            [propput, id(7), helpstring("Specifies or retrieves the maximum allocated bandwidth, in Kbps, permitted for a player connection.")] HRESULT
        PerPlayerConnectionBandwidth([in] long Val);

            [propget, id(8), helpstring("Specifies or retrieves the maximum content delivery rate that a player can request that content be delivered to its cache.")] HRESULT
        PlayerCacheDeliveryRate([out, retval] long *pVal);
            [propput, id(8), helpstring("Specifies or retrieves the maximum content delivery rate that a player can request that content be delivered to its cache.")] HRESULT
        PlayerCacheDeliveryRate([in] long Val);

            [propget, id(9), helpstring("Specifies or retrieves the maximum number of data packets that can be buffered before error correction is applied.")] HRESULT
        FECPacketSpan([out, retval] long *pVal);
            [propput, id(9), helpstring("Specifies or retrieves the maximum number of data packets that can be buffered before error correction is applied.")] HRESULT
        FECPacketSpan([in] long Val);

            [propget, id(10), helpstring("Specifies or retrieves the maxiumum amount of bandwidth, in Kbps, that a player can use for accelerated initial buffering of multimedia content.")] HRESULT
        PerPlayerRapidStartBandwidth([out, retval] long *pVal);
            [propput, id(10), helpstring("Specifies or retrieves the maxiumum amount of bandwidth, in Kbps, that a player can use for accelerated initial buffering of multimedia content.")] HRESULT
        PerPlayerRapidStartBandwidth([in] long Val);
    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(240D0C87-309A-4126-BF14-B52A622E95A9),
        dual,
        nonextensible,
        helpstring("Contains properties that provide total counter values for a publishing point."),
        pointer_default(unique)
    ]
    interface IWMSPublishingPointTotalCounters : IDispatch
    {
            [propget, id(0), helpstring("Retrieves the total number of players that have been connected.")] HRESULT
        ConnectedPlayers([out, retval] long *pVal);

            [propget, id(2), helpstring("Retrieves the total number of outgoing distribution connection clients that have been connected.")] HRESULT
        OutgoingDistributionConnections([out, retval] long *pVal);

            [propget, id(3), helpstring("Retrieves the total number of late read operations.")] HRESULT
        LateReads([out, retval] long *pVal);

            [propget, id(5), helpstring("Retrieves the total number of bytes that have been sent to outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionBytesSent([out, retval] VARIANT *pVal);

            [propget, id(6), helpstring("Retrieves the total number of bytes that have been sent to players.")] HRESULT
        PlayerBytesSent([out, retval] VARIANT *pVal);

            [propget, id(7), helpstring("Retrieves the date and time that the publishing point started monitoring the total counters.")] HRESULT
        CountersStartTime([out, retval] DATE *pVal);

            [propget, id(8), helpstring("Retrieves the total number of connections that have been denied.")] HRESULT
        StreamDenials([out, retval] long *pVal);

            [propget, id(9), helpstring("Retrieves the total number of errors per seconds due to packets being dropped.")] HRESULT
        StreamErrors([out, retval] long *pVal);

            [propget, id(10), helpstring("Retrieves the total number of players that have been streamed data.")] HRESULT
        StreamingPlayers([out, retval] long *pVal);

            [propget, id(11), helpstring("Retrieves the total number of connections that have been terminated.")] HRESULT
        StreamTerminations([out, retval] long *pVal);

            [propget, id(12), helpstring("Retrieves the total number of bytes that have been read from the publishing point.")] HRESULT
        FileBytesRead([out, retval] VARIANT *pVal);

            [propget, id(13), helpstring("Retrieves the total number of advertisements that have been streamed from playlists.")] HRESULT
        Advertisements([out, retval] long *pVal);

            [id(25), helpstring("Resets all of the total counters to the current values.")] HRESULT
        Reset();        
        
            [propget, id(30), helpstring("Retrieves an array that contains all of the total counters.")] HRESULT
        AllCounters([out,retval] SAFEARRAY(VARIANT) *ppsaCounters);

    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(DAA2A1BB-BC91-438d-BF33-BDE11D2348D5),
        dual,
        nonextensible,
        helpstring("Contains properties that provide total counter values for the server."),
        pointer_default(unique)
    ]
    interface IWMSServerTotalCounters : IDispatch
    {
            [propget, id(0), helpstring("Retrieves the total number of players that have been connected.")] HRESULT
        ConnectedPlayers([out, retval] long *pVal);

             [propget, id(2), helpstring("Retrieves the total number of outgoing distribution connection clients that have been connected.")] HRESULT
        OutgoingDistributionConnections([out, retval] long *pVal);

           [propget, id(3), helpstring("Retrieves the total number of late read operations.")] HRESULT
        LateReads([out, retval] long *pVal);

            [propget, id(5), helpstring("Retrieves the total number of bytes that have been sent to outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionBytesSent([out, retval] VARIANT *pVal);

            [propget, id(6), helpstring("Retrieves the total number of bytes that have been sent to players.")] HRESULT
        PlayerBytesSent([out, retval] VARIANT *pVal);

            [propget, id(7), helpstring("Retrieves the date and time that the server started monitoring the total counters.")] HRESULT
        CountersStartTime([out, retval] DATE *pVal);

            [propget, id(8), helpstring("Retrieves the total number of connections that have been denied.")] HRESULT
        StreamDenials([out, retval] long *pVal);

            [propget, id(9), helpstring("Retrieves the total number of errors per seconds due to packets being dropped.")] HRESULT
        StreamErrors([out, retval] long *pVal);

            [propget, id(10), helpstring("Retrieves the total number of players that have been streamed data.")] HRESULT
        StreamingPlayers([out, retval] long *pVal);

            [propget, id(11), helpstring("Retrieves the total number of connections that have been terminated.")] HRESULT
        StreamTerminations([out, retval] long *pVal);

            [propget, id(12), helpstring("Retrieves the total number of UDP resend requests received.")] HRESULT
        UDPResendRequests([out, retval] long *pVal);

            [propget, id(13), helpstring("Retrieves the total number of UDP resend requests processed.")] HRESULT
        UDPResendsSent([out, retval] long *pVal);

           [propget, id(14), helpstring("Retrieves the total number of late send operations.")] HRESULT
        LateSends([out, retval] long *pVal);

           [propget, id(15), helpstring("Retrieves the total number of advertisements that have been streamed from playlists.")] HRESULT
        Advertisements([out, retval] long *pVal);

            [id(25), helpstring("Resets all of the total counters to the current values.")] HRESULT
        Reset();
        
            [propget, id(30), helpstring("Retrieves an array that contains all of the total counters.")] HRESULT
        AllCounters([out,retval] SAFEARRAY(VARIANT) *ppsaCounters);

    };


/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(1881273F-4BEC-11D2-BF25-00805FBE84A6),
        dual,
        nonextensible,
        helpstring("Contains properties and methods to manage a publishing point."),
        pointer_default(unique)
    ]
    interface IWMSPublishingPoint : IDispatch
    {
        typedef [public, uuid(3E52E0EC-72A7-11D2-BF2F-00805FBE84A6)] enum WMS_PUBLISHING_POINT_TYPE
        {
            WMS_PUBLISHING_POINT_TYPE_ON_DEMAND                = 1,
            WMS_PUBLISHING_POINT_TYPE_BROADCAST                = 2,
            WMS_PUBLISHING_POINT_TYPE_CACHE_PROXY_ON_DEMAND    = 3,            
            WMS_PUBLISHING_POINT_TYPE_CACHE_PROXY_BROADCAST    = 4
        } WMS_PUBLISHING_POINT_TYPE;

        typedef [public, uuid(3E52E0EF-72A7-11D2-BF2F-00805FBE84A6)] enum WMS_PUBLISHING_POINT_STATUS
        {
            WMS_PUBLISHING_POINT_RUNNING                = 0x0,
            WMS_PUBLISHING_POINT_ERROR                  = 0x1,
            WMS_PUBLISHING_POINT_ERROR_CRITICAL         = 0x2
        } WMS_PUBLISHING_POINT_STATUS;

            [propget, id(1), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point can receive client connections.")] HRESULT
        AllowClientsToConnect([out, retval] VARIANT_BOOL *pVal);
            [propput, id(1), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point can receive client connections.")] HRESULT
        AllowClientsToConnect([in] VARIANT_BOOL newVal);

            [propget, id(2), helpstring("Retrieves a collection of current counters for the publishing point.")] HRESULT 
        CurrentCounters([out, retval] IWMSPublishingPointCurrentCounters * *pVal);

            [propget, id(3), helpstring("Retrieves a collection of event authorization and notification plug-ins for the publishing point.")] HRESULT
        EventHandlers([out, retval] IWMSPlugins** pVal);

            [propget, id(4), helpstring("Retrieves the unique GUID for the publishing point.")] HRESULT
        ID([out, retval] BSTR *pVal);

            [propget, id(5), helpstring("Retrieves a collection of limits for the publishing point.")] HRESULT
        Limits([out, retval] IWMSPublishingPointLimits ** pVal);

            [propget, id(6), helpstring("Retrieves a collection of IWMSFileDescription objects that describes files and directories relative to the publishing point path.")] HRESULT
        FileDescriptions( [in, defaultvalue("")] BSTR RelativePath, [out, retval] IWMSFileDescriptions** pVal);

            [propget, id(7), helpstring("Retrieves the moniker display name for the publishing point.")] HRESULT
        MonikerName( [out,retval] BSTR* pbstrVal );

            [propget, id(DISPID_VALUE), helpstring("Specifies or retrieves the name of the publishing point.")] HRESULT
        Name([out, retval] BSTR *pVal);
            [propput, id(DISPID_VALUE), helpstring("Specifies or retrieves the name of the publishing point.")] HRESULT
        Name([in] BSTR newVal);

            [propget, id(8), helpstring("Retrieves a collection containing information about outgoing distribution connection clients for the publishing point.")] HRESULT
        OutgoingDistributionConnections([out, retval] IWMSOutgoingDistributionConnections* *pVal);

            [propget, id(9), helpstring("Specifies or retrieves the path to the publishing point content.")] HRESULT
        Path([out, retval] BSTR *pVal);
            [propput, id(9), helpstring("Specifies or retrieves the path to the publishing point content.")] HRESULT
        Path([in] BSTR newVal);

            [propget, id(10), helpstring("Retrieves a collection of peak counters for the publishing point")] HRESULT
        PeakCounters([out, retval] IWMSPublishingPointPeakCounters ** pVal);

            [propget, id(11), helpstring("Retrieves a collection that contains information about players connected to the publishing point.")] HRESULT
        Players( [out, retval] IWMSPlayers* *pVal );

            [propget, id(12), helpstring("Retrieves a collection of name-value pairs for the publishing point.")] HRESULT
        Properties([out, retval] IWMSNamedValues* *pVal);

            [propget, id(13), helpstring("Retrieves a collection of total counters for the publishing point.")] HRESULT 
        TotalCounters([out, retval] IWMSPublishingPointTotalCounters* *pVal);

            [propget, id(14), helpstring("Retrieves an enumeration value that indicates the publishing point type.")] HRESULT
        Type([out, retval] WMS_PUBLISHING_POINT_TYPE *pVal);

            [propget, id(15), helpstring("Specifies or retrieves the path to the wrapper playlist file for the publishing point.")] HRESULT
        WrapperPath([out, retval] BSTR *pVal);
            [propput, id(15), helpstring("Specifies or retrieves the path to the wrapper playlist file for the publishing point.")] HRESULT
        WrapperPath([in] BSTR newVal);

            [propget, id(16), helpstring("Retrieves a collection of authentication plug-ins for the publishing point.")] HRESULT
        Authenticators([out, retval] IWMSPlugins** pVal);

            [propget, id(17), helpstring("Retrieves the publishing point status.")] HRESULT
        Status([out, retval] WMS_PUBLISHING_POINT_STATUS *pVal);

            [propget, id(18), helpstring("Specifies or retrieves a Boolean value indicating whether a wrapper playlist is enabled for the publishing point.")] HRESULT
        EnableWrapperPath([out, retval] VARIANT_BOOL *pVal);
            [propput, id(18), helpstring("Specifies or retrieves a Boolean value indicating whether a wrapper playlist is enabled for the publishing point.")] HRESULT
        EnableWrapperPath([in] VARIANT_BOOL newVal);

            [propget, id(19), helpstring("Retrieves a collection of stream filter plug-ins for the publishing point.")] HRESULT
        StreamFilters([out, retval] IWMSPlugins** pVal);

            [propget, id(22), helpstring("Specifies or retrieves the user name that is returned in response to an authentication challenge during server-to-server distribution.")] HRESULT
        DistributionUserName([out, retval] BSTR *pVal);

            [id(23), helpstring("Specifies or retrieves the user name/password that is returned in response to an authentication challenge during server-to-server distribution.")] HRESULT
        SetDistributionUserNamePassword([in, string] wchar_t* newUserName, [in, string] wchar_t* newUserPassword );

            [propget, id(24), helpstring("Specifies or retrieves the expiration value, in seconds, for cached content.")] HRESULT
        CacheProxyExpiration([out, retval] long *pVal);
            [propput, id(24), helpstring("Specifies or retrieves the expiration value, in seconds, for cached content.")] HRESULT
        CacheProxyExpiration([in] long newVal);

            [propget, id(25), helpstring("Retrieves a Boolean value that indicates whether the password used for authentication during server-to-server distribution is set.")] HRESULT
        IsDistributionPasswordSet ( [out, retval] VARIANT_BOOL *pVal);

            [propget, id(26), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point allows clients to cache content locally.")] HRESULT
        AllowPlayerSideDiskCaching([out, retval] VARIANT_BOOL *pVal);
            [propput, id(26), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point allows clients to cache content locally.")] HRESULT
        AllowPlayerSideDiskCaching([in] VARIANT_BOOL newVal);

            [propget, id(27), helpstring("Specifies or retrieves a Boolean value that indicates whether forward error correction is enabled for the publishing point.")] HRESULT
        EnableFEC([out, retval] VARIANT_BOOL *pVal);
            [propput, id(27), helpstring("Specifies or retrieves a Boolean value that indicates whether forward error correction is enabled for the publishing point.")] HRESULT
        EnableFEC([in] VARIANT_BOOL newVal);

    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(770e846b-de39-4d72-a29f-1b631ca660b4),
        dual,
        nonextensible,
        helpstring("Contains properties and methods to manage a publishing point."),
        pointer_default(unique)
    ]
    interface IWMSPublishingPoint2 : IWMSPublishingPoint
    {
            [propget, id(28), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point allows clients to use startup profile.")] HRESULT
        AllowStartupProfile([out, retval] VARIANT_BOOL *pVal);
            [propput, id(28), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point allows clients to use startup profile.")] HRESULT
        AllowStartupProfile([in] VARIANT_BOOL newVal);

    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(6ca388b3-eaee-492f-a8d6-8758efc72d76),
        dual,
        nonextensible,
        helpstring("Contains methods to manage an on-demand publishing point."),
        pointer_default(unique)
    ]
    interface IWMSOnDemandPublishingPoint : IWMSPublishingPoint
    {
            [propget, id(30), helpstring("Specifies or retrieves a Boolean value that indicates whether content from the publishing point can be cached by cache servers.")] HRESULT
        AllowContentCaching([out, retval] VARIANT_BOOL *pVal);
            [propput, id(30), helpstring("Specifies or retrieves a Boolean value that indicates whether content from the publishing point can be cached by cache servers.")] HRESULT
        AllowContentCaching([in] VARIANT_BOOL newVal);

            [id(31), helpstring("Exports the configuration data for the publishing point.")] HRESULT
        ExportXML( [in] BSTR bstrXMLFileName );

            [propget, id(32), helpstring("Specifies or retrieves a Boolean value that indicates whether clients can use wildcard characters to access content from the publishing point.")] HRESULT
        EnableClientWildcardDirectoryAccess( [out, retval] VARIANT_BOOL *pVal);
            [propput, id(32), helpstring("Specifies or retrieves a Boolean value that indicates whether clients can use wildcard characters to access content from the publishing point.")] HRESULT
        EnableClientWildcardDirectoryAccess( [in] VARIANT_BOOL newVal);
        
            [propget, id(33), helpstring("Reserved for future use.")] HRESULT
        EnableDownload( [out, retval] VARIANT_BOOL *pVal);
            [propput, id(33), helpstring("Reserved for future use.")] HRESULT
        EnableDownload( [in] VARIANT_BOOL newVal);
       
            [propget, id(34), helpstring("Reserved for future use.")] HRESULT
        DownloadBandwidth( [out, retval] long *pVal);
            [propput, id(34), helpstring("Reserved for future use.")] HRESULT
        DownloadBandwidth( [in] long newVal);
    };

    [
        object,
        uuid(3abbf960-54e5-40be-8677-c1758b1239eb),
        dual,
        nonextensible,
        helpstring("Contains methods to manage an on-demand publishing point."),
        pointer_default(unique)
    ]
    interface IWMSOnDemandPublishingPoint2 : IWMSOnDemandPublishingPoint
    {
            [propget, id(35), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point allows clients to use startup profile.")] HRESULT
        AllowStartupProfile([out, retval] VARIANT_BOOL *pVal);
            [propput, id(35), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point allows clients to use startup profile.")] HRESULT
        AllowStartupProfile([in] VARIANT_BOOL newVal);

    };


/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(55DDB8E9-05A3-4666-9E20-550F94581B06),
        dual,
        nonextensible,
        helpstring("Contains a collection of paths for media files that are used to announce a multicast broadcast."),
        pointer_default(unique)
    ]
    interface IWMSAnnouncementStreamFormats : IDispatch
    {
        // Standard collection Methods & Properties: Item, Count & _NewEnum
        COLLECTION_METHODS( BSTR, "Retrieves the path for a file from the collection." )

            [id(4), helpstring("Adds a file path or IStream header to the collection.")] HRESULT
        Add( [in] VARIANT varStreamFormat );
            [id(5), helpstring("Removes a file path from the collection.")] HRESULT
        Remove( [in] VARIANT varIndex );
            [id(6), helpstring("Removes all file paths from the collection.")] HRESULT
        RemoveAll();
    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(6ca388b4-eaee-492f-a8d6-8758efc72d76),
        dual,
        nonextensible,
        helpstring("Contains properties and methods to manage a broadcast publishing point."),
        pointer_default(unique)
    ]
    interface IWMSBroadcastPublishingPoint : IWMSPublishingPoint
    {
        typedef [public, uuid(3E52E0ED-72A7-11D2-BF2F-00805FBE84A6)] enum WMS_BROADCAST_PUBLISHING_POINT_STATUS
        {
            WMS_BROADCAST_PUBLISHING_POINT_STOPPED                = 0x0,
            WMS_BROADCAST_PUBLISHING_POINT_STARTED_WITHOUT_DATA   = 0x1,
            WMS_BROADCAST_PUBLISHING_POINT_STARTED                = 0x2,
            WMS_BROADCAST_PUBLISHING_POINT_ARCHIVING              = 0x4,
            WMS_BROADCAST_PUBLISHING_POINT_CHANGE_IN_PROGRESS     = 0x8
        } WMS_BROADCAST_PUBLISHING_POINT_STATUS;

        typedef [public, uuid(62D6D99D-EB48-4e9e-97DB-C2C09EAADAD4)] enum WMS_BUFFER_SETTING
        {
            WMS_BUFFER_SETTING_UNSPECIFIED                        = 0x0,
            WMS_BUFFER_SETTING_MINIMIZE_STARTUP_LATENCY           = 0x1,
            WMS_BUFFER_SETTING_MINIMIZE_PROPAGATION_LATENCY       = 0x2,
            [hidden] WMS_NUM_BUFFER_SETTING                       = 0x3
        } WMS_BUFFER_SETTING;

            [propget, id(30), helpstring("Specifies or retrieves a Boolean value that indicates whether streams from the publishing point can be split.")] HRESULT
        AllowStreamSplitting([out, retval] VARIANT_BOOL *pVal);
            [propput, id(30), helpstring("Specifies or retrieves a Boolean value that indicates whether streams from the publishing point can be split.")] HRESULT
        AllowStreamSplitting([in] VARIANT_BOOL newVal);
        
            [propget, id(31), helpstring("Specifies or retrieves a Boolean value that indicates whether a stopped publishing point is automatically started when the first client connects and then stopped when the last client disconnects.")] HRESULT
        AllowClientToStartAndStop([out, retval] VARIANT_BOOL *pVal);
            [propput, id(31), helpstring("Specifies or retrieves a Boolean value that indicates whether a stopped publishing point is automatically started when the first client connects and then stopped when the last client disconnects.")] HRESULT
        AllowClientToStartAndStop([in] VARIANT_BOOL newVal);

            [propget, id(32), helpstring("Retrieves a collection of broadcast data sink plug-ins.")] HRESULT 
        BroadcastDataSinks([out, retval] IWMSPlugins* *pVal);

            [propget, id(33), helpstring("Retrieves the shared playlist object for the broadcast publishing point.")] HRESULT 
        SharedPlaylist([out, retval] IWMSPlaylist ** pVal);

            [id(34), helpstring("Initializes the publishing point and sends multicast beacons that enable clients to connect to a multicast when no content is being streamed.")] HRESULT
        StartWithoutData();

            [id(35), helpstring("Starts the broadcast publishing point.")] HRESULT
        Start();

            [id(36), helpstring("Starts archiving content from the publishing point.")] HRESULT
        StartArchive();

            [propget, id(37), helpstring("Retrieves an enumeration value indicating the status of the broadcast publishing point.")] HRESULT
        BroadcastStatus([out, retval] WMS_BROADCAST_PUBLISHING_POINT_STATUS *pVal);

            [id(38), helpstring("Stops the broadcast publishing point.")] HRESULT
        Stop();        

            [id(39), helpstring("Stops archiving content from the publishing point.")] HRESULT
        StopArchive();

            [id(40), helpstring("Exports the configuration data for the publishing point.")] HRESULT
        ExportXML( [in] BSTR bstrXMLFileName );

            [propget, id(41), helpstring("Retrieves the elapsed time, in seconds, that the publishing point has been running.")] HRESULT
        UpTime( [out,retval] long *pVal );

            [propget, id(43), helpstring("Retrieves a collection of paths for media files that are used to announce a multicast broadcast.")] HRESULT
        AnnouncementStreamFormats( [out, retval] IWMSAnnouncementStreamFormats **ppFileNames );    

            [id(44), helpstring("Saves the information needed to create a multicast information (.nsc) file to the server's configuration data.")] HRESULT
        Announce();

            [id(45), helpstring("Creates a multicast information (.nsc) file.")] HRESULT
        AnnounceToNSCFile( [in] BSTR  bstrDestinationFileName, [in, defaultvalue(FALSE)] VARIANT_BOOL fOverwriteFlag );

            [restricted, id(46), helpstring("Outputs a multicast information (.nsc) file using the IStream interface.")] HRESULT
        AnnounceToNSCStream( [out, retval] IUnknown **ppNSCAnnounceStream );    

            [propget, id(47), helpstring("Specifies or retrieves an enumeration value indicating the amount of buffering that is done on a broadcast sink.")] HRESULT
        BufferSetting([out, retval] WMS_BUFFER_SETTING *pVal);
            [propput, id(47), helpstring("Specifies or retrieves an enumeration value indicating the amount of buffering that is done on a broadcast sink.")] HRESULT
        BufferSetting([in] WMS_BUFFER_SETTING newVal);

    };

    [
        object,
        uuid(c94e9af0-f12d-4bff-b01a-1ce6d7f5d303),
        dual,
        nonextensible,
        helpstring("Contains methods to manage a broadcast publishing point."),
        pointer_default(unique)
    ]
    interface IWMSBroadcastPublishingPoint2 : IWMSBroadcastPublishingPoint
    {
            [propget, id(48), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point allows clients to use startup profile.")] HRESULT
        AllowStartupProfile([out, retval] VARIANT_BOOL *pVal);
            [propput, id(48), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point allows clients to use startup profile.")] HRESULT
        AllowStartupProfile([in] VARIANT_BOOL newVal);
            [propget, id(49), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point automatically restarts when the service restarts.")] HRESULT
        EnableStartVRootOnServiceStart([out, retval] VARIANT_BOOL *pVal);
            [propput, id(49), helpstring("Specifies or retrieves a Boolean value that indicates whether the publishing point automatically restarts when the service restarts")] HRESULT
        EnableStartVRootOnServiceStart([in] VARIANT_BOOL newVal);

    };


/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(1881274D-4BEC-11D2-BF25-00805FBE84A6),
        dual,
        nonextensible,
        helpstring("Contains a collection of publishing points."),
        pointer_default(unique)
    ]
    interface IWMSPublishingPoints : IDispatch
    {
        typedef [public, uuid(6ca388b5-eaee-492f-a8d6-8758efc72d76)] enum WMS_PUBLISHING_POINT_CATEGORY
        {
            WMS_PUBLISHING_POINT_ON_DEMAND      = 1,
            WMS_PUBLISHING_POINT_BROADCAST      = 2,
        } WMS_PUBLISHING_POINT_CATEGORY;

        // Standard collection Methods & Properties: Item, Count & _NewEnum
        COLLECTION_METHODS( IWMSPublishingPoint*, "Retrieves a specific publishing point from the collection." )

            [id(4), helpstring("Adds a new publishing point to the collection.")] HRESULT
        Add([in] BSTR Name, [in] WMS_PUBLISHING_POINT_CATEGORY Category, [in] BSTR Path, [out,retval] IWMSPublishingPoint** ppNewPubPt);
            [id(5), helpstring("Removes a publishing point from the collection.")] HRESULT
        Remove([in] VARIANT varIndex);
            [id(6), helpstring("Creates a duplicate instance of a publishing point.")] HRESULT
        Clone([in] BSTR DestName, [in] IWMSPublishingPoint* pSrcPubPt, [out,retval] IWMSPublishingPoint** ppDestPubPt);
            [id(7), helpstring("Creates a new publishing point from a publishing point configuration file.")] HRESULT
        ImportXML( [in] BSTR bstrNewPubPtName, [in] BSTR bstrXMLFileName, [out,retval] IWMSPublishingPoint** ppNewPubPt );
    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(18FA53CD-8EB9-4b5f-B750-659D9B96DB9F),
        dual,
        nonextensible,
        helpstring("Contains properties that provide real-time counter values for the server."),
        pointer_default(unique)
    ]
    interface IWMSServerCurrentCounters : IDispatch
    {
            [propget, id(0), helpstring("Retrieves the number of players connected to the server.")] HRESULT
        ConnectedPlayers([out, retval] long *pVal);

            [propget, id(2), helpstring("Retrieves the current number of players in the queue to connect to the server.")] HRESULT
        ConnectionQueue([out, retval] long *pVal);

            [propget, id(3), helpstring("Retrieves the number of players connecting per second.")] HRESULT
        ConnectionRate([out, retval] long *pVal);

            [propget, id(4), helpstring("Retrieves the current bandwidth, in Kbps, consumed by file read operations.")] HRESULT
        FileReadRate([out, retval] long *pVal);

            [propget, id(5), helpstring("Retrieves the total number of players being streamed content using the HTTP protocol.")] HRESULT
        StreamingHTTPPlayers([out, retval] long *pVal);

            [propget, id(6), helpstring("Retrieves the number of late read operations per second.")] HRESULT
        LateReadRate([out, retval] long *pVal);

            [propget, id(7), helpstring("Retrieves the number of players being streamed content using the MMS protocol.")] HRESULT
        StreamingMMSPlayers([out, retval] long *pVal);

            [propget, id(9), helpstring("Retrieves the bandwidth, in Kbps, that has been allocated for outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionAllocatedBandwidth([out, retval] long *pVal);

            [propget, id(10), helpstring("Retrieves the number of outgoing distribution connection clients connected to the server.")] HRESULT
        OutgoingDistributionConnections([out, retval] long *pVal);

            [propget, id(11), helpstring("Retrieves the rate, in Kbps, at which content is being sent to outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionSendRate([out, retval] long *pVal);

            [propget, id(12), helpstring("Retrieves the bandwidth, in Kbps, allocated for player connections.")] HRESULT
        PlayerAllocatedBandwidth([out, retval] long *pVal);

            [propget, id(13), helpstring("Retrieves the rate, in Kbps, at which content is being sent to players.")] HRESULT
        PlayerSendRate([out, retval] long *pVal);

            [propget, id(14), helpstring("Retrieves the number of players being streamed content using the RTSP protocol.")] HRESULT
        StreamingRTSPPlayers([out, retval] long *pVal);

            [propget, id(15), helpstring("Retrieves the number of errors per second due to packets being dropped.")] HRESULT
        StreamErrorRate([out, retval] long *pVal);

            [propget, id(16), helpstring("Retrieves the number of players being streamed content.")] HRESULT
        StreamingPlayers([out, retval] long *pVal);

            [propget, id(18), helpstring("Retrieves the number of multimedia streams being sent to a cache.")] HRESULT
        CacheDownloads([out, retval] long *pVal);

            [propget, id(19), helpstring("Retrieves the number of late send operations per second.")] HRESULT
        LateSendRate([out, retval] long *pVal);

            [propget, id(20), helpstring("Retrieves the number of UDP resend requests per second received by the server.")] HRESULT
        UDPResendRequestsRate([out, retval] long *pVal);

            [propget, id(21), helpstring("Retrieves the number of UDP resend requests per second processed by the server.")] HRESULT
        UDPResendsSentRate([out, retval] long *pVal);

            [propget, id(22), helpstring("Retrieves the bandwidth, in Kbps, that has been allocated for incoming connection servers.")] HRESULT
        IncomingBandwidth([out, retval] long *pVal);


            [propget, id(30), helpstring("Retrieves an array that contains all of the current counters.")] HRESULT
        AllCounters([out,retval] SAFEARRAY(VARIANT) *ppsaCounters);

    };

/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(66F2D385-7081-40b9-863C-AFA4E5612CD3),
        dual,
        nonextensible,
        helpstring("Contains properties that provide peak counter values for the server."),
        pointer_default(unique)
    ]
    interface IWMSServerPeakCounters : IDispatch
    {
            [propget, id(0), helpstring("Retrieves the peak number of players that have been connected.")] HRESULT
        ConnectedPlayers([out, retval] long *pVal);

            [propget, id(2), helpstring("Retrieves the peak number of outgoing distribution connection clients that have been connected.")] HRESULT
        OutgoingDistributionConnections([out, retval] long *pVal);

            [propget, id(3), helpstring("Retrieves the peak bandwidth, in Kbps, that has been allocated for outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionAllocatedBandwidth([out, retval] long *pVal);

            [propget, id(4), helpstring("Retrieves the peak number of bytes per second sent to players.")] HRESULT
        PlayerSendRate([out, retval] long *pVal);

            [propget, id(5), helpstring("Retrieves the peak bandwidth, in Kbps, that has been allocated for player connections.")] HRESULT
        PlayerAllocatedBandwidth([out, retval] long *pVal);

            [propget, id(6), helpstring("Retrieves the peak number of bytes per second sent to outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionSendRate([out, retval] long *pVal);

            [propget, id(7), helpstring("Retrieves the date and time at which the server started monitoring the peak counters.")] HRESULT
        CountersStartTime([out, retval] DATE *pVal );
        
            [propget, id(8), helpstring("Retrieves the peak number of players that have been streamed content.")] HRESULT
        StreamingPlayers([out, retval] long *pVal);

            [id(10), helpstring("Resets all of the peak counters to the current values.")] HRESULT
        Reset();
        
            [propget, id(30), helpstring("Retrieves an array that contains all of the peak counters.")] HRESULT
        AllCounters([out,retval] SAFEARRAY(VARIANT) *ppsaCounters);

};

/////////////////////////////////////////////////////////////////////////////

    [
        object,
        uuid(D06CCFBB-994D-45f8-886E-81E9B7FAEDF1),
        dual,
        nonextensible,
        helpstring("Contains properties to retrieve and manage server limits."),
        pointer_default(unique)
    ]
    interface IWMSServerLimits : IDispatch
    {
            [propget, id(0), helpstring("Specifies or retrieves the maximum number of players that can be connected.")] HRESULT
        ConnectedPlayers([out, retval] long *pVal);
            [propput, id(0), helpstring("Specifies or retrieves the maximum number of players that can be connected.")] HRESULT
        ConnectedPlayers([in] long Val);

            [propget, id(3), helpstring("Specifies or retrieves the maximum number of clients per second that the server is permitted to connect.")] HRESULT
        ConnectionRate([out, retval] long *pVal);
            [propput, id(3), helpstring("Specifies or retrieves the maximum number of clients per second that the server is permitted to connect.")] HRESULT
        ConnectionRate([in] long Val);

            [propget, id(5), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionBandwidth([out, retval] long *pVal);
            [propput, id(5), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all outgoing distribution connection clients.")] HRESULT
        OutgoingDistributionBandwidth([in] long Val);

            [propget, id(6), helpstring("Specifies or retrieves the maximum number of outgoing distribution connection clients that can be connected.")] HRESULT
        OutgoingDistributionConnections([out, retval] long *pVal);
            [propput, id(6), helpstring("Specifies or retrieves the maximum number of outgoing distribution connection clients that can be connected.")] HRESULT
        OutgoingDistributionConnections([in] long Val);

            [propget, id(7), helpstring("Specifies or retrieves the maximum allocated bandwidth, in Kbps, permitted for an outgoing distribution connection client.")] HRESULT
        PerOutgoingDistributionConnectionBandwidth([out, retval] long *pVal);
            [propput, id(7), helpstring("Specifies or retrieves the maximum allocated bandwidth, in Kbps, permitted for an outgoing distribution connection client.")] HRESULT
        PerOutgoingDistributionConnectionBandwidth([in] long Val);

            [propget, id(8), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all player connections.")] HRESULT
        PlayerBandwidth([out, retval] long *pVal);
            [propput, id(8), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all player connections.")] HRESULT
        PlayerBandwidth([in] long Val);

            [propget, id(9), helpstring("Specifies or retrieves the maximum length of time, in seconds, that a player is permitted to remain connected without receiving streamed content.")] HRESULT
        PlayerInactivityTimeout([out, retval] long *pVal);
            [propput, id(9), helpstring("Specifies or retrieves the maximum length of time, in seconds, that a player is permitted to remain connected without receiving streamed content.")] HRESULT
        PlayerInactivityTimeout([in] long Val);

            [propget, id(10), helpstring("Specifies or retrieves the maximum allocated bandwidth, in Kbps, permitted for a player connection.")] HRESULT
        PerPlayerConnectionBandwidth([out, retval] long *pVal);
            [propput, id(10), helpstring("Specifies or retrieves the maximum allocated bandwidth, in Kbps, permitted for a player connection.")] HRESULT
        PerPlayerConnectionBandwidth([in] long Val);

            [propget, id(11), helpstring("Specifies or retrieves the maximum length of time, in seconds, that a player is permitted to remain connected, if the server has not received a message from the player to maintain the connection.")] HRESULT
        PlayerAcknowledgementTimeout([out, retval] long *pVal);
            [propput, id(11), helpstring("Specifies or retrieves the maximum length of time, in seconds, that a player is permitted to remain connected, if the server has not received a message from the player to maintain the connection.")] HRESULT
        PlayerAcknowledgementTimeout([in] long Val);

            [propget, id(13), helpstring("Specifies or retrieves the maximum CPU utilization permitted when a client connects to the server.")] HRESULT
        CPUUtilizationDuringConnection([out, retval] long *pVal);
            [propput, id(13), helpstring("Specifies or retrieves the maximum CPU utilization permitted when a client connects to the server.")] HRESULT
        CPUUtilizationDuringConnection([in] long Val);

            [propget, id(14), helpstring("Specifies or retrieves the maximum number of IWMSDiagnosticEvent objects that the IWMSDiagnosticEvents collection can contain.")] HRESULT
        DiagnosticEvents([out, retval] long *pVal);
            [propput, id(14), helpstring("Specifies or retrieves the maximum number of IWMSDiagnosticEvent objects that the IWMSDiagnosticEvents collection can contain.")] HRESULT
        DiagnosticEvents([in] long Val);

            [propget, id(15), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all incoming connection servers.")] HRESULT
        IncomingBandwidth([out, retval] long *pVal);
            [propput, id(15), helpstring("Specifies or retrieves the maximum aggregate allocated bandwidth, in Kbps, permitted for all incoming connection servers.")] HRESULT
        IncomingBandwidth([in] long Val);
        
    };
        
/////////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid(845FB958-4279-11D2-BF23-00805FBE84A6),
        dual,
        nonextensible,
        helpstring("Contains properties and methods to manage the server."),
        pointer_default(unique)
    ]
    interface IWMSServer : IDispatch
    {
        typedef [public, uuid(3E52E0EE-72A7-11D2-BF2F-00805FBE84A6)] enum WMS_SERVER_STATUS
        {
            WMS_SERVER_RUNNING                = 0x0,
            WMS_SERVER_ERROR                  = 0x1,
            WMS_SERVER_ERROR_CRITICAL         = 0x2
        } WMS_SERVER_STATUS;

        typedef [public, uuid(49A0F530-F475-45a6-99C5-E52382685BA8)] enum WMS_OS_PRODUCT_TYPE
        {
            WMS_OS_PRODUCT_SERVER                   = 0x00000001,
            WMS_OS_PRODUCT_ADVANCED                 = 0x00000002,
        } WMS_OS_PRODUCT_TYPE;

            [propget, id(1), helpstring("Specifies or retrieves a Boolean value that indicates whether the server can receive client connections.")] HRESULT
        AllowClientsToConnect([out, retval] VARIANT_BOOL *pVal);

            [propput, id(1), helpstring("Specifies or retrieves a Boolean value that indicates whether the server can receive client connections.")] HRESULT
        AllowClientsToConnect([in] VARIANT_BOOL val);

            [propget, id(2), helpstring("Retrieves a collection of authentication plug-ins for the server.")] HRESULT
        Authenticators([out, retval] IWMSPlugins** pVal);

            [propget, id(3), helpstring("Retrieves a collection of cache and proxy plug-ins for the server.")] HRESULT
        CacheProxy([out, retval] IWMSPlugins **pVal);

            [propget, id(4), helpstring("Retrieves a collection of control protocol plug-ins for the server.")] HRESULT 
        ControlProtocols([out, retval] IWMSPlugins* *pVal);

            [propget, id(5), helpstring("Retrieves a collection of current counters for the server.")] HRESULT 
        CurrentCounters([out, retval] IWMSServerCurrentCounters * *pVal);

            [propget, id(6), helpstring("Retrieves a collection of data source plug-ins for the server.")] HRESULT 
        DataSources([out, retval] IWMSPlugins* *pVal);

            [propget, id(7), helpstring("Retrieves a collection of event notification and authorization plug-ins for the server.")] HRESULT
        EventHandlers([out, retval] IWMSPlugins** pVal);

            [propget, id(8), helpstring("Retrieves a collection of limits for the server.")] HRESULT
        Limits([out, retval] IWMSServerLimits ** pVal);

            [propget, id(9), helpstring("Retrieves a collection of IWMSFileDescription objects that describe files and directories for the server.")] HRESULT
        FileDescriptions([in] BSTR Path, [in, defaultvalue(0)] WMS_FILE_TYPE Type, [out, retval] IWMSFileDescriptions** pVal);
    
            [propget, id(10), helpstring("Retrieves a collection of media parser plug-ins for the server.")] HRESULT 
        MediaParsers([out, retval] IWMSPlugins* *pVal);

            [propget, id(11), helpstring("Retrieves the moniker display name for the server.")] HRESULT
        MonikerName( [out,retval] BSTR* pbstrVal );

            [propget, id(DISPID_VALUE), helpstring("Retrieves the server name.")] HRESULT
        Name([out, retval] BSTR *pVal);

            [propget, id(13), helpstring("Retrieves a collection of peak counters for the server.")] HRESULT
        PeakCounters([out, retval] IWMSServerPeakCounters ** pVal);

            [propget, id(14), helpstring("Retrieves a collection of playlist parser plug-ins for the server.")] HRESULT 
        PlaylistParsers([out, retval] IWMSPlugins* *pVal);

            [propget, id(16), helpstring("Retrieves a collection of name-value pairs for the server.")] HRESULT
        Properties([out, retval] IWMSNamedValues* *pVal);

            [propget, id(17), helpstring("Retrieves a collection of publishing points.")] HRESULT
        PublishingPoints([out, retval] IWMSPublishingPoints* *pVal);

            [propget, id(19), helpstring("Retrieves a collection of total counters for the server.")] HRESULT 
        TotalCounters([out, retval] IWMSServerTotalCounters* *pVal);

            [propget, id(20), helpstring("Retrieves a collection of unicast data sink plug-ins.")] HRESULT 
        UnicastDataSinks([out, retval] IWMSPlugins* *pVal);

            [propget, id(21), helpstring("Retrieves a collection that contains information about players connected to the server.")] HRESULT
        Players( [out, retval] IWMSPlayers* *pVal );

            [propget, id(25), helpstring("Retrieves an enumeration value indicating the current status of the server.")] HRESULT
        Status([out, retval] WMS_SERVER_STATUS *pVal);

            [id(26), helpstring("Creates an XML DOM document object for creating and editing playlists.")] HRESULT
        CreatePlaylist ([out, retval] IXMLDOMDocument **ppPlaylist);

            [propget, id(27), helpstring("Retrieves the date and time at which the server was started.")] HRESULT 
        StartTime([out, retval] DATE *pVal);

            [propget, id(28), helpstring("Retrieves a collection containing information about outgoing distribution connection clients connected to the server.")] HRESULT
        OutgoingDistributionConnections([out, retval] IWMSOutgoingDistributionConnections* *pVal);

            [propget, id(30), helpstring("Retrieves the CPU Utilization of the computer on which the server is running.")] HRESULT
        CPUUtilization([out, retval] long *pVal);

            [id(31), helpstring("Exports the configuration data for the server.")] HRESULT
        ExportXML( [in] BSTR bstrXMLFileName );

            [propget, id(32), helpstring("Retrieves a collection of stream filter plug-ins for the server.")] HRESULT
        StreamFilters([out, retval] IWMSPlugins** pVal);

            [propget, id(33), helpstring("Retrieves the version number of the server.")] HRESULT
        Version([out, retval] BSTR* pbstrVal);

            [propget, id(34), helpstring("Specifies or retrieves an enumeration value that indicates whether the server loads event notification and authorization plug-ins as in-process or out-of-process objects, if the plug-in doesn't specify how it should be loaded.")] HRESULT
        DefaultPluginLoadType([out, retval] WMS_PLUGIN_LOAD_TYPE *pVal);

            [propput, id(34), helpstring("Specifies or retrieves an enumeration value that indicates whether the server loads event notification and authorization plug-ins as in-process or out-of-process objects, if the plug-in doesn't specify how it should be loaded.")] HRESULT
        DefaultPluginLoadType([in] WMS_PLUGIN_LOAD_TYPE val);

            [propget, id(35), helpstring("Retrieves a collection of IP addresses that are available for use by a control protocol plug-in.")] HRESULT
        AvailableIPAddresses([out, retval] IWMSAvailableIPAddresses ** ppIPAddrList);

            [propget, id(36), helpstring("Retrieves a collection of server root directories.")] HRESULT
        RootDirectories([out, retval] IWMSRootDirectories **ppRootDirectories);

            [propget, id(37), helpstring("Retrieves an IWMSDiagnosticEvents object that can be used to retrieve information about critical errors and warnings.")] HRESULT
        DiagnosticEvents([out, retval] IWMSDiagnosticEvents **ppDiagEvents);

            [propget, id(38), helpstring("Specifies or retrieves a Boolean value indicating whether the server sends all requests for content to cache and proxy plug-ins.")] HRESULT
        EnableReverseProxyMode([out, retval] VARIANT_BOOL *pVal);
            [propput, id(38), helpstring("Specifies or retrieves a Boolean value indicating whether the server sends all requests for content to cache and proxy plug-ins.")] HRESULT
        EnableReverseProxyMode([in] VARIANT_BOOL val);

            [propget, id(40), helpstring("Retrieves an enumeration value that indicates the file type.")] HRESULT
        FileType([in]BSTR path, [out, retval] WMS_FILE_TYPE *pVal);

            [propget, id(41), helpstring("Specifies or retrieves the default path for the server.")] HRESULT
        DefaultPath([out, retval] BSTR* pVal);
            [propput, id(41), helpstring("Specifies or retrieves the default path for the server.")] HRESULT
        DefaultPath([in] BSTR newVal);

            [id(42), helpstring("Downloads multimedia content.")] HRESULT
        DownloadContent([in] BSTR SourceUrl, [in] BSTR DestinationUrl, [in, defaultvalue(-1)] long lContentSizeLow, [in, defaultvalue(-1)] long lContentSizeHigh, [in, defaultvalue(0)] long lBitRate );

            [propget, id(43), helpstring("Retrieves the operating system product type that Windows Media Services is running on.")] HRESULT
        OSProductType( [out,retval] WMS_OS_PRODUCT_TYPE *pVal );
    };    

cpp_quote( "#endif" )

