114 lines
2.1 KiB
C++
114 lines
2.1 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
HeapPadAllocation.cpp
|
||
|
|
||
|
ModAbstract:
|
||
|
|
||
|
This shim pads heap allocations by n bytes - where n is 256 by default but
|
||
|
can be specified by command line.
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
This is a general purpose shim.
|
||
|
|
||
|
History:
|
||
|
|
||
|
09/28/1999 linstev Created
|
||
|
04/25/2000 linstev Added command line
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
IMPLEMENT_SHIM_BEGIN(HeapPadAllocation)
|
||
|
#include "ShimHookMacro.h"
|
||
|
|
||
|
APIHOOK_ENUM_BEGIN
|
||
|
APIHOOK_ENUM_ENTRY(RtlAllocateHeap)
|
||
|
APIHOOK_ENUM_END
|
||
|
|
||
|
#define DEFAULT_PAD_SIZE 256
|
||
|
|
||
|
DWORD g_dwPadSize = DEFAULT_PAD_SIZE;
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Increase the heap allocation size.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
PVOID
|
||
|
APIHOOK(RtlAllocateHeap)(
|
||
|
PVOID HeapHandle,
|
||
|
ULONG Flags,
|
||
|
SIZE_T Size
|
||
|
)
|
||
|
{
|
||
|
return ORIGINAL_API(RtlAllocateHeap)(HeapHandle, Flags, Size + g_dwPadSize);
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Handle DLL_PROCESS_ATTACH and DLL_PROCESS_DETACH in your notify function
|
||
|
to do initialization and uninitialization.
|
||
|
|
||
|
IMPORTANT: Make sure you ONLY call NTDLL and KERNEL32 APIs during
|
||
|
DLL_PROCESS_ATTACH notification. No other DLLs are initialized at that
|
||
|
point.
|
||
|
|
||
|
If your shim cannot initialize properly, return FALSE and none of the
|
||
|
APIs specified will be hooked.
|
||
|
|
||
|
--*/
|
||
|
BOOL
|
||
|
NOTIFY_FUNCTION(
|
||
|
DWORD fdwReason)
|
||
|
{
|
||
|
if (fdwReason == DLL_PROCESS_ATTACH)
|
||
|
{
|
||
|
CSTRING_TRY
|
||
|
{
|
||
|
CString csCl(COMMAND_LINE);
|
||
|
|
||
|
if (! csCl.IsEmpty())
|
||
|
{
|
||
|
WCHAR * unused = NULL;
|
||
|
g_dwPadSize = wcstol(csCl, &unused, 10);
|
||
|
}
|
||
|
if (g_dwPadSize == 0)
|
||
|
{
|
||
|
g_dwPadSize = DEFAULT_PAD_SIZE;
|
||
|
}
|
||
|
|
||
|
DPFN( eDbgLevelInfo, "Padding all heap allocations by %d bytes\n", g_dwPadSize);
|
||
|
}
|
||
|
CSTRING_CATCH
|
||
|
{
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Register hooked functions
|
||
|
|
||
|
--*/
|
||
|
|
||
|
HOOK_BEGIN
|
||
|
|
||
|
APIHOOK_ENTRY(NTDLL.DLL, RtlAllocateHeap)
|
||
|
CALL_NOTIFY_FUNCTION
|
||
|
|
||
|
HOOK_END
|
||
|
|
||
|
|
||
|
IMPLEMENT_SHIM_END
|
||
|
|