我正在尝试使用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版本(如果可能的话)...
这有可能是问题,但我仍然不能似乎解决它.. 我说我的用户性能日志用户组,禁用UAC,我仍然得到错误无论我正常运行二进制文件,以管理员身份或从提升的命令提示符运行。 – mappu 2011-06-16 11:02:37
对此回复迟到抱歉,但我最近遇到了可能有所帮助的事情。您可能需要明确请求您的流程权限。有关更多详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa446619.aspx。您打开一个具有调整权限的进程令牌(OpenProcessToken),然后使用调用AdjustTokenPrivileges的代码调整令牌的权限。我必须这样做才能拥有一个以管理员权限运行的进程,以调整当前的系统时区。 – naviwhack 2011-10-28 15:59:36