Leaked source code of windows server 2003
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

//+---------------------------------------------------------------------------
//
// 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