C++ のパフォーマンス カウンターを使用して、システムの稼働時間を読み取ろうとしています。最低でも XP と Windows 7 の両方をサポートしたいと考えています。
次のコードは、Windows XP で正常に動作します...
HQUERY hQuery; HCOUNTER hCounter;
PDH_FMT_COUNTERVALUE Value;
int ret = 0;
if (PdhOpenQuery(NULL, 0, &hQuery) == ERROR_SUCCESS) {
if ((status = PdhAddCounter(hQuery, queryURI, 0, &hCounter)) == ERROR_SUCCESS) {
if ((status = PdhCollectQueryData(hQuery)) == ERROR_SUCCESS) {
if ((status = PdhGetFormattedCounterValue(hCounter, PDH_FMT_LARGE, NULL, &Value)) == ERROR_SUCCESS) {
ret = (DWORD)(Value.largeValue);
}
}
PdhRemoveCounter(hCounter);
}
PdhCloseQuery(hQuery);
}
return ret;
..しかし、Windows 7 では失敗します。具体的には、管理者として実行しているかどうかに関係なく、 PdhCollectQueryData は PDH_NO_DATAを返します。
Windows 7 と XP の両方でシステムのアップタイムを取得するにはどうすればよいですか? この時間は、GetTickCount の 49 日間のオーバーフローよりもはるかに長くなると予想されます。可能であれば、XP 用の個別の PDH バージョンと 7 用の GetTickCount64 バージョンを用意したくありません...