windows-nt/Source/XPSP1/NT/base/pnp/setupapi/memory.c

146 lines
2.7 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
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
);
}
}