我有一個應用程序通過winreg.h中公開的API收集Perfmon計數器值 - 爲了收集Perfmon計數器值,我必須撥打RegQueryValueExW
傳遞給Perfmon計數器的id我對此感興趣,爲了獲得該ID,我需要查詢註冊表以查找Perfmon計數器名稱列表並查找我感興趣的ID通過winreg查找perfmon counter id
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)
問題是,在某些mac hines(安裝了Windows CE開發工具包的),第二個perfmon計數器的名稱爲「ID Process」,因此上面找到了錯誤計數器的ID。
我看不出有什麼辦法來區分他們所處的順序 - 目前我認爲我最好的選擇是採用第一個匹配名稱的計數器,是否有更好的選擇?
(它無法將此遷移到.NET或類似的東西)
Thankyou - 我還沒有意識到ID是gauguteed修復。這使事情變得更簡單! – Justin 2010-03-23 09:58:11