PSAPI在Windows2000和windows XP中都提供,它包含的函数能够使得获取进程或设备驱动的信息更加容易。在MSDN中可以查找到PSAPI的详细信息。这里以占用内存为例。
1. 进程占用内存结构是:
typedef
struct
_PROCESS_MEMORY_COUNTERS
...
{
DWORD cb;
DWORD PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
}
PROCESS_MEMORY_COUNTERS;

typedef PROCESS_MEMORY_COUNTERS
*
PPROCESS_MEMORY_COUNTERS;
2. 打印内存占用的函数可以写为
bool
PrintMemoryInfo(
int
stage
/**/
/*DWORD processID*/
)

...
{
PROCESS_MEMORY_COUNTERS pmc;
FILE* fp = fopen("MemoryUse.log", "at+");

switch(stage)

...{
case 0: fprintf(fp, " before working : ");
break;
case 1: fprintf(fp, " after initialed : ");
break;
case 2: fprintf(fp, " during running : ");
break;
case 10: fprintf(fp, " after finishing : ");
break;
}

if ( GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)) )

...{
fprintf(fp, " PageFaultCount: %d ", pmc.PageFaultCount );
fprintf(fp, " PeakWorkingSetSize: %d M ", pmc.PeakWorkingSetSize/1024/1024 );
fprintf(fp, " WorkingSetSize: %d M ", pmc.WorkingSetSize/1024/1024 );
fprintf(fp, " QuotaPeakPagedPoolUsage: %d ", pmc.QuotaPeakPagedPoolUsage);
fprintf(fp, " QuotaPagedPoolUsage: %d ", pmc.QuotaPagedPoolUsage );
fprintf(fp, " QuotaPeakNonPagedPoolUsage: %d ", pmc.QuotaPeakNonPagedPoolUsage );
fprintf(fp, " QuotaNonPagedPoolUsage: %d ", pmc.QuotaNonPagedPoolUsage );
fprintf(fp, " PagefileUsage: %d M ", pmc.PagefileUsage/1024/1024 );
fprintf(fp, " PeakPagefileUsage: %d M ", pmc.PeakPagefileUsage/1024/1024 );
}

fclose(fp);

return true;
}