我在使用性能监控API在Vista上遇到了一个奇怪的问题。我目前正在使用基于PdhGetFormattedCounterValue()的XP / 2k上运行良好的代码。我开始使用PdhExpandWildCardPath来扩展计数器(我对整体网络统计感兴趣),我正在看的计数器是:
\\Network Interface(*)\\Bytes Received/sec \\Network Interface(*)\\Bytes Sent/sec \\Processor(_Total)\\% Processor Time
问题是,在他们第一次调用时他们返回PDH_INVALID_DATA,我不认为这是一个问题,因为如果我再次查询它,我将开始获取没有错误的数据。问题是这样 - 虽然处理器时间完全按预期工作,但网络接口计数器都没有返回任何东西 - 一直只有0。我使用Perfmon验证他们正在正常报告数据,所以我对可能出现的问题感到茫然。我在MS上发现了这个:
http://support.microsoft.com/?scid=kb%3Ben-us%3B287159&x=11&y=9
但是对于我的任务,我对多语言不感兴趣,所以我不认为这是相关的。我会看看我是否可以提出一些基本的代码来显示我正在做什么,但没有任何东西返回任何奇怪的东西,并且它在XP / 2k上工作,所以我怀疑在引擎盖下发生了一些变化。谢谢!
答案 0 :(得分:1)
事实证明,问题在于网络接口都是通配符,而处理器实际上已经由性能监控卷起。我没有意识到的是PdhExpandWildCardPath没有返回PdhAddCounter可以直接使用的东西。我的意思是,如果ExpandWildCard返回3个扩展匹配,它们将作为空分隔字符串返回 - 我理解这一点,但我假设AddCounter将有效地创建一个包含所有三个的计数器。不,现实是我需要分解每条路径并从AddCounter单独请求它,然后在我得到它们时手动汇总结果。
希望这有助于其他人避免同样的错误,减少挫败感。 ;)