기본 플러그인을 사용하는 응용 프로그램이 있습니다. 나는이 플러그인들을 위해 내 자신의 바이너리 형식을 가지고있다. 각 플러그인은 DLL을 프로세스의 공간에 매핑하는 것과 비슷한 방법을 사용하여 런타임에로드됩니다. 즉, 각 플러그인은 자체 ImageBase
, .text
또는 .data
과 같은 섹션은 기존 DLL과 같은 방식으로 처리됩니다. 유일한 차이점은 플러그인의 이진 형식 (PE
파일이 아닙니다)과 플러그인을 프로세스 공간에 매핑하는 로더 코드입니다.ETW : 기존 공급자를 통해 이벤트 발행
는 지금은 ETW는이 명령 줄하여 추적을 할 때 알고 :
xperf -on latency -stackwalk profile -buffersize 1024 -minbuffers 300 -start tracea1 -on Microsoft-Windows-Win32k:::'stack'
가 추적 캡처하는 동안 프로세스 환경을 재구성하는 데 사용할 수있는 이벤트를 방출합니다. 즉, "프로세스 추가", "스레드를 프로세스에 추가", "DLL 모듈을 프로세스에 추가"와 같은 이벤트를 방출하므로 xperfview
과 같은 도구는 시스템에서 프로세스 상태의 가상 환경을 빌드하고 빌드 할 수 있습니다 현재 프로세스 트리와 같은 정보. 이러한 이벤트는 예를 들어 ImageLoad 이벤트이며 추적 전에 또는로드 중에로드되는 각 DLL에 대한 정보를 제공합니다.
당연히, 내이벤트는 기술적으로 DLL이 아니기 때문에 생성되지 않습니다 (즉, DLL과 동일한 기능으로로드되지는 않지만 기능은 동일 함). 그렇기 때문에 xperfview
과 같은 도구는 프로세스 공간에서의 존재에 대해 알지 못합니다. 정상적인 DLL을 나의 플러그인을 해석 할 수 xperfview
및 이와 유사한 도구 그래서 내가하고 싶은 무엇
는 내 플러그인 로더 코드에서 내 자신의 EventWrites을 작성하고, 필요한 정보를이 ImageLoad
이벤트를 방출하는 것입니다. ImageBase
같은 내가 채울 것이다 필요한 정보, ProcessId
, ImageSize
등
이렇게하려면, 나는, ImageLoad
이벤트의 소유자 인 경우 MSNT_SystemTrace
공급자를 등록 이러한 종류의와 함께 이벤트를 구축 할 필요가 있음을 이해 구조 :
<Data Name="ImageBase">0x7FEFDBD0000</Data>
<Data Name="ImageSize">0x12D000</Data>
<Data Name="ProcessId"> 548</Data>
...
<Data Name="Reserved0"> 0</Data>
<Data Name="DefaultBase">0x7FEFDBD0000</Data>
및 이벤트를 내 보냅니다.
다른 MSNT_SystemTrace
을 등록하려고하면이 공급자가 이미 존재하므로 ERROR_ACCESS_DENIED
을 가져 오는 것이 문제입니다.
하지만 그 질문은 내가 ETW가 지원하려고 노력하고있는 것입니까?
이 업데이트를 설치 한 후 : http://support.microsoft.com/kb/2882822, Win7에서이 클래스를 사용할 수 있습니다. – antonone