mirror of https://github.com/tongzx/nt5src
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.
109 lines
3.2 KiB
109 lines
3.2 KiB
/*++
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|