//***************************************************************************** 
// 
// Microsoft Windows Media 
// Copyright (C) Microsoft Corporation. All rights reserved. 
//
// FileName:            wmscontext.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 wmscontext.idl" )
cpp_quote("//")
cpp_quote("// DO NOT EDIT THIS FILE.")
cpp_quote("//")
cpp_quote("//*****************************************************************************") 

import "oaidl.idl";

cpp_quote("#ifndef _WMSContext")
cpp_quote("#define _WMSContext")

typedef unsigned __int64    QWORD;


cpp_quote( "EXTERN_GUID( IID_IWMSContext, 0x4f1a1421, 0x5cd5, 0x11d2, 0x9f, 0x5, 0x0, 0x60, 0x97, 0xd2, 0xd7, 0xcf );" )

cpp_quote( "EXTERN_GUID( IID_IWMSCommandContext, 0x75554931, 0x5f0e, 0x11d2, 0x9f, 0xe, 0x0, 0x60, 0x97, 0xd2, 0xd7, 0xcf );" )


// These are the defined options in the Set and Get methods in IWMSContext.
typedef [public] enum WMS_CONTEXT_OPTIONS
{
    WMS_CONTEXT_SET_PROPERTY_NAME_BY_VALUE          = 0x0001,
    WMS_CONTEXT_SET_PROPERTY_STRING_BY_REFERENCE    = 0x0002,
    WMS_CONTEXT_GET_PROPERTY_STRING_BY_REFERENCE    = 0x0004,
} WMS_CONTEXT_OPTIONS;




typedef [public] enum WMS_CONTEXT_HINT_CONSTANTS
{
    WMS_CONTEXT_NO_NAME_HINT    = 0xFFFFFFFF
} WMS_CONTEXT_HINT_CONSTANTS;

/////////////////////////////////////////////////////////////////////////////
interface IWMSContext;
interface IWMSCommandContext;


/////////////////////////////////////////////////////////////////////////////
[
    object,
    uuid(4F1A1421-5CD5-11d2-9F05-006097D2D7CF),
    pointer_default(unique),
    helpstring("Provides methods for managing a collection of properties for a particular context.")
]
interface IWMSContext : IUnknown
{
    typedef [public] enum WMS_CONTEXT_TYPE
    {
        WMS_UNKNOWN_CONTEXT_TYPE,
        WMS_SERVER_CONTEXT_TYPE,
        WMS_USER_CONTEXT_TYPE,
        WMS_PRESENTATION_CONTEXT_TYPE,
        WMS_CONTENT_DESCRIPTION_CONTEXT_TYPE,
        WMS_COMMAND_REQUEST_CONTEXT_TYPE,
        WMS_COMMAND_RESPONSE_CONTEXT_TYPE,
        WMS_TRANSPORT_SPEC_CONTEXT_TYPE,
        WMS_PACKETIZER_CONTEXT_TYPE,
        WMS_CACHE_CONTENT_INFORMATION_CONTEXT_TYPE,
        WMS_ARCHIVE_CONTEXT_TYPE,

        [hidden] WMS_NUM_CONTEXT_TYPE
    } WMS_CONTEXT_TYPE;


    [helpstring("Sets the value for or adds a new long value property.")] HRESULT 
    SetLongValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] long       lValue,
        [in] long       lOptions
        );
    [helpstring("Sets the value for or adds a new string value property.")] HRESULT 
    SetStringValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] LPCWSTR    pstrValue,
        [in] long       lOptions
        );
    [helpstring("Sets the value for or adds a new IUnknown value property.")] HRESULT 
    SetIUnknownValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] IUnknown   *pValue,
        [in] long       lOptions
        );
    [helpstring("Sets the value for or adds a new QWORD value property.")] HRESULT 
    SetQwordValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] CURRENCY   qwValue,
        [in] long       lOptions
        );
    [helpstring("Sets the value for or adds a new DATE value property.")] HRESULT 
    SetDateValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] DATE       dateValue,
        [in] long       lOptions
        );
    [helpstring("Sets the value for or adds a new SAFEARRAY value property.")] HRESULT 
    SetArrayValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] SAFEARRAY(BSTR) psaValue,
        [in] long       lOptions
        );

    [helpstring("Retrieves the value for a long value property.")] HRESULT 
    GetLongValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [out] long      *plValue,
        [in] long       lOptions
        );
    [helpstring("Retrieves the value for a string value property.")] HRESULT 
    GetStringValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [out] LPWSTR    *pstrValue,
        [in] long       lOptions
        );
    [helpstring("Retrieves the value for an IUnknown value property.")] HRESULT 
    GetIUnknownValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [out] IUnknown  **pValue,
        [in] long       lOptions
        );
    [helpstring("Retrieves the value for a QWORD value property.")] HRESULT 
    GetQwordValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [out] CURRENCY  *pqwValue,
        [in] long       lOptions
        );
    [helpstring("Retrieves the value for a DATE value property.")] HRESULT 
    GetDateValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [out] DATE      *pdateValue,
        [in] long       lOptions
        );
    [helpstring("Retrieves the value for a SAFEARRAY value property.")] HRESULT 
    GetArrayValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [out] SAFEARRAY(BSTR) *ppsaValue,
        [in] long       lOptions
        );

    [helpstring("Sets the value for or adds a new property.")] HRESULT 
    SetValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] VARIANT    Value,
        [in] long       lOptions
        );
    [helpstring("Retrieves the value for a property.")] HRESULT 
    GetValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [out] VARIANT   *pValue,
        [in] long       lOptions
        );                     
    [helpstring("Retrieves the number of properties in the context.")] HRESULT 
    GetValueCount(
        [out] long     *pCount
        );
    [helpstring("Retrieves the name, value and hint for a specific property by index.")] HRESULT 
    GetIndexedValue(
        [in] long       lIndex,
        [out] LPWSTR    *pstrName,
        [out] long      *plNameHint,
        [out] VARIANT   *pValue,
        [out] long      *pdwResultOptions,
        [in] long       lOptions
        );

    [helpstring("Removes a specific property from the context.")] HRESULT 
    RemoveValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] long       lOptions
        );
    [helpstring("Removes all properties from the context.")] HRESULT 
    RemoveAllValues();

    [helpstring("Retrieves an enumeration value that indicates the context type.")] HRESULT 
    GetContextType( [out] WMS_CONTEXT_TYPE *pType );

    [helpstring("Retrieves the value for an IUnknown value property and calls QueryInterface to retrieve a pointer to the specified interface.")] HRESULT 
    GetAndQueryIUnknownValue(
        [in] LPCWSTR    pstrName,
        [in] long       lNameHint,
        [in] REFIID     riid,
        [out, iid_is(riid)] IUnknown  **pResult,
        [in] long       lOptions
        );

    [helpstring("Copies the specified properties to another context.")] HRESULT 
    CopyValues(
        [in] IWMSContext * pDest,
        [in] LPCWSTR    * pstrName,
        [in] long       * lNameHint,
        [in] long        lNames
        );
}

/////////////////////////////////////////////////////////////////////////////
// IWMSCommandContext
[
    object,
    uuid(75554931-5F0E-11d2-9F0E-006097D2D7CF),
    version(9.0),
    pointer_default(unique),
    helpstring("Provides methods for accessing and manipulating command request and command response contexts.")
]
interface IWMSCommandContext : IUnknown
{
    [helpstring("Retrieves a command request context.")] HRESULT 
    GetCommandRequest( [out] IWMSContext **ppProps);
    [helpstring("Retrieves a command response context.")] HRESULT 
    GetCommandResponse( [out] IWMSContext **ppProps);

    [helpstring("Removes all properties in the command request context.")] HRESULT 
    EraseCommandRequest();
    [helpstring("Removes all properties in the command response context.")] HRESULT 
    EraseCommandResponse();

    [helpstring("Specifies the identification number for a playlist entry.")] HRESULT 
    SetPlaylistGenerationId( [in] DWORD dwId );
    [helpstring("Retrieves the identification number for a playlist entry.")] HRESULT 
    GetPlaylistGenerationId( [out] DWORD *pdwId );
};




cpp_quote("#endif")




