/*
 -	E X C H M E M . H
 -
 *	Purpose:
 *		
 *
 *	Parameters:
 *		
 *
 *	Returns:
 *		
 *
 *	Copyright (C) 1995-96, Microsoft Corporation.
 */

#ifndef _EXCHMEM_
#define _EXCHMEM_


#ifdef __cplusplus
extern "C"
{
#endif

//	Additional Heap Flags

#define HEAP_NO_FREE			0x00001000


//	API Function Prototypes

HANDLE
WINAPI
ExchHeapCreate(
	DWORD	dwFlags,
	DWORD	dwInitialSize,
	DWORD	dwMaxSize);
	
	
BOOL
WINAPI
ExchHeapDestroy(
	HANDLE	hHeap);
	
	
LPVOID
WINAPI
ExchHeapAlloc(
	HANDLE	hHeap,
	DWORD	dwFlags,
	DWORD	dwSize);
	
	
LPVOID
WINAPI
ExchHeapReAlloc(
	HANDLE	hHeap,
	DWORD	dwFlags,
	LPVOID	pvOld,
	DWORD	dwSize);
	
	
BOOL
WINAPI
ExchHeapFree(
	HANDLE	hHeap,
	DWORD	dwFlags,
	LPVOID	pvFree);


BOOL
WINAPI
ExchHeapLock(
	HANDLE hHeap);


BOOL
WINAPI
ExchHeapUnlock(
	HANDLE hHeap);


BOOL
WINAPI
ExchHeapWalk(
	HANDLE hHeap,
	LPPROCESS_HEAP_ENTRY lpEntry);


BOOL
WINAPI
ExchHeapValidate(
	HANDLE hHeap,
	DWORD dwFlags,
	LPCVOID lpMem);


SIZE_T
WINAPI
ExchHeapSize(
	HANDLE hHeap,
	DWORD dwFlags,
	LPCVOID lpMem);


SIZE_T
WINAPI
ExchHeapCompact(
	HANDLE hHeap,
	DWORD dwFlags);


HANDLE
WINAPI
ExchMHeapCreate(
	ULONG	cHeaps,
	DWORD	dwFlags,
	DWORD	dwInitialSize,
	DWORD	dwMaxSize);
	
	
BOOL
WINAPI
ExchMHeapDestroy(void);
	
	
LPVOID
WINAPI
ExchMHeapAlloc(
	DWORD	dwSize);
	
LPVOID
WINAPI
ExchMHeapAllocDebug(DWORD dwSize, char *szFileName, DWORD dwLineNumber);

LPVOID
WINAPI
ExchMHeapReAlloc(LPVOID	pvOld, DWORD dwSize);

LPVOID
WINAPI
ExchMHeapReAllocDebug(LPVOID pvOld, DWORD dwSize, char *szFileName, DWORD dwLineNumber);

BOOL
WINAPI
ExchMHeapFree(
	LPVOID	pvFree);


SIZE_T
WINAPI
ExchMHeapSize(
	LPVOID	pvSize);
	
LPVOID
WINAPI
ExchAlloc(
	DWORD	dwSize);
	
	
LPVOID
WINAPI
ExchReAlloc(
	LPVOID	pvOld,
	DWORD	dwSize);
	
	
BOOL
WINAPI
ExchFree(
	LPVOID	pvFree);


SIZE_T
WINAPI
ExchSize(
	LPVOID	pv);


//
//	Misc. Debug functions.  Available in retail and debug exchmem, but retail version is simply a stub..
//
   
VOID
WINAPI
ExchmemGetCallStack(DWORD_PTR *rgdwCaller, DWORD cFind);

VOID
WINAPI
ExchmemFormatSymbol(HANDLE hProcess, DWORD_PTR dwCaller, char rgchSymbol[], DWORD cbSymbol);

DWORD
WINAPI
ExchmemReloadSymbols(void);

#ifdef __cplusplus
}
#endif

#endif	// _EXCHMEM_