Leaked source code of windows server 2003
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.
|
|
/*==========================================================================
* * Copyright (C) 1994-1997 Microsoft Corporation. All Rights Reserved. * * File: mydebug.c * Content: debugging printf - stolen from direct draw. *@@BEGIN_MSINTERNAL * History: * Date By Reason * ==== == ====== * aarono splurp. * 6/6/98 aarono Debug support for link statistics *@@END_MSINTERNAL * ***************************************************************************/ #undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "newdpf.h"
#include "mydebug.h"
#include "bilink.h"
#include <stdarg.h>
#ifdef DEBUG
typedef struct _MEM_BLOCK { union { BILINK Bilink; struct _FB { struct _MEM_BLOCK *pNext; struct _MEM_BLOCK *pPrev; } FB; }; UINT len; UINT tmAlloc; CHAR data[4]; } MEM_BLOCK, *PMEM_BLOCK;
LONG TotalMem = 0;
struct _MEMLIST { union{ BILINK Bilink; struct _FB FB; }; } MemList={(BILINK *)&MemList,(BILINK *)&MemList};
UINT nInit=0xFFFFFFFF; CRITICAL_SECTION MEM_CS;
VOID My_GlobalAllocInit() { if(!InterlockedIncrement(&nInit)){ InitializeCriticalSection(&MEM_CS); } }
VOID My_GlobalAllocDeInit() { if(InterlockedDecrement(&nInit)&0x80000000){ DeleteCriticalSection(&MEM_CS); } }
HGLOBAL My_GlobalAlloc( UINT uFlags, DWORD dwBytes ) { PMEM_BLOCK pMem;
UINT lTotalMem;
pMem=(PMEM_BLOCK)GlobalAlloc(uFlags,dwBytes+sizeof(MEM_BLOCK)-4); pMem->len=dwBytes; pMem->tmAlloc=GetTickCount(); EnterCriticalSection(&MEM_CS); InsertAfter(&pMem->Bilink, &MemList.Bilink); TotalMem+=dwBytes; lTotalMem=TotalMem; LeaveCriticalSection(&MEM_CS);
DPF(9,"GlobalAlloc: Allocated %d TotalMem %d\n",dwBytes, lTotalMem); { IN_WRITESTATS InWS; memset((PVOID)&InWS,0xFF,sizeof(IN_WRITESTATS)); InWS.stat_USER2=lTotalMem; DbgWriteStats(&InWS); }
return((HGLOBAL)&pMem->data[0]); }
HGLOBAL My_GlobalFree( HGLOBAL hMem ) { PUCHAR pData=(PUCHAR)(hMem); PMEM_BLOCK pMem; UINT lTotalMem; UINT dwBytes;
pMem=CONTAINING_RECORD(pData, MEM_BLOCK, data); EnterCriticalSection(&MEM_CS); Delete(&pMem->Bilink); TotalMem-=pMem->len; dwBytes=pMem->len; lTotalMem=TotalMem; LeaveCriticalSection(&MEM_CS); DPF(9,"GlobalFree: Freed %d TotalMem %d\n",dwBytes,lTotalMem); { IN_WRITESTATS InWS; memset((PVOID)&InWS,0xFF,sizeof(IN_WRITESTATS)); InWS.stat_USER2=lTotalMem; DbgWriteStats(&InWS); } return GlobalFree(pMem); }
#endif /* DEBUG */
|