因此,我的工作场所终于开始用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之间的内容是否发生了变化导致这些性能计数器不再起作用?我怎样才能让他们工作?