78 lines
2.2 KiB
C
78 lines
2.2 KiB
C
/**************************************************************************
|
|
* USERGDI1.C
|
|
*
|
|
* Returns information about USER.EXE and GDI.EXE
|
|
*
|
|
**************************************************************************/
|
|
|
|
#include "toolpriv.h"
|
|
|
|
/* SystemHeapInfo
|
|
* Returns information about USER's and GDI's heaps
|
|
*/
|
|
|
|
BOOL TOOLHELPAPI SystemHeapInfo(
|
|
SYSHEAPINFO FAR* lpSysHeap)
|
|
{
|
|
MODULEENTRY ModuleEntry;
|
|
#ifndef WOW
|
|
DWORD dw;
|
|
WORD wFreeK;
|
|
WORD wMaxHeapK;
|
|
#endif
|
|
|
|
/* Check the structure version number and pointer */
|
|
if (!wLibInstalled || !lpSysHeap ||
|
|
lpSysHeap->dwSize != sizeof (SYSHEAPINFO))
|
|
return FALSE;
|
|
|
|
/* Find the user data segment */
|
|
ModuleEntry.dwSize = sizeof (MODULEENTRY);
|
|
lpSysHeap->hUserSegment =
|
|
UserGdiDGROUP(ModuleFindName(&ModuleEntry, "USER"));
|
|
lpSysHeap->hGDISegment =
|
|
UserGdiDGROUP(ModuleFindName(&ModuleEntry, "GDI"));
|
|
|
|
#ifndef WOW
|
|
/* We get the information about the heap percentages differently in
|
|
* 3.0 and 3.1
|
|
*/
|
|
if ((wTHFlags & TH_WIN30) || !lpfnGetFreeSystemResources)
|
|
{
|
|
/* Get the space information about USER's heap */
|
|
dw = UserGdiSpace(lpSysHeap->hUserSegment);
|
|
wFreeK = LOWORD(dw) / 1024;
|
|
wMaxHeapK = HIWORD(dw) / 1024;
|
|
if (wMaxHeapK)
|
|
lpSysHeap->wUserFreePercent = wFreeK * 100 / wMaxHeapK;
|
|
else
|
|
lpSysHeap->wUserFreePercent = 0;
|
|
|
|
/* Get the space information about GDI's heap */
|
|
dw = UserGdiSpace(lpSysHeap->hGDISegment);
|
|
wFreeK = LOWORD(dw) / 1024;
|
|
wMaxHeapK = HIWORD(dw) / 1024;
|
|
if (wMaxHeapK)
|
|
lpSysHeap->wGDIFreePercent = wFreeK * 100 / wMaxHeapK;
|
|
else
|
|
lpSysHeap->wGDIFreePercent = 0;
|
|
}
|
|
|
|
/* Get the information from USER in 3.1 */
|
|
else
|
|
{
|
|
lpSysHeap->wUserFreePercent =
|
|
(*(WORD (FAR PASCAL *)(WORD))lpfnGetFreeSystemResources)(2);
|
|
lpSysHeap->wGDIFreePercent =
|
|
(*(WORD (FAR PASCAL *)(WORD))lpfnGetFreeSystemResources)(1);
|
|
}
|
|
#else
|
|
|
|
lpSysHeap->wUserFreePercent = GetFreeSystemResources(GFSR_USERRESOURCES);
|
|
lpSysHeap->wGDIFreePercent = GetFreeSystemResources(GFSR_GDIRESOURCES);
|
|
|
|
#endif
|
|
|
|
return TRUE;
|
|
}
|