Windows2003-3790/inetcore/datacab/viaduct/msr2c/globals.cpp
2020-09-30 16:53:55 +02:00

103 lines
2.6 KiB
C++

//---------------------------------------------------------------------------
// Globals.cpp : Global information
//
// Copyright (c) 1996 Microsoft Corporation, All Rights Reserved
// Developed by Sheridan Software Systems, Inc.
//---------------------------------------------------------------------------
#include "stdafx.h"
SZTHISFILE
// our global memory allocator and global memory pool
//
HANDLE g_hHeap;
LPMALLOC g_pMalloc;
HINSTANCE g_hinstance;
//Count number of objects and number of locks.
ULONG g_cLockCount=0;
ULONG g_cObjectCount=0;
CRITICAL_SECTION g_CriticalSection;
// frequently used large integers
//
LARGE_INTEGER g_liMinus = {(ULONG)-1, -1}; // minus one
LARGE_INTEGER g_liZero = {0, 0}; // - zero -
LARGE_INTEGER g_liPlus = {0, 1}; // plus one
//=--------------------------------------------------------------------------=
// VDInitGlobals
//=--------------------------------------------------------------------------=
// Initialize global variables
//
// Parameters:
// hinstResource - [in] The instance handle that contains resource strings
//
// Output:
// TRUE if successful otherwise FALSE
//
BOOL VDInitGlobals(HINSTANCE hinstance)
{
g_pMalloc = NULL;
g_hinstance = hinstance;
g_hHeap = GetProcessHeap();
if (!g_hHeap)
{
FAIL("Couldn't get Process Heap.");
return FALSE;
}
InitializeCriticalSection(&g_CriticalSection);
return TRUE;
}
//=--------------------------------------------------------------------------=
// VDReleaseGlobals
//=--------------------------------------------------------------------------=
//
void VDReleaseGlobals()
{
if (g_pMalloc)
{
g_pMalloc->Release();
g_pMalloc = NULL;
}
#ifdef _DEBUG
DumpObjectCounters();
#endif // _DEBUG
DeleteCriticalSection(&g_CriticalSection);
}
//=--------------------------------------------------------------------------=
// VDUpdateObjectCount increments/decrements global object count
//=--------------------------------------------------------------------------=
//
void VDUpdateObjectCount(int cChange)
{
EnterCriticalSection(&g_CriticalSection);
g_cObjectCount += cChange;
// get global malloc pointer object count greater than zero
if (!g_pMalloc && g_cObjectCount > 0)
{
CoGetMalloc(MEMCTX_TASK, &g_pMalloc);
}
else
// release hold on global malloc pointer when no more objects
if (0 == g_cObjectCount && g_pMalloc)
{
g_pMalloc->Release();
g_pMalloc = NULL;
}
LeaveCriticalSection(&g_CriticalSection);
}