使用 RegQueryValueEx 和 HKEY_PERFORMANCE_COUNTER 获取“Disk Bytes/sec%

Posted

技术标签:

【中文标题】使用 RegQueryValueEx 和 HKEY_PERFORMANCE_COUNTER 获取“Disk Bytes/sec%【英文标题】:Using RegQueryValueEx and HKEY_PERFORMANCE_COUNTER to Get "Disk Bytes/sec% 【发布时间】:2011-03-28 18:03:16 【问题描述】:

我已经寻找示例和文档,但我仍然无法弄清楚...

您如何使用RegQueryValueEx不是 PdhXxx 函数)查询类似Disk Bytes/sec 的内容?

我尝试了以下方法:

DWORD type;
static union  TCHAR Data[32 * 1024]; PERF_DATA_BLOCK Perf;  perf;//Stack buffer
DWORD cbData = sizeof(perf);
LSTATUS s = RegQueryValueEx(HKEY_PERFORMANCE_DATA,
    _T("PhysicalDisk"), NULL, &type, (LPBYTE)&perf, &cbData);
PPERF_OBJECT_TYPE pObjType =
    (PPERF_OBJECT_TYPE)((BYTE*)&perf + perf.Perf.HeaderLength);

但它只是返回一个没有数据的标题。 :(

【问题讨论】:

【参考方案1】:

您不能像这样按名称查询数据。相反,您需要按索引查询。 MSDN 可以帮助您使用一些代码找出要查询的适当索引。不幸的是,您需要在运行时确定哪个索引。

例如,以下应该检索处理器的性能数据。

LSTATUS s = RegQueryValueEx(HKEY_PERFORMANCE_DATA, _T("238"), NULL,
    &type, (LPBYTE)&perf, &cbData);

【讨论】:

以上是关于使用 RegQueryValueEx 和 HKEY_PERFORMANCE_COUNTER 获取“Disk Bytes/sec%的主要内容,如果未能解决你的问题,请参考以下文章

从 RegQueryValueEx 获取正确的值

RegQueryValueEx 的奇怪行为与另一个寄存器的返回值有关

获取Windows操作系统版本名称

获取Windows的版本

WinApi:无法读取注册表

通过 RegQueryValueEx 和 RegGetValue 获取注册表值时的奇怪行为 [重复]