|  | /* | 
|  | *  ReactOS Task Manager | 
|  | * | 
|  | *  perfdata.h | 
|  | * | 
|  | *  Copyright (C) 1999 - 2001  Brian Palmer  <brianp@reactos.org> | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
|  | */ | 
|  |  | 
|  | #ifndef __PERFDATA_H | 
|  | #define __PERFDATA_H | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #if 0 | 
|  | typedef struct _TIME { | 
|  | DWORD LowPart; | 
|  | LONG HighPart; | 
|  | } TIME, *PTIME; | 
|  | #endif | 
|  |  | 
|  | typedef ULARGE_INTEGER	TIME, *PTIME; | 
|  |  | 
|  | /* typedef WCHAR			UNICODE_STRING; */ | 
|  | typedef struct _UNICODE_STRING { | 
|  | USHORT	Length; | 
|  | USHORT	MaximumLength; | 
|  | PWSTR	Buffer; | 
|  | } UNICODE_STRING, *PUNICODE_STRING; | 
|  |  | 
|  | typedef struct _PERFDATA | 
|  | { | 
|  | WCHAR				ImageName[MAX_PATH]; | 
|  | ULONG				ProcessId; | 
|  | WCHAR				UserName[MAX_PATH]; | 
|  | ULONG				SessionId; | 
|  | ULONG				CPUUsage; | 
|  | TIME				CPUTime; | 
|  | ULONG				WorkingSetSizeBytes; | 
|  | ULONG				PeakWorkingSetSizeBytes; | 
|  | ULONG				WorkingSetSizeDelta; | 
|  | ULONG				PageFaultCount; | 
|  | ULONG				PageFaultCountDelta; | 
|  | ULONG				VirtualMemorySizeBytes; | 
|  | ULONG				PagedPoolUsagePages; | 
|  | ULONG				NonPagedPoolUsagePages; | 
|  | ULONG				BasePriority; | 
|  | ULONG				HandleCount; | 
|  | ULONG				ThreadCount; | 
|  | ULONG				USERObjectCount; | 
|  | ULONG				GDIObjectCount; | 
|  | IO_COUNTERS			IOCounters; | 
|  |  | 
|  | TIME				UserTime; | 
|  | TIME				KernelTime; | 
|  | } PERFDATA, *PPERFDATA; | 
|  |  | 
|  | typedef struct _CLIENT_ID | 
|  | { | 
|  | HANDLE UniqueProcess; | 
|  | HANDLE UniqueThread; | 
|  | } CLIENT_ID, *PCLIENT_ID; | 
|  |  | 
|  | typedef enum _KWAIT_REASON | 
|  | { | 
|  | Executive, | 
|  | FreePage, | 
|  | PageIn, | 
|  | PoolAllocation, | 
|  | DelayExecution, | 
|  | Suspended, | 
|  | UserRequest, | 
|  | WrExecutive, | 
|  | WrFreePage, | 
|  | WrPageIn, | 
|  | WrDelayExecution, | 
|  | WrSuspended, | 
|  | WrUserRequest, | 
|  | WrQueue, | 
|  | WrLpcReceive, | 
|  | WrLpcReply, | 
|  | WrVirtualMemory, | 
|  | WrPageOut, | 
|  | WrRendezvous, | 
|  | Spare2, | 
|  | Spare3, | 
|  | Spare4, | 
|  | Spare5, | 
|  | Spare6, | 
|  | WrKernel, | 
|  | MaximumWaitReason, | 
|  | } KWAIT_REASON; | 
|  |  | 
|  | /* SystemProcessThreadInfo (5) */ | 
|  | typedef struct _SYSTEM_THREAD_INFORMATION | 
|  | { | 
|  | TIME		KernelTime; | 
|  | TIME		UserTime; | 
|  | TIME		CreateTime; | 
|  | ULONG		TickCount; | 
|  | ULONG		StartEIP; | 
|  | CLIENT_ID	ClientId; | 
|  | ULONG		DynamicPriority; | 
|  | ULONG		BasePriority; | 
|  | ULONG		nSwitches; | 
|  | DWORD		State; | 
|  | KWAIT_REASON	WaitReason; | 
|  |  | 
|  | } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION; | 
|  |  | 
|  | typedef struct SYSTEM_PROCESS_INFORMATION | 
|  | { | 
|  | ULONG				RelativeOffset; | 
|  | ULONG				ThreadCount; | 
|  | ULONG				Unused1 [6]; | 
|  | TIME				CreateTime; | 
|  | TIME				UserTime; | 
|  | TIME				KernelTime; | 
|  | UNICODE_STRING		Name; | 
|  | ULONG				BasePriority; | 
|  | ULONG				ProcessId; | 
|  | ULONG				ParentProcessId; | 
|  | ULONG				HandleCount; | 
|  | ULONG				SessionId; | 
|  | ULONG				Unused2; | 
|  | ULONG				PeakVirtualSizeBytes; | 
|  | ULONG				TotalVirtualSizeBytes; | 
|  | ULONG				PageFaultCount; | 
|  | ULONG				PeakWorkingSetSizeBytes; | 
|  | ULONG				TotalWorkingSetSizeBytes; | 
|  | ULONG				PeakPagedPoolUsagePages; | 
|  | ULONG				TotalPagedPoolUsagePages; | 
|  | ULONG				PeakNonPagedPoolUsagePages; | 
|  | ULONG				TotalNonPagedPoolUsagePages; | 
|  | ULONG				TotalPageFileUsageBytes; | 
|  | ULONG				PeakPageFileUsageBytes; | 
|  | ULONG				TotalPrivateBytes; | 
|  | SYSTEM_THREAD_INFORMATION	ThreadSysInfo [1]; | 
|  |  | 
|  | } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | DWORD	dwUnknown1; | 
|  | ULONG	uKeMaximumIncrement; | 
|  | ULONG	uPageSize; | 
|  | ULONG	uMmNumberOfPhysicalPages; | 
|  | ULONG	uMmLowestPhysicalPage; | 
|  | ULONG	uMmHighestPhysicalPage; | 
|  | ULONG	uAllocationGranularity; | 
|  | PVOID	pLowestUserAddress; | 
|  | PVOID	pMmHighestUserAddress; | 
|  | ULONG	uKeActiveProcessors; | 
|  | BYTE	bKeNumberProcessors; | 
|  | BYTE	bUnknown2; | 
|  | WORD	wUnknown3; | 
|  | } SYSTEM_BASIC_INFORMATION; | 
|  |  | 
|  | /* SystemPerformanceInfo (2) */ | 
|  | typedef struct _SYSTEM_PERFORMANCE_INFORMATION | 
|  | { | 
|  | LARGE_INTEGER	/*TotalProcessorTime*/liIdleTime; | 
|  | LARGE_INTEGER	IoReadTransferCount; | 
|  | LARGE_INTEGER	IoWriteTransferCount; | 
|  | LARGE_INTEGER	IoOtherTransferCount; | 
|  | ULONG		IoReadOperationCount; | 
|  | ULONG		IoWriteOperationCount; | 
|  | ULONG		IoOtherOperationCount; | 
|  | ULONG		MmAvailablePages; | 
|  | ULONG		MmTotalCommittedPages; | 
|  | ULONG		MmTotalCommitLimit; | 
|  | ULONG		MmPeakLimit; | 
|  | ULONG		PageFaults; | 
|  | ULONG		WriteCopies; | 
|  | ULONG		TransitionFaults; | 
|  | ULONG		Unknown1; | 
|  | ULONG		DemandZeroFaults; | 
|  | ULONG		PagesInput; | 
|  | ULONG		PagesRead; | 
|  | ULONG		Unknown2; | 
|  | ULONG		Unknown3; | 
|  | ULONG		PagesOutput; | 
|  | ULONG		PageWrites; | 
|  | ULONG		Unknown4; | 
|  | ULONG		Unknown5; | 
|  | ULONG		PoolPagedBytes; | 
|  | ULONG		PoolNonPagedBytes; | 
|  | ULONG		Unknown6; | 
|  | ULONG		Unknown7; | 
|  | ULONG		Unknown8; | 
|  | ULONG		Unknown9; | 
|  | ULONG		MmTotalSystemFreePtes; | 
|  | ULONG		MmSystemCodepage; | 
|  | ULONG		MmTotalSystemDriverPages; | 
|  | ULONG		MmTotalSystemCodePages; | 
|  | ULONG		Unknown10; | 
|  | ULONG		Unknown11; | 
|  | ULONG		Unknown12; | 
|  | ULONG		MmSystemCachePage; | 
|  | ULONG		MmPagedPoolPage; | 
|  | ULONG		MmSystemDriverPage; | 
|  | ULONG		CcFastReadNoWait; | 
|  | ULONG		CcFastReadWait; | 
|  | ULONG		CcFastReadResourceMiss; | 
|  | ULONG		CcFastReadNotPossible; | 
|  | ULONG		CcFastMdlReadNoWait; | 
|  | ULONG		CcFastMdlReadWait; | 
|  | ULONG		CcFastMdlReadResourceMiss; | 
|  | ULONG		CcFastMdlReadNotPossible; | 
|  | ULONG		CcMapDataNoWait; | 
|  | ULONG		CcMapDataWait; | 
|  | ULONG		CcMapDataNoWaitMiss; | 
|  | ULONG		CcMapDataWaitMiss; | 
|  | ULONG		CcPinMappedDataCount; | 
|  | ULONG		CcPinReadNoWait; | 
|  | ULONG		CcPinReadWait; | 
|  | ULONG		CcPinReadNoWaitMiss; | 
|  | ULONG		CcPinReadWaitMiss; | 
|  | ULONG		CcCopyReadNoWait; | 
|  | ULONG		CcCopyReadWait; | 
|  | ULONG		CcCopyReadNoWaitMiss; | 
|  | ULONG		CcCopyReadWaitMiss; | 
|  | ULONG		CcMdlReadNoWait; | 
|  | ULONG		CcMdlReadWait; | 
|  | ULONG		CcMdlReadNoWaitMiss; | 
|  | ULONG		CcMdlReadWaitMiss; | 
|  | ULONG		CcReadaheadIos; | 
|  | ULONG		CcLazyWriteIos; | 
|  | ULONG		CcLazyWritePages; | 
|  | ULONG		CcDataFlushes; | 
|  | ULONG		CcDataPages; | 
|  | ULONG		ContextSwitches; | 
|  | ULONG		Unknown13; | 
|  | ULONG		Unknown14; | 
|  | ULONG		SystemCalls; | 
|  |  | 
|  | } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | LARGE_INTEGER	liKeBootTime; | 
|  | LARGE_INTEGER	liKeSystemTime; | 
|  | LARGE_INTEGER	liExpTimeZoneBias; | 
|  | ULONG			uCurrentTimeZoneId; | 
|  | DWORD			dwReserved; | 
|  | } SYSTEM_TIME_INFORMATION; | 
|  |  | 
|  | /* SystemCacheInformation (21) */ | 
|  | typedef struct _SYSTEM_CACHE_INFORMATION | 
|  | { | 
|  | ULONG	CurrentSize; | 
|  | ULONG	PeakSize; | 
|  | ULONG	PageFaultCount; | 
|  | ULONG	MinimumWorkingSet; | 
|  | ULONG	MaximumWorkingSet; | 
|  | ULONG	Unused[4]; | 
|  |  | 
|  | } SYSTEM_CACHE_INFORMATION; | 
|  |  | 
|  | /* SystemPageFileInformation (18) */ | 
|  | typedef | 
|  | struct _SYSTEM_PAGEFILE_INFORMATION | 
|  | { | 
|  | ULONG		RelativeOffset; | 
|  | ULONG		CurrentSizePages; | 
|  | ULONG		TotalUsedPages; | 
|  | ULONG		PeakUsedPages; | 
|  | UNICODE_STRING	PagefileFileName; | 
|  |  | 
|  | } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION; | 
|  |  | 
|  | /* SystemHandleInformation (16) */ | 
|  | /* (see ontypes.h) */ | 
|  | typedef | 
|  | struct _SYSTEM_HANDLE_ENTRY | 
|  | { | 
|  | ULONG	OwnerPid; | 
|  | BYTE	ObjectType; | 
|  | BYTE	HandleFlags; | 
|  | USHORT	HandleValue; | 
|  | PVOID	ObjectPointer; | 
|  | ULONG	AccessMask; | 
|  |  | 
|  | } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY; | 
|  |  | 
|  | typedef | 
|  | struct _SYSTEM_HANDLE_INFORMATION | 
|  | { | 
|  | ULONG			Count; | 
|  | SYSTEM_HANDLE_ENTRY	Handle [1]; | 
|  |  | 
|  | } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; | 
|  |  | 
|  | /* SystemProcessorPerformanceInformation (8) */ | 
|  | typedef | 
|  | struct _SYSTEM_PROCESSORTIME_INFO | 
|  | { | 
|  | LARGE_INTEGER	IdleTime; | 
|  | LARGE_INTEGER	KernelTime; | 
|  | LARGE_INTEGER	UserTime; | 
|  | LARGE_INTEGER	DpcTime; | 
|  | LARGE_INTEGER	InterruptTime; | 
|  | ULONG			InterruptCount; | 
|  | ULONG			Unused; | 
|  |  | 
|  | } SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO; | 
|  |  | 
|  | #define SystemBasicInformation			0 | 
|  | #define SystemPerformanceInformation	2 | 
|  | #define SystemTimeInformation			3 | 
|  | #define	SystemProcessInformation		5 | 
|  | #define SystemProcessorTimeInformation	8 | 
|  | #define SystemHandleInformation			16 | 
|  | #define SystemPageFileInformation		18 | 
|  | #define SystemCacheInformation			21 | 
|  |  | 
|  | #define Li2Double(x) ((double)((x).QuadPart)) | 
|  |  | 
|  | #define GR_GDIOBJECTS     0       /* Count of GDI objects */ | 
|  | #define GR_USEROBJECTS    1       /* Count of USER objects */ | 
|  |  | 
|  | typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG); | 
|  | typedef DWORD (WINAPI *PROCGGR)(HANDLE,DWORD); | 
|  | typedef BOOL (WINAPI *PROCGPIC)(HANDLE,PIO_COUNTERS); | 
|  |  | 
|  | BOOL	PerfDataInitialize(void); | 
|  | void	PerfDataUninitialize(void); | 
|  | void	PerfDataRefresh(void); | 
|  |  | 
|  | ULONG	PerfDataGetProcessCount(void); | 
|  | ULONG	PerfDataGetProcessorUsage(void); | 
|  | ULONG	PerfDataGetProcessorSystemUsage(void); | 
|  |  | 
|  | BOOL	PerfDataGetImageName(ULONG Index, LPTSTR lpImageName, int nMaxCount); | 
|  | ULONG	PerfDataGetProcessId(ULONG Index); | 
|  | BOOL	PerfDataGetUserName(ULONG Index, LPTSTR lpUserName, int nMaxCount); | 
|  | ULONG	PerfDataGetSessionId(ULONG Index); | 
|  | ULONG	PerfDataGetCPUUsage(ULONG Index); | 
|  | TIME	PerfDataGetCPUTime(ULONG Index); | 
|  | ULONG	PerfDataGetWorkingSetSizeBytes(ULONG Index); | 
|  | ULONG	PerfDataGetPeakWorkingSetSizeBytes(ULONG Index); | 
|  | ULONG	PerfDataGetWorkingSetSizeDelta(ULONG Index); | 
|  | ULONG	PerfDataGetPageFaultCount(ULONG Index); | 
|  | ULONG	PerfDataGetPageFaultCountDelta(ULONG Index); | 
|  | ULONG	PerfDataGetVirtualMemorySizeBytes(ULONG Index); | 
|  | ULONG	PerfDataGetPagedPoolUsagePages(ULONG Index); | 
|  | ULONG	PerfDataGetNonPagedPoolUsagePages(ULONG Index); | 
|  | ULONG	PerfDataGetBasePriority(ULONG Index); | 
|  | ULONG	PerfDataGetHandleCount(ULONG Index); | 
|  | ULONG	PerfDataGetThreadCount(ULONG Index); | 
|  | ULONG	PerfDataGetUSERObjectCount(ULONG Index); | 
|  | ULONG	PerfDataGetGDIObjectCount(ULONG Index); | 
|  | BOOL	PerfDataGetIOCounters(ULONG Index, PIO_COUNTERS pIoCounters); | 
|  |  | 
|  | ULONG	PerfDataGetCommitChargeTotalK(void); | 
|  | ULONG	PerfDataGetCommitChargeLimitK(void); | 
|  | ULONG	PerfDataGetCommitChargePeakK(void); | 
|  |  | 
|  | ULONG	PerfDataGetKernelMemoryTotalK(void); | 
|  | ULONG	PerfDataGetKernelMemoryPagedK(void); | 
|  | ULONG	PerfDataGetKernelMemoryNonPagedK(void); | 
|  |  | 
|  | ULONG	PerfDataGetPhysicalMemoryTotalK(void); | 
|  | ULONG	PerfDataGetPhysicalMemoryAvailableK(void); | 
|  | ULONG	PerfDataGetPhysicalMemorySystemCacheK(void); | 
|  |  | 
|  | ULONG	PerfDataGetSystemHandleCount(void); | 
|  |  | 
|  | ULONG	PerfDataGetTotalThreadCount(void); | 
|  |  | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | #endif /* __PERFDATA_H */ |