windows-nt/Source/XPSP1/NT/admin/wmi/wbem/winmgmt/wbemcomn/arena.h

110 lines
3.2 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
ARENA.H
Abstract:
Standard Arena allocators.
History:
a-raymcc 23-Apr-96
--*/
#ifndef _ALLOC_H_
#define _ALLOC_H_
#include "corepol.h"
class POLARITY CArena
{
virtual LPVOID Alloc(SIZE_T dwBytes) = 0;
virtual LPVOID Realloc(LPVOID pOriginal, SIZE_T dwNewSize) = 0;
virtual BOOL Free(LPVOID) = 0;
};
class POLARITY CWin32DefaultArena : public CArena
{
public:
CWin32DefaultArena() {}
~CWin32DefaultArena() {}
// Allocates dwBytes of memory using the standard WBEM allocator
LPVOID Alloc(SIZE_T dwBytes) {return WbemMemAlloc(dwBytes);}
// Reallocates the block from Alloc using the standard WBEM allocator
LPVOID Realloc(LPVOID pOriginal, SIZE_T dwNewSize)
{return WbemMemReAlloc(pOriginal, dwNewSize);}
// Frees the block of memory from Alloc or Realloc using the standard
// WBEM allocator
BOOL Free(LPVOID pBlock) {return WbemMemFree(pBlock);}
//
// sets the heap used by the allocation functions. Will return false
// if one is already set. Most likely this function will be called at
// module initialization, such as DllMain. Calling this function
// is optional when -- 1 ) You can accept using the ProcessHeap and
// 2 ) You are guaranteed that no allocations will occur before
// static initialization has occurred in this module.
//
static BOOL WbemHeapInitialize( HANDLE hHeap );
static void WbemHeapFree( );
// Explicitly define as __cdecl as these are causing backwards compatibility
// issues WbemMemAlloc, WbemMemFree and WbemMemSize
// This is the main allocator for the whole of WinMgmt. All parts
// of WinMgmt which allocate memory through HeapAlloc and the
// the likes should use this instead
static LPVOID __cdecl WbemMemAlloc(SIZE_T dwBytes);
// This is the main allocator for the whole of WinMgmt. This
// reallocates a block returned through WbemMemAlloc
static LPVOID WbemMemReAlloc(LPVOID pOriginal, SIZE_T dwNewSize);
// This is the main allocator for the whole of WinMgmt. This
// frees up a block returned through WbemMemAlloc or WbemMemReAlloc.
static BOOL __cdecl WbemMemFree(LPVOID pBlock) ;
static BSTR WbemSysAllocString(const wchar_t *wszString);
static BSTR WbemSysAllocStringByteLen(const char *szString, UINT len);
static INT WbemSysReAllocString(BSTR *, const wchar_t *wszString);
static BSTR WbemSysAllocStringLen(const wchar_t *wszString, UINT);
static int WbemSysReAllocStringLen(BSTR *, const wchar_t *wszString, UINT);
static void WbemSysFreeString(BSTR bszString) {SysFreeString(bszString);}
static BOOL WbemOutOfMemory();
//Returns the size of an allocated block
static SIZE_T __cdecl WbemMemSize(LPVOID pBlock);
// Makes sure there is probably enough virtual memory available to
// carry out an operation.
static BOOL ValidateMemSize(BOOL bLargeValidation = FALSE);
static BOOL WriteHeapHint();
static void Compact();
// Allows validation calls
static BOOL ValidateHeap( DWORD dwFlags, LPCVOID lpMem );
//
static HANDLE GetArenaHeap();
};
#endif