PdhAddCounter无法打开RAS性能计数器的原因!

今天通过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编辑太差了,实在是太难对齐了。大家凑合看吧!

别忘了,程序关的时候去关了这个东西。不然有点流氓啊~~

你可能感兴趣的:(性能,职场,休闲,计数器,ras)