Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
mem.c
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 4k
Category:
Windows Kernel
Development Platform:
Visual C++
- #include "ctlspriv.h"
- // Define some things for debug.h
- //
- #define SZ_DEBUGINI "ccshell.ini"
- #ifndef UNIX
- #define SZ_DEBUGSECTION "comctl32"
- #define SZ_MODULE "COMCTL32"
- #else
- #define SZ_DEBUGSECTION "comctrl"
- #define SZ_MODULE "COMCTRL"
- #endif
- #define DECLARE_DEBUG
- #include <debug.h>
- //========== Memory Management =============================================
- //----------------------------------------------------------------------------
- // Define a Global Shared Heap that we use allocate memory out of that we
- // Need to share between multiple instances.
- #ifndef WINNT
- HANDLE g_hSharedHeap = NULL;
- #define GROWABLE 0
- #define MAXHEAPSIZE GROWABLE
- #define HEAP_SHARED 0x04000000 /* put heap in shared memory */
- #endif
- void Mem_Terminate()
- {
- #ifndef WINNT
- // Assuming that everything else has exited
- //
- if (g_hSharedHeap != NULL)
- HeapDestroy(g_hSharedHeap);
- g_hSharedHeap = NULL;
- #endif
- }
- #ifndef WINNT
- HANDLE InitSharedHeap(void)
- {
- ENTERCRITICAL;
- if (g_hSharedHeap == NULL)
- {
- g_hSharedHeap = HeapCreate(HEAP_SHARED, 1, MAXHEAPSIZE);
- }
- LEAVECRITICAL;
- return g_hSharedHeap;
- }
- #endif
- void * WINAPI Alloc(long cb)
- {
- // I will assume that this is the only one that needs the checks to
- // see if the heap has been previously created or not
- #if defined(WINNT) || defined(MAINWIN)
- return (void *)LocalAlloc(LPTR, cb);
- #else
- HANDLE hHeap = GetSharedHeapHandle();
- // If still NULL we have problems!
- if (hHeap == NULL)
- return(NULL);
- return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, cb);
- #endif
- }
- void * WINAPI ReAlloc(void * pb, long cb)
- {
- if (pb == NULL)
- return Alloc(cb);
- #if defined(WINNT) || defined(MAINWIN)
- return (void *)LocalReAlloc((HLOCAL)pb, cb, LMEM_ZEROINIT | LMEM_MOVEABLE);
- #else
- return HeapReAlloc(g_hSharedHeap, HEAP_ZERO_MEMORY, pb, cb);
- #endif
- }
- BOOL WINAPI Free(void * pb)
- {
- #if defined(WINNT) || defined(MAINWIN)
- return (LocalFree((HLOCAL)pb) == NULL);
- #else
- return HeapFree(g_hSharedHeap, 0, pb);
- #endif
- }
- DWORD_PTR WINAPI GetSize(void * pb)
- {
- #if defined(WINNT) || defined(MAINWIN)
- return LocalSize((HLOCAL)pb);
- #else
- return HeapSize(g_hSharedHeap, 0, pb);
- #endif
- }
- //----------------------------------------------------------------------------
- // The following functions are for debug only and are used to try to
- // calculate memory usage.
- //
- #ifdef DEBUG
- typedef struct _HEAPTRACE
- {
- DWORD cAlloc;
- DWORD cFailure;
- DWORD cReAlloc;
- ULONG_PTR cbMaxTotal;
- DWORD cCurAlloc;
- ULONG_PTR cbCurTotal;
- } HEAPTRACE;
- HEAPTRACE g_htShell = {0}; // Start of zero...
- LPVOID WINAPI ControlAlloc(HANDLE hheap, DWORD cb)
- {
- LPVOID lp = HeapAlloc(hheap, HEAP_ZERO_MEMORY, cb);;
- if (lp == NULL)
- {
- g_htShell.cFailure++;
- return NULL;
- }
- // Update counts.
- g_htShell.cAlloc++;
- g_htShell.cCurAlloc++;
- g_htShell.cbCurTotal += cb;
- if (g_htShell.cbCurTotal > g_htShell.cbMaxTotal)
- g_htShell.cbMaxTotal = g_htShell.cbCurTotal;
- return lp;
- }
- LPVOID WINAPI ControlReAlloc(HANDLE hheap, LPVOID pb, DWORD cb)
- {
- LPVOID lp;
- SIZE_T cbOld;
- cbOld = HeapSize(hheap, 0, pb);
- lp = HeapReAlloc(hheap, HEAP_ZERO_MEMORY, pb,cb);
- if (lp == NULL)
- {
- g_htShell.cFailure++;
- return NULL;
- }
- // Update counts.
- g_htShell.cReAlloc++;
- g_htShell.cbCurTotal += cb - cbOld;
- if (g_htShell.cbCurTotal > g_htShell.cbMaxTotal)
- g_htShell.cbMaxTotal = g_htShell.cbCurTotal;
- return lp;
- }
- BOOL WINAPI ControlFree(HANDLE hheap, LPVOID pb)
- {
- SIZE_T cbOld = HeapSize(hheap, 0, pb);
- BOOL fRet = HeapFree(hheap, 0, pb);
- if (fRet)
- {
- // Update counts.
- g_htShell.cCurAlloc--;
- g_htShell.cbCurTotal -= cbOld;
- }
- return(fRet);
- }
- SIZE_T WINAPI ControlSize(HANDLE hheap, LPVOID pb)
- {
- return (DWORD) HeapSize(hheap, 0, pb);
- }
- #endif // DEBUG
- #if defined(FULL_DEBUG) && defined(WIN32)
- #include "../inc/deballoc.c"
- #endif // defined(FULL_DEBUG) && defined(WIN32)