Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

289 lines
10 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1998
//
// File: mprsnap.idl
//
//--------------------------------------------------------------------------
// mprsnap.idl : IDL source for MPRSNAP DLLs
//
#ifndef _MPRSNAP_IDL_
#define _MPRSNAP_IDL_
import "wtypes.idl";
typedef BYTE * PBYTE;
//----------------------------------------------------------------------------
// Struct: InfoBlock
//
// Contains the information for a single block in an infobase.
//----------------------------------------------------------------------------
typedef struct _InfoBlock
{
DWORD dwType; // block type (e.g. IP_RIP, IPX_PROTOCOL_SAP)
DWORD dwSize; // size in bytes of each entry in 'pData'
DWORD dwCount; // number of structures in 'pData'
PBYTE pData; // block data bytes
} InfoBlock;
/*---------------------------------------------------------------------------
IEnumInfoBlock
---------------------------------------------------------------------------*/
[
object,
uuid(66A2DB01-D706-11d0-A37B-00C04FC9DA04),
local,
pointer_default(unique),
]
interface IEnumInfoBlock : IUnknown
{
HRESULT Next( [in] ULONG uNum,
[out] InfoBlock **ppBlock,
[out] ULONG * pNumReturned );
HRESULT Skip( [in] ULONG uNum );
HRESULT Reset();
HRESULT Clone( [out] IEnumInfoBlock **ppBlockEnum );
};
cpp_quote("#define DeclareIEnumInfoBlockMembers(IPURE) \\")
cpp_quote(" STDMETHOD(Next)(ULONG uNum, InfoBlock **ppBlock, \\")
cpp_quote(" ULONG *pNumReturned) IPURE; \\")
cpp_quote(" STDMETHOD(Skip)(ULONG uNum) IPURE; \\")
cpp_quote(" STDMETHOD(Reset)() IPURE; \\")
cpp_quote(" STDMETHOD(Clone)(IEnumInfoBlock **ppBlockEnum) IPURE; \\")
/*---------------------------------------------------------------------------
IInfoBase
---------------------------------------------------------------------------*/
[
object,
uuid(66a2db00-d706-11d0-a37b-00c04fc9da04),
local,
pointer_default(unique),
]
interface IInfoBase : IUnknown
{
import "unknwn.idl";
// import "wtypes.idl";
//--------------------------------------------------------------------
// Function: Load
//
// Loads value named 'pszValue' from subkey 'pszKey' of 'hkey'
//--------------------------------------------------------------------
HRESULT Load( [in] HKEY hKey,
[in,string] LPCOLESTR pszKey,
[in,string] LPCOLESTR pszValue);
//--------------------------------------------------------------------
// Function: Save
//
// saves value named 'pszValue' to subkey 'pszKey' of 'hkey';
// 'pszKey' cannot be a path
//--------------------------------------------------------------------
HRESULT Save( [in] HKEY hKey,
[in,string] LPCOLESTR pszKey,
[in,string] LPCOLESTR pszValue);
//--------------------------------------------------------------------
// Function: Unload
//
// unloads current infobase contents
//--------------------------------------------------------------------
HRESULT Unload();
//--------------------------------------------------------------------
// Function: CopyFrom
//
// copies contents of infobase 'src'
//--------------------------------------------------------------------
HRESULT CopyFrom( [in] IInfoBase * pSrc );
//--------------------------------------------------------------------
// Function: LoadFrom
//
// loads from byte-array 'pBase'
//--------------------------------------------------------------------
HRESULT LoadFrom( [in] DWORD dwSize,
[in,size_is(dwSize)] PBYTE pBase);
//--------------------------------------------------------------------
// Function: WriteTo
//
// sets 'pBase' to point to allocated memory into which
// opaque info is written; saves size of '*pBase' in 'dwSize'
//--------------------------------------------------------------------
HRESULT WriteTo( [out] PBYTE *ppBase,
[out] DWORD *pdwSize);
//--------------------------------------------------------------------
// Function: GetBlock
//
// retrieves 'dwNth' block of type 'dwType' from the list of blocks
// The block does NOT need to be freed up (this assumes that this
// local, not remote).
//--------------------------------------------------------------------
HRESULT GetBlock( [in] DWORD dwType,
[out] InfoBlock **ppBlock,
[in] DWORD dwNth);
//--------------------------------------------------------------------
// Function: SetBlock
//
// Replaces 'dwNth' block of type 'dwType' with a copy of 'pBlock'.
// Note that this copies the data for the block from 'pBlock->pData'.
//--------------------------------------------------------------------
HRESULT SetBlock( [in] DWORD dwType,
[in] InfoBlock *pBlock,
[in] DWORD dwNth);
//--------------------------------------------------------------------
// Function: AddBlock
//
// Add's a new block of type 'dwType' to the list of blocks
//
// This will make a copy of pData (this behavior differs from SetData()).
//
// Defaults: dwCount=1, bRemoveFirst=FALSE
//--------------------------------------------------------------------
HRESULT AddBlock( [in] DWORD dwType,
[in] DWORD dwSize,
[in] PBYTE pData,
[in] DWORD dwCount,
[in] BOOL bRemoveFirst);
//--------------------------------------------------------------------
// Function: GetData
//
// Retrieves the data for the 'dwNth' block of type 'dwType'.
// Do NOT free up the data here.
//--------------------------------------------------------------------
HRESULT GetData( [in] DWORD dwType,
[in] DWORD dwNth,
[out] PBYTE * ppData);
//--------------------------------------------------------------------
// Function: SetData
//
// Replaces the data for the 'dwNth' block of type 'dwType'.
// Note that this does not copy 'pData'; the block is changed
// to point to 'pData', and thus 'pData' should not be a pointer
// to data on the stack, and it should not be deleted.
// Furthermore, it must have been allocated using 'new'.
//--------------------------------------------------------------------
HRESULT SetData( [in] DWORD dwType,
[in] DWORD dwSize,
[in] PBYTE pData,
[in] DWORD dwCount,
[in] DWORD dwNth);
//--------------------------------------------------------------------
// Function: RemoveBlock
//
// Removes the 'dwNth' block of type 'dwType' from the list of blocks.
//--------------------------------------------------------------------
HRESULT RemoveBlock( [in] DWORD dwType,
[in] DWORD dwNth);
//--------------------------------------------------------------------
// Function: BlockExists
//
// Returns S_OK if a block of the specified type is in the block-list,
// S_FALSE otherwise
//--------------------------------------------------------------------
HRESULT BlockExists( [in] DWORD dwType );
//--------------------------------------------------------------------
// Function: ProtocolExists
//
// Returns TRUE if the given routing-protocol exists in the info-base;
// this is so if the block is present and non-empty.
//--------------------------------------------------------------------
HRESULT ProtocolExists( [in] DWORD dwProtocol );
//--------------------------------------------------------------------
// Function: RemoveAllBlocks
//
// Removes all blocks from the list of blocks.
//--------------------------------------------------------------------
HRESULT RemoveAllBlocks ();
//--------------------------------------------------------------------
// Function: QueryBlockList
//
// Returns a reference to the list of blocks;
// the returned list contains items of type 'SInfoBlock',
// and the list must not be modified.
//--------------------------------------------------------------------
HRESULT QueryBlockList([out] IEnumInfoBlock **ppBlockEnum);
//--------------------------------------------------------------------
// Function: GetInfo
//
// Returns information about the infobase. This is useful for
// determining if this is a new infobase or not.
//
// Returns the size (in bytes) of the InfoBase as well as the
// number of blocks.
//--------------------------------------------------------------------
HRESULT GetInfo([out] DWORD *pdwSize, [out] int *pcBlocks);
};
cpp_quote("#define DeclareIInfoBaseMembers(IPURE) \\")
cpp_quote(" STDMETHOD(Load)(HKEY hKey, \\")
cpp_quote(" LPCOLESTR pszKey, \\")
cpp_quote(" LPCOLESTR pszValue) IPURE; \\")
cpp_quote(" STDMETHOD(Save)(HKEY hKey, \\")
cpp_quote(" LPCOLESTR pszKey, \\")
cpp_quote(" LPCOLESTR pszValue) IPURE; \\")
cpp_quote(" STDMETHOD(Unload)() IPURE; \\")
cpp_quote(" STDMETHOD(CopyFrom)(IInfoBase * pSrc) IPURE; \\")
cpp_quote(" STDMETHOD(LoadFrom)(DWORD dwSize, \\")
cpp_quote(" PBYTE pBase) IPURE; \\")
cpp_quote(" STDMETHOD(WriteTo)(PBYTE *ppBase, \\")
cpp_quote(" DWORD *pdwSize) IPURE; \\")
cpp_quote(" STDMETHOD(GetBlock)(DWORD dwType, \\")
cpp_quote(" InfoBlock **ppBlock, \\")
cpp_quote(" DWORD dwNth) IPURE; \\")
cpp_quote(" STDMETHOD(SetBlock)(DWORD dwType, \\")
cpp_quote(" InfoBlock *pBlock, \\")
cpp_quote(" DWORD dwNth) IPURE; \\")
cpp_quote(" STDMETHOD(AddBlock)(DWORD dwType, \\")
cpp_quote(" DWORD dwSize, \\")
cpp_quote(" PBYTE pData, \\")
cpp_quote(" DWORD dwCount, \\")
cpp_quote(" BOOL bRemoveFirst) IPURE; \\")
cpp_quote(" STDMETHOD(GetData)(DWORD dwType, \\")
cpp_quote(" DWORD dwNth, \\")
cpp_quote(" PBYTE * ppData) IPURE; \\")
cpp_quote(" STDMETHOD(SetData)(DWORD dwType, \\")
cpp_quote(" DWORD dwSize, \\")
cpp_quote(" PBYTE pData, \\")
cpp_quote(" DWORD dwCount, \\")
cpp_quote(" DWORD dwNth) IPURE; \\")
cpp_quote(" STDMETHOD(RemoveBlock)(DWORD dwType, \\")
cpp_quote(" DWORD dwNth) IPURE; \\")
cpp_quote(" STDMETHOD(BlockExists)(DWORD dwType ) IPURE; \\")
cpp_quote(" STDMETHOD(ProtocolExists)(DWORD dwProtocol ) IPURE; \\")
cpp_quote(" STDMETHOD(RemoveAllBlocks)() IPURE; \\")
cpp_quote(" STDMETHOD(QueryBlockList)(IEnumInfoBlock **ppBlockEnum) IPURE; \\")
cpp_quote(" STDMETHOD(GetInfo)(DWORD *pdwSize, int *pcBlocks) IPURE; \\")
#endif // _MPRSNAP_IDL_