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.
119 lines
3.8 KiB
119 lines
3.8 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1997.
|
|
//
|
|
// File: memsnap.cxx
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions: void memsnap( FILE* ) a function for sending a snapshot of
|
|
// all the processes in memory to a file stream
|
|
//
|
|
// Coupling:
|
|
//
|
|
// Notes: This function is used by CLog::Log when compiled with NO_NTLOG
|
|
// If you plan on using ntlog.dll, you do not even need this module
|
|
//
|
|
// History: 10-22-1996 ericne Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.cxx"
|
|
#pragma hdrstop
|
|
#include "memsnap.hxx"
|
|
|
|
// from pmon
|
|
#define BUFFER_SIZE 64*1024
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: memsnap
|
|
//
|
|
// Synopsis: Sends a snapshot of the current memory state to the indicated
|
|
// file stream
|
|
//
|
|
// Arguments: [pLogFile] -- File stream pointer
|
|
//
|
|
// Returns: (none)
|
|
//
|
|
// History: 10-22-1996 ericne Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void memsnap( FILE* pLogFile )
|
|
{
|
|
ULONG Offset1;
|
|
PUCHAR CurrentBuffer;
|
|
NTSTATUS Status;
|
|
PSYSTEM_PROCESS_INFORMATION ProcessInfo;
|
|
|
|
_ftprintf( pLogFile, _T("%10s%20s%10s%10s%10s%10s%10s%10s%10s\r\n"),
|
|
_T("Process ID"), _T("Proc.Name"), _T("Wrkng.Set"),
|
|
_T("PagedPool"), _T("NonPgdPl"), _T("Pagefile"), _T("Commit"),
|
|
_T("Handles"), _T("Threads") );
|
|
|
|
// grab all process information
|
|
// log line format, all comma delimited,CR delimited:
|
|
// pid,name,WorkingSetSize,QuotaPagedPoolUsage,QuotaNonPagedPoolUsage,
|
|
// PagefileUsage,CommitCharge<CR> log all process information
|
|
|
|
// from pmon
|
|
Offset1 = 0;
|
|
CurrentBuffer = (PUCHAR) VirtualAlloc( NULL,
|
|
BUFFER_SIZE,
|
|
MEM_COMMIT,
|
|
PAGE_READWRITE );
|
|
if( NULL == CurrentBuffer )
|
|
{
|
|
_tprintf( _T("VirtualAlloc Error!\r\n") );
|
|
return;
|
|
}
|
|
|
|
// from pmon
|
|
// get commit charge
|
|
// get all of the status information
|
|
Status = NtQuerySystemInformation( SystemProcessInformation,
|
|
CurrentBuffer,
|
|
BUFFER_SIZE,
|
|
NULL );
|
|
|
|
if( STATUS_SUCCESS == Status )
|
|
{
|
|
while( 1 )
|
|
{
|
|
|
|
// get process info from buffer
|
|
ProcessInfo = (PSYSTEM_PROCESS_INFORMATION) &CurrentBuffer[Offset1];
|
|
Offset1 += ProcessInfo->NextEntryOffset;
|
|
|
|
// print in file
|
|
_ftprintf( pLogFile,_T("%10i%20ws%10u%10u%10u%10u%10u%10u%10u\r\n"),
|
|
ProcessInfo->UniqueProcessId,
|
|
ProcessInfo->ImageName.Buffer,
|
|
ProcessInfo->WorkingSetSize,
|
|
ProcessInfo->QuotaPagedPoolUsage,
|
|
ProcessInfo->QuotaNonPagedPoolUsage,
|
|
ProcessInfo->PagefileUsage,
|
|
ProcessInfo->PrivatePageCount,
|
|
ProcessInfo->HandleCount,
|
|
ProcessInfo->NumberOfThreads );
|
|
|
|
if( 0 == ProcessInfo->NextEntryOffset )
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_ftprintf( pLogFile, _T("NtQuerySystemInformation call failed!\r\n") );
|
|
}
|
|
|
|
// Free the memory
|
|
VirtualFree( CurrentBuffer, 0, MEM_RELEASE );
|
|
|
|
} //memsnap
|
|
|