gpt4 book ai didi

c++ - 通过 winreg 查找 perfmon 计数器 ID

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:29 26 4
gpt4 key购买 nike

我有一个应用程序通过 winreg.h 中公开的 API 收集 Perfmon 计数器值 - 为了收集 Perfmon 计数器值,我必须调用 RegQueryValueExW 并传入 Perfmon 计数器的 ID我感兴趣,为了获得该 ID,我需要在注册表中查询 Perfmon 计数器名称列表,然后查找我感兴趣的那个

C++ 不是我选择的语言,所以下面是一个不稳定的例子,可能有很多语法错误,但你明白了:

DWORD IdProcessIndex = 0;
WCHAR* RawStrings = new WCHAR[ len ];
WCHAR* pCurrent;
DWORD nLenInChars;

// Get the name id of the "ID Process" counter
RegQueryValueExW(HKEY_PERFORMANCE_DATA, COUNTER009, 0, 0, (PBYTE)RawStrings, &len)

pCurrent = (WCHAR*)RawStrings;
while ( (nLenInChars = wcslen(pCurrent)) != 0 && IdProcessIndex == 0 )
{
WCHAR* pName;
pName = pCurrent + nLenInChars + 1;

if ( wcscmp( pName, L"ID Process" ) == 0)
{
IdProcessIndex = _wtoi( pCurrent );
}

pCurrent = pName + wcslen( pName ) + 1;
}

// Get data for the "ID Process" counter
WCHAR strIdProcessIndex[32];
_itow( nIdProcessIndex, strIdProcessIndex, 10 );

RegQueryValueExW(HKEY_PERFORMANCE_DATA, strIdProcessIndex, NULL, NULL, (PBYTE)pData, &len)

问题是在某些机器上(安装了 Windows CE 开发工具包的机器)有一个名为“ID Process”的第二个 perfmon 计数器,因此上面找到了错误计数器的 ID。

除了它们的顺序外,我看不出有什么方法可以区分两者 - 目前我认为我最好的选择是使用我找到的第一个具有匹配名称的计数器,是否有更好的选择?

(不可能将它迁移到 .Net 或类似的东西)

最佳答案

我意识到这是旧的,但以防万一:

  1. Tim 是对的,自己解析二进制数据很困难。为痛苦的世界做好准备。我建议使用 PDH(为您封装注册表访问),或者如果失败,则使用 WMI(但请注意 WMI 速度要慢得多)。
  2. 您不能只获取性能计数器的数据(ID Process,索引为 784)。您需要为整个对象(Process,索引为 230)获取它。
  3. 内置对象的 ID 是 guaranteed to be the same在所有 Windows 安装上。因此,如果这是您唯一需要的计数器,只需使用 230。 :)

关于c++ - 通过 winreg 查找 perfmon 计数器 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1119220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com