2009-05-29 3 views
2

성능 모니터링 API가있는 Vista에서 이상한 문제가 발생합니다. 현재 PdhGetFormattedCounterValue()를 기반으로 XP/2k에서 잘 작동하는 코드를 사용하고 있습니다. 나는 (내가 전체 네트워크 통계에 관심이 있어요) 카운터를 확장 PdhExpandWildCardPath을 사용하여 시작, 내가 찾고 있어요 카운터는 다음과 같습니다Vista의 성능 카운터에 문제가 있습니다.

 
\\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에서 작동하기 때문에 바뀌 었습니다. 감사!

답변

1

네트워크 인터페이스가 둘 다 와일드 카드 인 반면 프로세서 1은 실제로 성능 모니터링에 의해 롤업되어 있다는 것이 밝혀졌습니다. 내가 깨닫지 못했던 것은 PdhExpandWildCardPath가 PdhAddCounter가 직접 사용할 수있는 것을 반환하지 않았다는 것입니다. 이 말은 ExpandWildCard가 3 개의 확장 된 일치 항목을 반환하면 null로 분리 된 문자열로 되돌아갑니다.이 점을 이해했지만 AddCounter가 효과적으로이 세 가지를 모두 포함하는 카운터를 만들 것이라고 가정했습니다. 아뇨, 현실은 각 경로를 분리하여 AddCounter에서 개별적으로 요청한 다음 수동으로 결과를 롤업해야합니다.

이렇게하면 다른 사람이 저의 실수를 피할 수있게되기를 바랍니다. ;)