📄 pviewdat.c
字号:
/******************************************************************************
P V I E W D A T A
Name: pviewdat.c
Description:
This module collects the data to be displayed in pview.
******************************************************************************/
#include <windows.h>
#include <winperf.h>
#include "perfdata.h"
#include "pviewdat.h"
#include "pviewdlg.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#define NODATA TEXT("--------")
void FormatTimeFields(double fTime,PTIME_FIELD pTimeFld);
DWORD PutCounterDWKB(HWND Wnd,DWORD dwItemID,PPERF_INSTANCE pInst,
PPERF_OBJECT pObj,DWORD dwCounterIdx);
DWORD PutCounterHEX
(HWND hWnd,
DWORD dwItemID,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj,
DWORD dwCounterIdx);
DWORD PutCounterDW
(HWND hWnd,
DWORD dwItemID,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj,
DWORD dwCounterIdx);
void PaintAddressSpace
(HWND hMemDlg,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj,
DWORD TotalID,
DWORD NoAccessID,
DWORD NoAccessIndex,
DWORD ReadOnlyID,
DWORD ReadOnlyIndex,
DWORD ReadWriteID,
DWORD ReadWriteIndex,
DWORD WriteCopyID,
DWORD WriteCopyIndex,
DWORD ExecuteID,
DWORD ExecuteIndex1,
DWORD ExecuteIndex2,
DWORD ExecuteIndex3,
DWORD ExecuteIndex4);
void PaintMemDlgAddrData
(HWND hMemDlg,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj);
void PaintMemDlgVMData
(HWND hMemDlg,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj);
void PaintPviewDlgMemoryData
(HWND hPviewDlg,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj);
void RefreshMemoryDlgImageList
(HWND hImageList,
DWORD ParentIndex,
PPERF_OBJECT pImageObj);
WORD ProcessPriority
(PPERF_OBJECT pObject,
PPERF_INSTANCE pInstance);
void SetProcessListText
(PPERF_INSTANCE pInst,
PPERF_COUNTER pCPU,
PPERF_COUNTER pPRIV,
PPERF_COUNTER pProcID,
double fTime,
LPTSTR str);
void SetThreadListText
(PPERF_INSTANCE pInst,
PPERF_COUNTER pCPU,
PPERF_COUNTER pPRIV,
double fTime,
LPTSTR str);
//*********************************************************************
//
// FormatTimeFields
//
// Formats a double value to time fields.
//
void FormatTimeFields (double fTime,
PTIME_FIELD pTimeFld)
{
INT i;
double f;
f = fTime/3600;
pTimeFld->Hours = i = (int)f;
f = f - i;
pTimeFld->Mins = i = (int)(f = f * 60);
f = f - i;
pTimeFld->Secs = i = (int)(f = f * 60);
f = f - i;
pTimeFld->mSecs = (int)(f * 1000);
}
//*********************************************************************
//
// PutCounterDWKB
//
// Display a DWORD counter's data in KB units.
//
DWORD PutCounterDWKB (HWND hWnd,
DWORD dwItemID,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj,
DWORD dwCounterIdx)
{
PPERF_COUNTER pCounter;
DWORD *pdwData;
TCHAR szTemp[20];
if (pCounter = FindCounter (pObj, dwCounterIdx))
{
pdwData = (DWORD *) CounterData (pInst, pCounter);
wsprintf (szTemp, TEXT("%ld KB"), *pdwData/1024);
SetDlgItemText (hWnd, dwItemID, szTemp);
return *pdwData;
}
else
{
SetDlgItemText (hWnd, dwItemID, NODATA);
return 0;
}
}
//*********************************************************************
//
// PutCounterHEX
//
// Display a DWORD counter's data in hex.
//
DWORD PutCounterHEX (HWND hWnd,
DWORD dwItemID,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj,
DWORD dwCounterIdx)
{
PPERF_COUNTER pCounter;
DWORD *pdwData;
TCHAR szTemp[20];
if (pCounter = FindCounter (pObj, dwCounterIdx))
{
pdwData = (DWORD *) CounterData (pInst, pCounter);
wsprintf (szTemp, TEXT("0x%08x"), *pdwData);
SetDlgItemText (hWnd, dwItemID, szTemp);
return *pdwData;
}
else
{
SetDlgItemText (hWnd, dwItemID, NODATA);
return 0;
}
}
//*********************************************************************
//
// PutCounterDWKB
//
// Display a DWORD counter's data.
//
DWORD PutCounterDW (HWND hWnd,
DWORD dwItemID,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj,
DWORD dwCounterIdx)
{
PPERF_COUNTER pCounter;
DWORD *pdwData;
if (pCounter = FindCounter (pObj, dwCounterIdx))
{
pdwData = (DWORD *) CounterData (pInst, pCounter);
SetDlgItemInt (hWnd, dwItemID, *pdwData, FALSE);
return *pdwData;
}
else
{
SetDlgItemText (hWnd, dwItemID, NODATA);
return 0;
}
}
//*********************************************************************
//
// PaintAddressSpace
//
//
void PaintAddressSpace (HWND hMemDlg,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj,
DWORD TotalID,
DWORD NoAccessID,
DWORD NoAccessIndex,
DWORD ReadOnlyID,
DWORD ReadOnlyIndex,
DWORD ReadWriteID,
DWORD ReadWriteIndex,
DWORD WriteCopyID,
DWORD WriteCopyIndex,
DWORD ExecuteID,
DWORD ExecuteIndex1,
DWORD ExecuteIndex2,
DWORD ExecuteIndex3,
DWORD ExecuteIndex4)
{
PPERF_COUNTER pCounter;
DWORD *pdwData;
TCHAR szTemp[20];
DWORD dwTotal = 0;
DWORD dwExecute = 0;
BOOL bCounter = FALSE;
dwTotal += PutCounterDWKB (hMemDlg, NoAccessID, pInst, pObj, NoAccessIndex);
dwTotal += PutCounterDWKB (hMemDlg, ReadOnlyID, pInst, pObj, ReadOnlyIndex);
dwTotal += PutCounterDWKB (hMemDlg, ReadWriteID, pInst, pObj, ReadWriteIndex);
dwTotal += PutCounterDWKB (hMemDlg, WriteCopyID, pInst, pObj, WriteCopyIndex);
// execute is the sum of the following
//
if (pCounter = FindCounter (pObj, ExecuteIndex1))
{
pdwData = (DWORD *) CounterData (pInst, pCounter);
dwTotal += *pdwData;
dwExecute += *pdwData;
bCounter = TRUE;
}
if (pCounter = FindCounter (pObj, ExecuteIndex2))
{
pdwData = (DWORD *) CounterData (pInst, pCounter);
dwTotal += *pdwData;
dwExecute += *pdwData;
bCounter = TRUE;
}
if (pCounter = FindCounter (pObj, ExecuteIndex3))
{
pdwData = (DWORD *) CounterData (pInst, pCounter);
dwTotal += *pdwData;
dwExecute += *pdwData;
bCounter = TRUE;
}
if (pCounter = FindCounter (pObj, ExecuteIndex4))
{
pdwData = (DWORD *) CounterData (pInst, pCounter);
dwTotal += *pdwData;
dwExecute += *pdwData;
bCounter = TRUE;
}
if (bCounter)
{
wsprintf (szTemp, TEXT("%ld KB"), dwExecute/1024);
SetDlgItemText (hMemDlg, ExecuteID, szTemp);
}
else
SetDlgItemText (hMemDlg, ExecuteID, NODATA);
wsprintf (szTemp, TEXT("%ld KB"), dwTotal/1024);
SetDlgItemText (hMemDlg, TotalID, szTemp);
}
//*********************************************************************
//
// PaintMemDlgAddrData
//
// Paint the memory dialog address space data.
//
void PaintMemDlgAddrData(HWND hMemDlg,
PPERF_INSTANCE pInst,
PPERF_OBJECT pObj)
{
PaintAddressSpace (hMemDlg, pInst, pObj,
MEMORY_TOTALPRIVATE_COMMIT,
MEMORY_PRIVATE_NOACCESS, PX_PROCESS_PRIVATE_NOACCESS,
MEMORY_PRIVATE_READONLY, PX_PROCESS_PRIVATE_READONLY,
MEMORY_PRIVATE_READWRITE, PX_PROCESS_PRIVATE_READWRITE,
MEMORY_PRIVATE_WRITECOPY, PX_PROCESS_PRIVATE_WRITECOPY,
MEMORY_PRIVATE_EXECUTE, PX_PROCESS_PRIVATE_EXECUTABLE,
PX_PROCESS_PRIVATE_EXE_READONLY,
PX_PROCESS_PRIVATE_EXE_READWRITE,
PX_PROCESS_PRIVATE_EXE_WRITECOPY);
PaintAddressSpace (hMemDlg, pInst, pObj,
MEMORY_TOTALMAPPED_COMMIT,
MEMORY_MAPPED_NOACCESS, PX_PROCESS_MAPPED_NOACCESS,
MEMORY_MAPPED_READONLY, PX_PROCESS_MAPPED_READONLY,
MEMORY_MAPPED_READWRITE, PX_PROCESS_MAPPED_READWRITE,
MEMORY_MAPPED_WRITECOPY, PX_PROCESS_MAPPED_WRITECOPY,
MEMORY_MAPPED_EXECUTE, PX_PROCESS_MAPPED_EXECUTABLE,
PX_PROCESS_MAPPED_EXE_READONLY,
PX_PROCESS_MAPPED_EXE_READWRITE,
PX_PROCESS_MAPPED_EXE_WRITECOPY);
PaintAddressSpace (hMemDlg, pInst, pObj,
MEMORY_TOTALIMAGE_COMMIT,
MEMORY_IMAGE_NOACCESS, PX_PROCESS_IMAGE_NOACCESS,
MEMORY_IMAGE_READONLY, PX_PROCESS_IMAGE_READONLY,
MEMORY_IMAGE_READWRITE, PX_PROCESS_IMAGE_READWRITE,
MEMORY_IMAGE_WRITECOPY, PX_PROCESS_IMAGE_WRITECOPY,
MEMORY_IMAGE_EXECUTE, PX_PROCESS_IMAGE_EXECUTABLE,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -