Source code of Windows XP (NT5)
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) 1993 Microsoft Corporation
Module Name:
memory.c
Abstract:
Memory handling routines for Windows NT Setup API dll.
Author:
Ted Miller (tedm) 11-Jan-1995
Revision History:
Jamie Hunter (jamiehun) 13-Feb-1998
Improved this further for debugging added linked list, alloc tracing, memory fills and memory leak detection
jamiehun 30-April-1998
Added some more consistancy checks Put try/except around access
jimschm 27-Oct-1998
Wrote fast allocation routines to speed up setupapi.dll on Win9x
--*/
#include "precomp.h"
#pragma hdrstop
//
// String to be used when displaying insufficient memory msg box.
// We load it at process attach time so we can be guaranteed of
// being able to display it.
//
PCTSTR OutOfMemoryString;
#if MEM_DBG
DWORD g_Track = 0; PCSTR g_TrackFile = NULL; UINT g_TrackLine = 0;
DWORD g_MemoryFlags = 0; // set this to 1 in the debugger to catch some extra dbg assertions.
DWORD g_DbgAllocNum = -1; // set g_MemoryFlags to 1 and this to the allocation number you want
// to catch if the same number allocation leaks every time.
VOID SetTrackFileAndLine ( PCSTR File, UINT Line ) { if (!g_Track) { g_TrackFile = File; g_TrackLine = Line; }
g_Track++; }
VOID ClrTrackFileAndLine ( VOID ) { if (g_Track) { g_Track--; if (!g_Track) { g_TrackFile = NULL; g_TrackLine = 0; } } }
PVOID MyDebugMalloc( IN DWORD Size, IN PCSTR Filename, IN DWORD Line, IN DWORD Tag ) { return pSetupDebugMallocWithTag(Size, g_TrackFile ? g_TrackFile : Filename, g_TrackLine ? g_TrackLine : Line, Tag ); }
#endif
BOOL MemoryInitializeEx( IN BOOL Attach ) { if (Attach) { OutOfMemoryString = MyLoadString(IDS_OUTOFMEMORY); return(OutOfMemoryString != NULL); } else { MyFree(OutOfMemoryString);
return(TRUE); } }
VOID pSetupOutOfMemory( IN HWND Owner OPTIONAL ) { //
// Don't popup a dialog if we're not running interactively...
//
if(!(GlobalSetupFlags & PSPGF_NONINTERACTIVE)) {
MYASSERT(OutOfMemoryString);
//
// Use special combination of flags that guarantee
// display of the message box regardless of available memory.
//
MessageBox( Owner, OutOfMemoryString, NULL, MB_ICONHAND | MB_SYSTEMMODAL | MB_OK | MB_SETFOREGROUND ); } }
|