00001 #if !defined(AFX_GETCPUUSAGE1_H__EB4F7708_88C4_4839_9AA0_6A57E33999B5__INCLUDED_) 00002 #define AFX_GETCPUUSAGE1_H__EB4F7708_88C4_4839_9AA0_6A57E33999B5__INCLUDED_ 00003 00004 #if _MSC_VER > 1000 00005 #pragma once 00006 #endif // _MSC_VER > 1000 00007 00008 // *************************************************************************************** 00009 00010 #include "winternl.h" 00011 00012 #define SystemBasicInformation 0 00013 #define SystemPerformanceInformation 2 00014 #define SystemTimeInformation 3 00015 00016 #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart)) 00017 00018 // *************************************************************************************** 00019 00020 typedef struct 00021 { 00022 DWORD dwUnknown1; 00023 ULONG uKeMaximumIncrement; 00024 ULONG uPageSize; 00025 ULONG uMmNumberOfPhysicalPages; 00026 ULONG uMmLowestPhysicalPage; 00027 ULONG uMmHighestPhysicalPage; 00028 ULONG uAllocationGranularity; 00029 PVOID pLowestUserAddress; 00030 PVOID pMmHighestUserAddress; 00031 ULONG uKeActiveProcessors; 00032 BYTE bKeNumberProcessors; 00033 BYTE bUnknown2; 00034 WORD wUnknown3; 00035 } SYSTEM_BASIC_INFORMATION; 00036 00037 typedef struct 00038 { 00039 LARGE_INTEGER liIdleTime; 00040 DWORD dwSpare[76]; 00041 } SYSTEM_PERFORMANCE_INFORMATION; 00042 00043 typedef struct 00044 { 00045 LARGE_INTEGER liKeBootTime; 00046 LARGE_INTEGER liKeSystemTime; 00047 LARGE_INTEGER liExpTimeZoneBias; 00048 ULONG uCurrentTimeZoneId; 00049 DWORD dwReserved; 00050 } SYSTEM_TIME_INFORMATION; 00051 00052 typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG); 00053 00054 // *************************************************************************************** 00055 00056 class CCpuUsage 00057 { 00058 public: 00059 PROCNTQSI NtQuerySystemInformation; 00060 00061 private: 00062 BOOL m_error; 00063 SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo; 00064 SYSTEM_TIME_INFORMATION SysTimeInfo; 00065 SYSTEM_BASIC_INFORMATION SysBaseInfo; 00066 double dbIdleTime; 00067 double dbSystemTime; 00068 LONG status; 00069 LARGE_INTEGER liOldIdleTime; 00070 LARGE_INTEGER liOldSystemTime; 00071 00072 public: 00073 int Get(char *process=NULL); 00074 CCpuUsage(); 00075 virtual ~CCpuUsage(); 00076 00077 }; 00078 00079 #endif // !defined(AFX_GETCPUUSAGE1_H__EB4F7708_88C4_4839_9AA0_6A57E33999B5__INCLUDED_)