亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? alexfperf.cpp

?? vc++網絡編程教程的源碼。可能對使用vc網絡編程的有用。
?? CPP
字號:
///////////////////////////////////////////////////////////////////////
// If this program works, it was written by Alexander Fedorov.
// If not, I don't know who wrote it.
// mailto:lamer2000@hotmail.com
// Home Page: http://members.xoom.com/lamer2000/
// This file is part of Alexf Dialer.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
///////////////////////////////////////////////////////////////////////

// AlexfPerf.cpp: implementation of the CAlexfPerf class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "AlexfPerf.h"
#include <WINPERF.H>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// CAlexfPerf95 - class to receive performance stats under '95-98
//////////////////////////////////////////////////////////////////////

CAlexfPerf95::CAlexfPerf95(LPCTSTR pszObjName, LPCTSTR pszCounterName, LPCTSTR pszComputerName)
{
	m_bSuccess = FALSE;
	//Open up the HKEY_DYN_DATA key on the specified machine
	HKEY hKeyDynData;
	DWORD dwConnect;
	if (pszComputerName)
	{
		TCHAR pszComputer[_MAX_PATH];
		_tcscpy(pszComputer, pszComputerName);
		dwConnect = RegConnectRegistry(pszComputer, HKEY_DYN_DATA, &hKeyDynData);
	}
	else
		dwConnect = RegConnectRegistry(NULL, HKEY_DYN_DATA, &hKeyDynData);
	if (dwConnect != ERROR_SUCCESS) return;
	//Open the "HKEY_DYN_DATA\PerfStats\StartStat" registry key
	HKEY hOpen;
	if (RegOpenKeyEx(hKeyDynData, _T("PerfStats\\StartStat"), 0, KEY_READ, &hOpen) != ERROR_SUCCESS)
	{RegCloseKey(hKeyDynData); return;}
	//Query to get data size
	DWORD dwType;
	DWORD cbData;
	//Form the counter name which we are querying
	CString sCounterName;
	sCounterName.Format(_T("%s\\%s"), pszObjName, pszCounterName);
	if (ERROR_SUCCESS == RegQueryValueEx(hOpen, sCounterName, NULL, &dwType, NULL, &cbData))
	{
		//Query the performance start key to initialise the performace data
		BYTE* pByte = new BYTE[cbData];
		if (pByte)
		{
			m_bSuccess = (ERROR_SUCCESS == RegQueryValueEx(hOpen, sCounterName, NULL, &dwType, pByte, &cbData));
			//Remember the name of the computer we want
			m_sComputerName = pszComputerName;
			//Remember the name of the counter we want
			m_sCounterName = sCounterName;
			//Don't forget to delete the bit of memory we allocated
			delete [] pByte;
		}
	}
	//Don't forget to close the registry key
	RegCloseKey(hOpen);
	//Don't forget to close the registry key
	RegCloseKey(hKeyDynData);
}

CAlexfPerf95::~CAlexfPerf95()
{
	m_bSuccess = FALSE;
	//Handle calling StopCollecting twice
	if (m_sCounterName.IsEmpty()) return;
	//Open up the HKEY_DYN_DATA key on the specified machine
	HKEY hKeyDynData, hOpen;
	LPTSTR pszComputerName = m_sComputerName.GetBuffer(m_sComputerName.GetLength());
	DWORD dwConnect = RegConnectRegistry(pszComputerName, HKEY_DYN_DATA, &hKeyDynData);
	m_sComputerName.ReleaseBuffer();
	if (dwConnect != ERROR_SUCCESS) return;
	//Open the "HKEY_DYN_DATA\PerfStats\StopStat" registry key
	if (RegOpenKeyEx(hKeyDynData, _T("PerfStats\\StopStat"), 0, KEY_READ, &hOpen) != ERROR_SUCCESS)
	{RegCloseKey(hKeyDynData); return;}
	//Query to get data size
	DWORD dwType;
	DWORD cbData;
	if (RegQueryValueEx(hOpen, m_sCounterName, NULL, &dwType, NULL, &cbData) != ERROR_SUCCESS)
	{RegCloseKey(hKeyDynData); RegCloseKey(hOpen); return;}
	//Query the performance stop key to disable collection of performace data
	BYTE* pByte = new BYTE[cbData];
	if (pByte)
	{
		RegQueryValueEx(hOpen, m_sCounterName, NULL, &dwType, pByte, &cbData);
		delete [] pByte;
	}
	//Don't forget to close the registry key
	RegCloseKey(hOpen);
	RegCloseKey(hKeyDynData);
	m_sCounterName.Empty();
}

//接收數據統計
BOOL CAlexfPerf95::Collect(DWORD& dwData)
{
	if (!m_bSuccess) return FALSE;
	m_bSuccess = FALSE;
	ASSERT(m_sCounterName.GetLength()); //did you forget to call Start
	//打開注冊表項HKEY_DYN_DATA
	HKEY hKeyDynData, hOpen;
	LPTSTR pszComputerName = m_sComputerName.GetBuffer(m_sComputerName.GetLength());
	DWORD dwConnect = RegConnectRegistry(pszComputerName, HKEY_DYN_DATA, &hKeyDynData);
	m_sComputerName.ReleaseBuffer();
	if (dwConnect != ERROR_SUCCESS) return FALSE;
	//打開注冊表"HKEY_DYN_DATA\PerfStats\StatData"
	if (RegOpenKeyEx(hKeyDynData, _T("PerfStats\\StatData"), 0, KEY_READ, &hOpen) != ERROR_SUCCESS)
	//關閉注冊表
	{RegCloseKey(hKeyDynData); return FALSE;}
	//獲得數據
	DWORD dwType = REG_BINARY;
	DWORD cbData = 4;
	m_bSuccess = TRUE;

	if (RegQueryValueEx(hOpen, m_sCounterName, NULL, &dwType,
	(LPBYTE) &dwData, &cbData) != ERROR_SUCCESS) m_bSuccess = FALSE;
	RegCloseKey(hOpen);
	RegCloseKey(hKeyDynData);
	return m_bSuccess;
}

DWORD CAlexfPerf95::GetData()
{
	DWORD dw = 0;
	if (!m_bSuccess) return dw;
	Collect(dw);
	return dw;
}

//////////////////////////////////////////////////////////////////////
// CAlexfPerfNT - class to receive performance stats under NT
//////////////////////////////////////////////////////////////////////

#define Key "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009"

CAlexfPerfNT::	CAlexfPerfNT(LPCTSTR pszObjName, LPCTSTR pszCounterName, LPCTSTR pszComputerName)
{
	m_bSuccess = FALSE;
	BOOL b = GetIndex(pszObjName, m_SObj.GetBuffer(512));
	m_SObj.ReleaseBuffer();
	if (!b) return;
	if (m_SObj.IsEmpty()) return;
	b = GetIndex(pszCounterName, m_sCounter.GetBuffer(512));
	m_sCounter.ReleaseBuffer();
	if (!b) return;
	if (m_sCounter.IsEmpty()) return;
	m_bSuccess = TRUE;
}

CAlexfPerfNT::~CAlexfPerfNT()
{

}

BOOL CAlexfPerfNT::Collect(DWORD& dwData)
{
	if (!m_bSuccess) return FALSE;
	DWORD dwBytes = 12000;
	DWORD dwCounterIdOffset = 0;
	PPERF_DATA_BLOCK pdb;
	PPERF_OBJECT_TYPE pot;
	PPERF_COUNTER_DEFINITION pcd;
	PPERF_INSTANCE_DEFINITION pid;
	// 為PPERF_DATA_BLOCK申請空間.
	pdb = (PPERF_DATA_BLOCK) HeapAlloc(GetProcessHeap(),
	HEAP_ZERO_MEMORY, dwBytes);
	// Get performance data.
	//RegQueryValueEx獲得特定注冊表項的的鍵值以及類型,函數結構如下:
	/*LONG RegQueryValueEx(
	HKEY hKey,            // handle to key
	LPCTSTR lpValueName,  // 值名稱
	LPDWORD lpReserved,   // 保留
	LPDWORD lpType,       // 類型
	LPBYTE lpData,        // 數據
	LPDWORD lpcbData      // 數據緩沖大小
	);*/

	while(ERROR_MORE_DATA == RegQueryValueEx(HKEY_PERFORMANCE_DATA, m_SObj, NULL,
	NULL, (LPBYTE)pdb, &dwBytes))
	{
		// 增加緩沖.
		dwBytes += 1000;
		// 重新申請
		pdb = (PPERF_DATA_BLOCK) HeapReAlloc(GetProcessHeap(),
		HEAP_ZERO_MEMORY, (LPVOID)pdb, dwBytes);
	}
	//獲得對象類型PERF_OBJECT_TYPE.
	pot = (PPERF_OBJECT_TYPE)((PBYTE)pdb + pdb->HeaderLength);
	// 獲得第一個計數器類型.
	pcd = (PPERF_COUNTER_DEFINITION)((PBYTE)pot + pot->HeaderLength);
	for(int i=0; i< (int)pot->NumCounters; i++)
	{
		if (pcd->CounterNameTitleIndex == (DWORD)atoi(m_sCounter))
		{
			dwCounterIdOffset = pcd->CounterOffset;
			break;
		}
		pcd = ((PPERF_COUNTER_DEFINITION)((PBYTE)pcd + pcd->ByteLength));
	}
	// 獲得該對象的第一個實例
	pid = (PPERF_INSTANCE_DEFINITION)((PBYTE)pot + pot->DefinitionLength);
	// 獲得信息
	dwData = *((DWORD *) ((PBYTE)pid + dwCounterIdOffset));
	// 釋放空間
	if(!HeapFree(GetProcessHeap(), 0, (LPVOID)pdb)) m_bSuccess = FALSE;
	// 關閉注冊表
	RegCloseKey(HKEY_PERFORMANCE_DATA);
	return TRUE;
}

BOOL CAlexfPerfNT::GetIndex(const char * pszCounter, char * szIndex)
{
	char*  pszBuffer;
	char*  pszTemp;
	char   szObject[256] = "";
	DWORD  dwBytes;
	HKEY hKeyIndex;
	int i = 0;
	int j = 0;
	// 打開注冊表
	RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, &hKeyIndex);
	//獲得Counter的大小
	RegQueryValueEx(hKeyIndex, "Counter", NULL, NULL, NULL, &dwBytes);
	// 申請空間
	pszBuffer = (char *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytes);
	if (!pszBuffer) {RegCloseKey(hKeyIndex); return FALSE;}
	// 獲得標題和計數器
	RegQueryValueEx(hKeyIndex, "Counter", NULL, NULL, (LPBYTE)pszBuffer, &dwBytes);
	// 獲得索引值
	pszTemp = pszBuffer;
	while (i != (int)dwBytes)
	{
		while (*(pszTemp+i) != '\0')
		{
			szIndex[j] = *(pszTemp+i);
			i++;
			j++;
		}
		szIndex[j] = '\0';
		i++;
		j = 0;
		while (*(pszTemp+i) != '\0')
		{
			szObject[j] = *(pszTemp+i);
			i++;
			j++;
		}
		szObject[j] = '\0';
		i++;
		j = 0;
		if ('\0' == *(pszTemp+i))
		i++;
		if (0 == strcmp(szObject, pszCounter)) break;
	}
	// 釋放空間
	HeapFree(GetProcessHeap(), 0, (LPVOID)pszBuffer);
	// 關閉注冊表
	RegCloseKey(hKeyIndex);
	return TRUE;
}


//////////////////////////////////////////////////////////////////////
// CAlexfPerf - class to receive performance stats
//////////////////////////////////////////////////////////////////////

CAlexfPerf::CAlexfPerf(int iPerfType)
{
	m_p95 = NULL;
	m_pNT = NULL;
	m_bSuccess = FALSE;
	m_iPerfType = iPerfType;
	// check os version
	OSVERSIONINFO OSVersionInfo;
	OSVersionInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
	GetVersionEx(&OSVersionInfo);
	if (VER_PLATFORM_WIN32_NT == OSVersionInfo.dwPlatformId)
	{
		m_bSuccess = bInitNT(iPerfType);
	}
    else
	{
		m_bSuccess = bInit95(iPerfType);
	}
}

CAlexfPerf::~CAlexfPerf()
{
	if (m_p95) delete m_p95;
	if (m_pNT) delete m_pNT;
}

BOOL CAlexfPerf::bInit95(int iPerfType)
{
	CString sAdapterName;
	CString sss;
	for (int i = 0; i < 10; i++)
	{
		sprintf(sss.GetBuffer(512), "%04ld", i); sss.ReleaseBuffer();
		sAdapterName = GetRegKey(HKEY_LOCAL_MACHINE,
		"System\\CurrentControlSet\\Services\\Class\\Net\\" + sss,
		"AdapterName");
		if (sAdapterName == "MS$PPP") break;
	}
	if (sAdapterName != "MS$PPP") return FALSE;
	sAdapterName = GetRegKey(HKEY_LOCAL_MACHINE,
	"System\\CurrentControlSet\\Services\\Class\\Net\\" + sss,
	"DriverDesc");
	switch (iPerfType)
	{
	case ALEXF_PERF_DIALUP_CONNECTSPEED:
		m_p95 = new CAlexfPerf95(sAdapterName, "ConnectSpeed"); break;
	case ALEXF_PERF_DIALUP_BYTESRECVD:
		m_p95 = new CAlexfPerf95(sAdapterName, "BytesRecvd"); break;
	case ALEXF_PERF_DIALUP_BYTESXMIT:
		m_p95 = new CAlexfPerf95(sAdapterName, "BytesXmit"); break;
	default:
		return FALSE;
	}
	return m_p95->IsOK();
}

BOOL CAlexfPerf::bInitNT(int iPerfType)
{
	switch (iPerfType)
	{
	case ALEXF_PERF_DIALUP_CONNECTSPEED:
		m_pNT = new CAlexfPerfNT("RAS Total", "Total Connections"); break;
	case ALEXF_PERF_DIALUP_BYTESRECVD:
		m_pNT = new CAlexfPerfNT("RAS Total", "Bytes Received"); break;
	case ALEXF_PERF_DIALUP_BYTESXMIT:
		m_pNT = new CAlexfPerfNT("RAS Total", "Bytes Transmitted"); break;
	default:
		return FALSE;
	}
	return m_pNT->IsOK();
}

BOOL CAlexfPerf::Collect(DWORD& dwData)
{
	if (!m_bSuccess) return FALSE;
	if (m_p95) m_bSuccess = m_p95->Collect(dwData);
	if (m_pNT)
	{
		// temporary!!!
		if (ALEXF_PERF_DIALUP_CONNECTSPEED == m_iPerfType)
		dwData = 33600;
		else
		m_bSuccess = m_pNT->Collect(dwData);
	}
	return m_bSuccess;
}

DWORD CAlexfPerf::GetData()
{
	DWORD dw = 0;
	if (!m_bSuccess) return dw;
	Collect(dw);
	return dw;
}

CString CAlexfPerf::GetRegKey(HKEY hOpen, CString key1,CString key2)
{
	CString sss;
	HKEY hkey;
	LONG l = RegOpenKeyEx(hOpen, key1, 0, KEY_READ, &hkey);
	if (l != ERROR_SUCCESS) return sss;
	ULONG LS = _MAX_PATH;
	DWORD lpType = REG_EXPAND_SZ;
	l = RegQueryValueEx(hkey, key2, NULL,
	& lpType, (unsigned char *) sss.GetBuffer(LS), & LS);
	sss.ReleaseBuffer();
	RegCloseKey(hkey);
	if (l != ERROR_SUCCESS) sss.Empty();
	return sss;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品欧美一区二区三区小说 | 欧美美女直播网站| 亚洲国产精品99久久久久久久久| 国产福利精品导航| 视频在线观看91| 亚洲va欧美va国产va天堂影院| 国产精品久久久久三级| 国产精品理伦片| 免费不卡在线观看| 欧美探花视频资源| 日韩国产欧美在线播放| 亚洲精品日日夜夜| 久久精品国产**网站演员| 国产乱码字幕精品高清av | 精品亚洲aⅴ乱码一区二区三区| 国产日韩视频一区二区三区| 欧美久久婷婷综合色| 在线观看免费亚洲| 亚洲成av人片| 精油按摩中文字幕久久| 蜜臀av性久久久久蜜臀aⅴ| 日本久久一区二区| 精品福利av导航| 亚洲不卡一区二区三区| 国产精品资源在线观看| 欧美三级中文字幕| 中文av一区二区| 国产成人精品影院| 日韩一区二区三区观看| 首页亚洲欧美制服丝腿| 日本道免费精品一区二区三区| 久久综合网色—综合色88| 视频精品一区二区| 在线不卡中文字幕| 图片区小说区区亚洲影院| 在线观看免费一区| 精品亚洲国内自在自线福利| 国内成人精品2018免费看| 日一区二区三区| 久久99日本精品| 九九**精品视频免费播放| 一本一道久久a久久精品| 欧洲亚洲精品在线| 亚洲综合清纯丝袜自拍| 91精品国产入口在线| 亚洲成人中文在线| 蜜臀精品久久久久久蜜臀| 青青草国产精品97视觉盛宴| 国产毛片精品视频| 色婷婷久久久久swag精品 | 一区二区三区四区不卡在线| 国产盗摄精品一区二区三区在线| 久久综合九色综合97婷婷| 极品少妇xxxx精品少妇偷拍| 亚洲国产精品99久久久久久久久| 成+人+亚洲+综合天堂| 中文字幕亚洲电影| 777a∨成人精品桃花网| 国产在线精品一区二区夜色| 亚洲国产高清aⅴ视频| 欧美日韩中文精品| 国产高清精品网站| 亚洲一区二区三区四区五区中文| 日韩女同互慰一区二区| 懂色av一区二区在线播放| 一区二区三区视频在线看| 欧美不卡一区二区三区| 日本韩国一区二区| 久久99国产精品免费网站| 一区二区三区在线视频免费| 91精品国产综合久久精品| 色综合色狠狠天天综合色| 欧美巨大另类极品videosbest| 久久精品国产澳门| 性久久久久久久久| 亚洲美女少妇撒尿| 国产三级精品三级在线专区| 99久久婷婷国产| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产精品影音先锋| 极品少妇xxxx偷拍精品少妇| 丝袜亚洲另类欧美| 日韩精品视频网| 亚洲第一成人在线| 26uuu精品一区二区三区四区在线| 视频在线观看一区| 日韩高清一级片| 亚洲高清免费观看| 丝袜亚洲另类丝袜在线| 亚洲国产欧美在线| 午夜精品一区在线观看| 午夜精品在线看| 美国欧美日韩国产在线播放| 免费观看在线综合色| 韩国女主播一区| 成年人网站91| 欧美福利视频导航| 久久久精品黄色| 亚洲三级电影网站| 免费在线成人网| 亚洲成年人影院| 久久成人羞羞网站| 色哟哟一区二区三区| 日韩一区二区三区观看| 国产精品你懂的在线欣赏| 亚洲柠檬福利资源导航| 精品在线免费视频| 日本精品视频一区二区三区| 亚洲精品一区二区三区99| 国产精品久久三| 久久精品国产亚洲5555| 欧美吻胸吃奶大尺度电影| 欧美裸体bbwbbwbbw| 精品福利二区三区| 一区二区三区四区视频精品免费 | 91伊人久久大香线蕉| 日韩一区二区三区视频| 亚洲精品国久久99热| 国产精品2024| 久久九九久精品国产免费直播| 亚洲国产精品自拍| 99精品视频一区二区三区| 久久久久久久久久久久久女国产乱 | 中文字幕视频一区| 久久日韩精品一区二区五区| 午夜精品久久久久影视| 91农村精品一区二区在线| 欧美国产精品一区二区三区| 国内精品视频666| 精品久久久网站| 麻豆91免费观看| 日韩一级高清毛片| 精东粉嫩av免费一区二区三区| 欧美不卡激情三级在线观看| 九九精品视频在线看| 国产亚洲一区二区三区| 国产电影精品久久禁18| 亚洲女厕所小便bbb| 欧美精品第1页| 国产不卡在线一区| 亚洲免费av高清| 欧美久久久一区| 国产精品18久久久久久vr| 国产精品无圣光一区二区| 欧美色综合网站| 国产凹凸在线观看一区二区| 亚洲欧美日韩久久精品| 欧美一二三四在线| k8久久久一区二区三区| 日韩精品91亚洲二区在线观看| 精品999在线播放| 在线观看亚洲一区| 韩国v欧美v日本v亚洲v| 亚洲午夜久久久| 久久久精品免费网站| 91精品国产免费久久综合| 色综合中文字幕| 国产精品夜夜嗨| 亚洲第一会所有码转帖| 中文字幕成人在线观看| 精品日韩在线观看| 欧美三级在线看| 成人黄页毛片网站| 国产精品18久久久久| 精品一区二区三区欧美| 亚洲成在线观看| 亚洲一区在线观看免费观看电影高清| 日韩精品中文字幕在线不卡尤物| 精品视频色一区| 在线观看国产日韩| 在线观看中文字幕不卡| 一本大道久久精品懂色aⅴ| 成人听书哪个软件好| 国精产品一区一区三区mba视频| 亚洲成人一区在线| 首页国产欧美日韩丝袜| 香蕉影视欧美成人| 日本va欧美va欧美va精品| 强制捆绑调教一区二区| 久久国产人妖系列| 国产麻豆9l精品三级站| 国产精品中文有码| 99久精品国产| 欧美精选午夜久久久乱码6080| 制服丝袜中文字幕亚洲| 久久久综合九色合综国产精品| 国产视频视频一区| 最新国产精品久久精品| 一区二区理论电影在线观看| 午夜激情综合网| 国产成人日日夜夜| 色偷偷88欧美精品久久久| 欧美一区日本一区韩国一区| 日韩精品专区在线| 色婷婷综合在线| 精品国产一区二区亚洲人成毛片| 国产精品美女久久久久久久久久久 | 亚洲欧美日韩小说| 国产精品12区| 欧美va亚洲va在线观看蝴蝶网|