升级到Windows 7会破坏性能计数器

时间:2017-03-02 22:23:41

标签: windows performancecounter

因此,我的工作场所终于开始用Windows 7替换Windows NT 4系统。我必须确保我们的旧程序可以在新系统上运行。

不是“性能检查”服务,可以跟踪内存,CPU,磁盘和网络使用情况。它在很大程度上依赖于性能计数器。

我的问题是,在新的Windows 7机器上,某些性能计数器不再有效:尝试读取值时出现PDH_INVALID_DATA错误。该问题特别影响以下计数器:

\Network Interface(*)\Bytes Total/sec 
\PhysicalDisk(_Total)\% Disk Time
\PhysicalDisk(_Total)\Avg. Disk Queue Length
\PhysicalDisk(_Total)\Disk Transfers/sec
\Processor(_Total)\% Processor Time
\Server\Bytes Total/sec

但在同一程序中使用的其他计数器确实有效(经过一些小修改后,处理“TCP”计数器被分成“TCPv4”和“TCPv6”)。

\Memory\Commit Limit
\Memory\Committed Bytes
\Process(_Total)\Thread Count
\TCPv4\Connections Established
\TCPv4\Segments/sec

所涉及的代码(仅通过显示一个性能计数器简化)是:

HQUERY               hQuery;
HCOUNTER             hCPUUsed;
DWORD                dwType;
PDH_FMT_COUNTERVALUE stCounter;

lStatus = PdhOpenQuery(NULL, 0, &hQuery); // This same HQUERY object is used for all PDH calls
// ... error handling
lStatus = PdhAddCounter(hQuery, "\\Processor(_Total)\\% Processor Time", 0, &hCPUUsed);
// ... error handling
lStatus = PdhGetFormattedCounterValue(hCPUUsed, PDH_FMT_DOUBLE, &dwType, &stCounter);
// ... error handling, logging a PDH_INVALID_DATA error from the above line

我尝试运行lodctr /r来重建性能计数器,但这无法解决问题。

NT 4.0和6.1之间的内容是否发生了变化导致这些性能计数器不再起作用?我怎样才能让他们工作?

1 个答案:

答案 0 :(得分:0)

我发现了问题。某些计数器需要先调用PdhCollectQueryData才能检索其数据。 Windows NT 4.0省略了遗漏,但Windows 7却没有。