老狼ghost分析-0

這是菜雞的分析文章,大佬還請繞道。後續應該會慢慢的更新完!
由於技術水平有限,可能還會有分析錯誤的,還請多多指正!並且由於是一邊學習一邊記錄的所以排版也比較亂。

頭文件:
Buffer.h
CpuUsage.h
FileManagerDlg.h
FileTransferModeDlg.h
IniFile.h
InputDlg.h
IOCPServer.h
Mapper.h
Resource.h
ScreenSpyDlg.h
setting.h
SEU_QQwry.h
ShellDlg.h
SkinH.h
stdafx.h
SystemDlg.h
targetver.h
TrueColorToolBar.h
老狼ghost2.h
老狼ghost2Dlg.h

源文件:
Buffer.cpp
CpuUsage.cpp
FileManagerDlg.cpp
FileTransferModeDlg.cpp
IniFile.cpp
InputDlg.cpp
IOCPServer.cpp
ScreenSpyDlg.cpp
setting.cpp
SEU_QQwry.cpp
ShellDlg.cpp
stdafx.cpp
SystemDlg.cpp
TrueColorToolBar.cpp
老狼ghost2.cpp
老狼ghost2Dlg.cpp

// CpuUsage.h: interface for the CCpuUsage class.
// CCpuUsage類的接口
//////////////////////////////////////////////////////////////////////


#if !defined(AFX_CPUUSAGE_H__60CF4F03_9F01_41E8_A9FB_51F065D5F3C2__INCLUDED_)
#define AFX_CPUUSAGE_H__60CF4F03_9F01_41E8_A9FB_51F065D5F3C2__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/*
所有Performance Data Helper(PDH)函數都返回PDH_STATUS類型的值。如果函數成功,則返回值爲ERROR_SUCCESS。否則,該函數將返回系統錯誤代碼或PDH錯誤代碼。
*/
#include <pdh.h>     //用來獲取CPU的使用率  在使用pdh 庫之前,我們需要包含相應的頭文件和加載相應的庫:
#include <pdhmsg.h>	//表示錯誤狀態

#pragma comment(lib,"PDH.lib")  //加載與PDH相應的庫

#define MAX_RAW_VALUES		20
const char szCounterName[]="\\Processor(_Total)\\% Processor Time";
typedef struct _tag_PDHCounterStruct {//定義結構
    HCOUNTER hCounter;      // Handle to the counter - given to use by PDH Library
       //給PDH庫使用的計數器的句柄
       //HCOUNTER-->HANDLE  其實就是句柄
	/*
	Windows下使用PDH來獲取CPU的使用率
	//data type definitions  數據類型定義
	 typedef HANDLE       PDH_HCOUNTER;  定義別名
	 typedef HANDLE       PDH_HQUERY;  定義別名
	 typedef HANDLE       PDH_HLOG;   定義別名
	 typedef PDH_HCOUNTER HCOUNTER;   定義別名
	 typedef PDH_HQUERY   HQUERY;   定義別名
	*/
	
	int nNextIndex;         
	// element to get the next raw value
	//元素獲取下一個原始值
	
	int nOldestIndex;       
	// element containing the oldes raw value
	//元素,其中包含舊的原始值
	
	int nRawCount;          
	// number of elements containing raw values
	//包含原始值的元素數量
	
	PDH_RAW_COUNTER a_RawValue[MAX_RAW_VALUES]; 
	// Ring buffer to contain raw values  循環緩衝區包含原始值
	
	/*
		typedef struct _PDH_RAW_COUNTER {
		volatile DWORD CStatus;
		//指示計數器是否有效的計算器狀態。在計算中使用數據或顯示其值之前,請檢查此成員
		FILETIME	TimeStamp;
		//收集數據的本地時間,格式爲FILETIME
		LONGLONG	FirstValue;
		//第一個原始計算器值
		LONGLONG	SecondValue;
		//第二個原始計算器的值。速率計算器需要兩個值才能計算出可顯示的值
		DWORD	MultiCount;
		//如果計算器類型包含PERF_MULTI_COUNTER標誌,則此成員包含計算中使用的其它計數器數據
		} PDH_RAW_COUNTER, * PPDH_RAW_COUNTER;
	*/
} PDHCOUNTERSTRUCT, *PPDHCOUNTERSTRUCT;

class CCpuUsage
{
	public:
	CCpuUsage();
	virtual ~CCpuUsage();
	BOOL	Init();
	int GetUsage();
	
	protected:
	PPDHCOUNTERSTRUCT   m_pCounterStruct;
	HQUERY      m_hQuery;
};
#endif // !defined(AFX_CPUUSAGE_H__60CF4F03_9F01_41E8_A9FB_51F065D5F3C2__INCLUDED_)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章