2017-03-02 90 views
1

因此,我的工作場所終於開始用Windows 7取代Windows NT 4系統。而且我必須確保我們的舊程序可以在新系統上運行。升級到Windows 7打破了性能計數器

不是一個「性能檢查」服務,可以跟蹤內存,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之間引起了這些性能計數器不再工作的內幕之下做了些什麼改變?我怎樣才能讓他們工作?

回答

0

我發現了這個問題。某些計數器需要先致電PdhCollectQueryData,然後才能檢索其數據。 Windows NT 4.0原諒了這個遺漏,但Windows 7卻沒有。

相關問題