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.
91 lines
1.7 KiB
91 lines
1.7 KiB
/*++
|
|
|
|
Copyright (C) 1999-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Abstract:
|
|
|
|
History:
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#include <arena.h>
|
|
#include <align.h>
|
|
|
|
class CGetHeap
|
|
{
|
|
private:
|
|
HANDLE m_hHeap;
|
|
BOOL m_bNewHeap;
|
|
public:
|
|
CGetHeap();
|
|
~CGetHeap();
|
|
|
|
operator HANDLE(){ return m_hHeap; };
|
|
};
|
|
|
|
CGetHeap g_Heap;
|
|
|
|
CGetHeap::CGetHeap():m_bNewHeap(FALSE)
|
|
{
|
|
#ifdef DBG
|
|
DWORD dwUsePrivateHeap = 1;
|
|
#else
|
|
DWORD dwUsePrivateHeap = 0;
|
|
#endif
|
|
HKEY hKey;
|
|
LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
|
__TEXT("Software\\Microsoft\\WBEM\\CIMOM"),
|
|
NULL,
|
|
KEY_READ,
|
|
&hKey);
|
|
|
|
if (ERROR_SUCCESS == lRet)
|
|
{
|
|
DWORD dwType;
|
|
DWORD dwSize = sizeof(DWORD);
|
|
lRet = RegQueryValueEx(hKey,
|
|
__TEXT("EnablePrivateMofdHeap"),
|
|
NULL,
|
|
&dwType,
|
|
(BYTE *)&dwUsePrivateHeap,
|
|
&dwSize);
|
|
RegCloseKey(hKey);
|
|
}
|
|
|
|
if (dwUsePrivateHeap)
|
|
{
|
|
m_hHeap = HeapCreate(0,0,0);
|
|
if (m_hHeap)
|
|
m_bNewHeap = TRUE;
|
|
}
|
|
else
|
|
{
|
|
m_hHeap = CWin32DefaultArena::GetArenaHeap();
|
|
}
|
|
if (NULL == m_hHeap)
|
|
m_hHeap = GetProcessHeap();
|
|
};
|
|
|
|
CGetHeap::~CGetHeap()
|
|
{
|
|
if (m_bNewHeap)
|
|
{
|
|
HeapDestroy(m_hHeap);
|
|
}
|
|
};
|
|
|
|
|
|
|
|
void* __cdecl operator new ( size_t size )
|
|
{
|
|
void * p = HeapAlloc(g_Heap,0,size);
|
|
return p;
|
|
}
|
|
|
|
void __cdecl operator delete ( void* pv )
|
|
{
|
|
HeapFree(g_Heap,0,pv);
|
|
}
|