今天通过ras的性能计数器来得到ras(拨号连接)的接受发送数据。但是在执行到
PdhAddCounter(),对象为”\\RAS Total\\Bytes Transmitted” 时,返回错误 0xC0000BB8
msdn上对此错误的解释为
0xC0000BB8 PDH_CSTATUS_NO_OBJECT
The specified object is not found on the system.
就是说,没有此对象。怎么会没有呢。msdn上说的有啊!
经过我在google上baidu了一下,好容易发现一个跟我问题类似的问题,还好他的问题解决了,虽然不是100%套用,但是,对解决我的问题绝对有启发。
原来是系统怕性能计数器影响系统的性能,而关闭了相关的计数器对象。
那么我们通过注册表去打开好了。
路径如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Performance
Disable Performance Counters :0x000
把上面的那个项修改为0x000就行了。
当然,如果用户的电脑没有打开,那我们怎么办,是不是不能用这个计数器了。我们也不能告诉用户让他自己修改这个注册表啊。
那么当然是我们自己修改注册表了。我就好人做到底,把code也share了吧!
void CRasClient::AssertNotDiableTheRasObject()
{
//HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess\Performance
HKEY hKey;
long ret0 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\RemoteAccess\\Performance"),0,KEY_ALL_ACCESS,&hKey);
if(ret0 == ERROR_SUCCESS)
{
DWORD dwDiable;
DWORD cbData_1 = sizeof(DWORD);
RegQueryValueEx(hKey, "Disable Performance Counters", NULL, NULL, (LPBYTE)&dwDiable, &cbData_1);
if (dwDiable== 1)
{
dwDiable= 0;
RegSetValueEx(hKey, "Disable Performance Counters", NULL,REG_DWORD, (LPBYTE)&dwDiable, cbData_1);
}
RegCloseKey(hKey);
}
return;
}
blog的code编辑太差了,实在是太难对齐了。大家凑合看吧!
别忘了,程序关的时候去关了这个东西。不然有点流氓啊~~