1、CPP文件rasSpdM.cpp#include stdafx.hrasSpdM.h#include #define TOTALBYTES 4096#define BYTEINCREMENT 1024LPSTR lpNameStrings=NULL;LPSTR *lpNamesArray=NULL;BOOL glo_fFromDynReg=TRUE;/*在9x下通过dyn_data注册表得到速度*/DWORD GetTotalRecv(void) HKEY hKey; DWORD dwValue=(DWORD)-1; if(0=RegOpenKey(HKEY_DYN_DATA,PerfStat
2、sStatData,&hKey) DWORD dwType,dwLen=sizeof(DWORD); RegQueryValueEx(hKey,Dial-Up AdapterTotalBytesRecvd,NULL,&dwType,(BYTE*)&dwValue,&dwLen); RegCloseKey(hKey); return dwValue;DWORD GetTotalXmit(void)Dial-Up AdapterTotalBytesXmitDWORD GetPerSecondRecv(void)Dial-Up AdapterBytesRecvdDWORD GetPerSecondX
3、mit(void)Dial-Up AdapterBytesXmit/*在NT下通过per Data得到 */PPERF_OBJECT_TYPE FirstObject( PPERF_DATA_BLOCK PerfData ) return( (PPERF_OBJECT_TYPE)(PBYTE)PerfData + PerfData-HeaderLength) );PPERF_OBJECT_TYPE NextObject( PPERF_OBJECT_TYPE PerfObj ) return( (PPERF_OBJECT_TYPE)(PBYTE)PerfObj + PerfObj-TotalBy
4、teLength) );PPERF_INSTANCE_DEFINITION FirstInstance( PPERF_OBJECT_TYPE PerfObj ) return( (PPERF_INSTANCE_DEFINITION)(PBYTE)PerfObj + DefinitionLength) );PPERF_INSTANCE_DEFINITION NextInstance( PPERF_INSTANCE_DEFINITION PerfInst ) PPERF_COUNTER_BLOCK PerfCntrBlk; PerfCntrBlk = (PPERF_COUNTER_BLOCK)(P
5、BYTE)PerfInst + PerfInst-ByteLength); return( (PPERF_INSTANCE_DEFINITION)(PBYTE)PerfCntrBlk + PerfCntrBlk-ByteLength) );PPERF_COUNTER_DEFINITION FirstCounter( PPERF_OBJECT_TYPE PerfObj ) return( (PPERF_COUNTER_DEFINITION) (PBYTE)PerfObj + PPERF_COUNTER_DEFINITION NextCounter( PPERF_COUNTER_DEFINITIO
6、N PerfCntr ) return( (PPERF_COUNTER_DEFINITION)(PBYTE)PerfCntr + PerfCntr- * * * Load the counter and object names from the registry to the * * global variable lpNamesArray. *void GetNameStrings( ) HKEY hKeyPerflib; / handle to registry key HKEY hKeyPerflib009; DWORD dwMaxValueLen; / maximum size of
7、 key values DWORD dwBuffer; / bytes to allocate for buffers DWORD dwBufferSize; / size of dwBuffer LPSTR lpCurrentString; / pointer for enumerating data strings DWORD dwCounter; / current counter index/ Get the number of Counter items. RegOpenKeyEx( HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftWindows NTCur
8、rentVersionPerflib, 0, KEY_READ, &hKeyPerflib); dwBufferSize = sizeof(dwBuffer); RegQueryValueEx( hKeyPerflib,Last Counter NULL, (LPBYTE) &dwBuffer,dwBufferSize ); RegCloseKey( hKeyPerflib );/ Allocate memory for the names array. lpNamesArray = (char*)malloc( (dwBuffer+1) * sizeof(LPSTR) );/ Open ke
9、y containing counter and object names.SOFTWAREMicrosoftWindows NTCurrentVersionPerflib009hKeyPerflib009);/ Get the size of the largest value in the key (Counter or Help). RegQueryInfoKey( hKeyPerflib009,dwMaxValueLen, NULL);/ Allocate memory for the counter and object names. dwBuffer = dwMaxValueLen
10、 + 1; lpNameStrings = (char*)malloc( dwBuffer * sizeof(CHAR) );/ Read Counter value. RegQueryValueEx( hKeyPerflib009,Counter (BYTE*)lpNameStrings, &dwBuffer );/ Load names into an array, by index. int iC=1; for( lpCurrentString = lpNameStrings; *lpCurrentString; lpCurrentString += (lstrlen(lpCurrentString)+1) ) dwCounter = atol( lpCurrentString ); lpCurrentString += (lstrlen(lpCurrentString)+1); /printf(%d l
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1