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;
는 윈도우 7에 실패 ..하지만 특히,에 관계없이 내가 관리자로 실행 여부 PdhCollectQueryData 반환 PDH_NO_DATA.
어떻게 Windows 7과 XP에서 시스템 가동 시간을 얻을 수 있습니까? 나는이 시간이 GetTickCount의 49 일 오버플로보다 훨씬 클 것으로 기대하며, 가능하다면 XP 용으로 별도의 PDH 버전과 7 용 GetTickCount64 버전을 사용하지 않을 것입니다.
이이 문제가 될 수있다,하지만 난 여전히 그것을 해결하기 위해 수없는 것 .. 나는 성능 로그 사용자 그룹, 장애인 UAC에 내 사용자를 추가하고, 난 여전히 여부에 관계없이의 오류가 난 바이너리를 정상적으로 실행하거나 관리자 또는 상승 된 명령 프롬프트에서 실행하십시오. – mappu
이 회신의 지각에 대한 사과,하지만 최근에는 도움이 될만한 것을 발견했습니다. 아마도 프로세스에 대한 권한을 명시 적으로 요청해야합니다. 자세한 내용은 http://msdn.microsoft.com/en-us/library/aa446619.aspx를 참조하십시오. 조정 권한이있는 프로세스 토큰 (OpenProcessToken)을 연 다음 AdjustTokenPrivileges를 호출하는 해당 코드를 사용하여 토큰의 권한을 조정합니다. 다른 방법으로 현재 시스템 시간대를 조정하기 위해 관리자 권한으로 실행중인 프로세스를 갖기 위해이 작업을 수행해야했습니다. – naviwhack