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) 2000 Microsoft Corporation
Module Name:
HeapIgnoreMoveable.cpp
Abstract:
After 64k calls to GlobalAlloc, we are no longer able to use the GMEM_MOVEABLE flag. This shim just filters it in the case of GlobalAlloc failing.
This is a known issue with the heap manager on NT and is a won't fix. According to adrmarin:
The table with handles cannot grow dynamic. The initial size is hardcoded to 64k handles. Increasing this number will affect the reserved address for each process.
See Whistler bug #147032.
Notes:
This is a general purpose shim - superceded by EmulateHeap.
History:
02/19/2000 linstev Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(HeapIgnoreMoveable) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(GlobalAlloc) APIHOOK_ENUM_END
/*++
Remove the GMEM_MOVEABLE flag in the case of failure.
--*/
HGLOBAL APIHOOK(GlobalAlloc)( UINT uFlags, DWORD dwBytes ) { HGLOBAL hRet = ORIGINAL_API(GlobalAlloc)(uFlags, dwBytes);
if (hRet == NULL) { hRet = ORIGINAL_API(GlobalAlloc)( uFlags & ~GMEM_MOVEABLE, dwBytes); }
return hRet; } /*++
Register hooked functions
--*/
HOOK_BEGIN APIHOOK_ENTRY(KERNEL32.DLL, GlobalAlloc) HOOK_END
IMPLEMENT_SHIM_END
|