如何得到拨号网络传输速度Word文档下载推荐.docx
《如何得到拨号网络传输速度Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《如何得到拨号网络传输速度Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
CPP文件rasSpdM.cpp
#include"
stdafx.h"
rasSpdM.h"
#include
#defineTOTALBYTES4096
#defineBYTEINCREMENT1024
LPSTRlpNameStrings=NULL;
LPSTR*lpNamesArray=NULL;
BOOLglo_fFromDynReg=TRUE;
/*
在9x下通过dyn_data注册表得到速度
*/
DWORDGetTotalRecv(void)
{
HKEYhKey;
DWORDdwValue=(DWORD)-1;
if(0==RegOpenKey(HKEY_DYN_DATA,"
PerfStats\\StatData"
&
hKey))
{
DWORDdwType,dwLen=sizeof(DWORD);
RegQueryValueEx(hKey,"
Dial-UpAdapter\\TotalBytesRecvd"
NULL,&
dwType,(BYTE*)&
dwValue,&
dwLen);
RegCloseKey(hKey);
}
returndwValue;
}
DWORDGetTotalXmit(void)
Dial-UpAdapter\\TotalBytesXmit"
DWORDGetPerSecondRecv(void)
Dial-UpAdapter\\BytesRecvd"
DWORDGetPerSecondXmit(void)
Dial-UpAdapter\\BytesXmit"
/*****************************************************************
在NT下通过perData得到
*****************************************************************/
PPERF_OBJECT_TYPEFirstObject(PPERF_DATA_BLOCKPerfData)
return((PPERF_OBJECT_TYPE)((PBYTE)PerfData+
PerfData->
HeaderLength));
PPERF_OBJECT_TYPENextObject(PPERF_OBJECT_TYPEPerfObj)
return((PPERF_OBJECT_TYPE)((PBYTE)PerfObj+
PerfObj->
TotalByteLength));
PPERF_INSTANCE_DEFINITIONFirstInstance(PPERF_OBJECT_TYPEPerfObj)
return((PPERF_INSTANCE_DEFINITION)((PBYTE)PerfObj+
DefinitionLength));
PPERF_INSTANCE_DEFINITIONNextInstance(
PPERF_INSTANCE_DEFINITIONPerfInst)
PPERF_COUNTER_BLOCKPerfCntrBlk;
PerfCntrBlk=(PPERF_COUNTER_BLOCK)((PBYTE)PerfInst+
PerfInst->
ByteLength);
return((PPERF_INSTANCE_DEFINITION)((PBYTE)PerfCntrBlk+
PerfCntrBlk->
ByteLength));
PPERF_COUNTER_DEFINITIONFirstCounter(PPERF_OBJECT_TYPEPerfObj)
return((PPERF_COUNTER_DEFINITION)((PBYTE)PerfObj+
PPERF_COUNTER_DEFINITIONNextCounter(
PPERF_COUNTER_DEFINITIONPerfCntr)
return((PPERF_COUNTER_DEFINITION)((PBYTE)PerfCntr+
PerfCntr->
**
*Loadthecounterandobjectnamesfromtheregistrytothe*
*globalvariablelpNamesArray.*
voidGetNameStrings()
HKEYhKeyPerflib;
//handletoregistrykey
HKEYhKeyPerflib009;
DWORDdwMaxValueLen;
//maximumsizeofkeyvalues
DWORDdwBuffer;
//bytestoallocateforbuffers
DWORDdwBufferSize;
//sizeofdwBuffer
LPSTRlpCurrentString;
//pointerforenumeratingdatastrings
DWORDdwCounter;
//currentcounterindex
//GetthenumberofCounteritems.
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"
SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Perflib"
0,
KEY_READ,
&
hKeyPerflib);
dwBufferSize=sizeof(dwBuffer);
RegQueryValueEx(hKeyPerflib,
LastCounter"
NULL,
(LPBYTE)&
dwBuffer,
dwBufferSize);
RegCloseKey(hKeyPerflib);
//Allocatememoryforthenamesarray.
lpNamesArray=(char**)malloc((dwBuffer+1)*sizeof(LPSTR));
//Openkeycontainingcounterandobjectnames.
SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Perflib\\009"
hKeyPerflib009);
//Getthesizeofthelargestvalueinthekey(CounterorHelp).
RegQueryInfoKey(hKeyPerflib009,
dwMaxValueLen,
NULL);
//Allocatememoryforthecounterandobjectnames.
dwBuffer=dwMaxValueLen+1;
lpNameStrings=(char*)malloc(dwBuffer*sizeof(CHAR));
//ReadCountervalue.
RegQueryValueEx(hKeyPerflib009,
Counter"
(BYTE*)lpNameStrings,&
dwBuffer);
//Loadnamesintoanarray,byindex.
intiC=1;
for(lpCurrentString=lpNameStrings;
*lpCurrentString;
lpCurrentString+=(lstrlen(lpCurrentString)+1))
dwCounter=atol(lpCurrentString);
lpCurrentString+=(lstrlen(lpCurrentString)+1);
//printf("
%dl