NTSYSAPI
NTSTATUS
NTAPI
NtTraceControl(IN CtrlCode, IN PVOID InputBuffer, IN ULONG InputBufferLength,
OUT PVOID OutputBuffer, ULONG OutputBufferLength, PULONG ReturnLength
);
Под вистой вызывается со следующими CtrlCode:
- advapi32!EtwpStartLogger - CtrlCode 0x1
- advapi32!EtwpStopLogger - CtrlCode 0x2
- advapi32!EtwpQueryLogger - CtrlCode 0x3
- advapi32!EtwpUpdateLogger - CtrlCode 0x4
- advapi32!EtwpFlushLogger - CtrlCode 0x5
- advapi32!EtwpSetupRealTimeContext - CtrlCode 0xB
- ntdll!EtwEventActivityIdControl - CtrlCode 0xC
- ntdll!EtwEventWriteEndScenario - CtrlCode 0xD
- advapi32!EtwpRealTimeDisconnect - CtrlCode 0xE
- ntdll!EtwpRegisterProvider - CtrlCode 0xF
- ntdll!EtwpNotificationThread - CtrlCode 0x10
- ntdll!EtwSendNotification - CtrlCode 0x11
- ntdll!EtwReplyNotification - CtrlCode 0x12
- ntdll!EtwpReceiveReplyDataBlock - CtrlCode 0x13
- advapi32!EnumerateTraceGuidsEx - CtrlCode 0x15 или 0x16
- advapi32!EnumerateTraceGuids - CtrlCode 0x17
- ntdll!EtwRegisterSecurityProvider - CtrlCode 0x18
- 1 - EtwpStartTrace
- 2 - EtwpStopTrace
- 3 - EtwpQueryTrace
- 4 - EtwpUpdateTrace
- 5 - EtwpFlushTrace
- 0xB - EtwpRealtimeConnect
- 0xC - EtwpCreateActivityId
- 0xD - WdiDispatchControl
- 0xE - EtwpRealtimeDisconnectConsumerByHandle
- 0xF - EtwpRegisterUMGuid
- 0x10 - EtwpReceiveNotification
- 0x11 - EtwpEnableGuid
- 0x12 - EtwpSendReplyDataBlock
- 0x13 - EtwpReceiveReplyDataBlock
- 0x14 - WdiUpdateSem
- 0x15 - EtwpGetTraceGuidList
- 0x16 - EtwpGetTraceGuidInfo
- 0x17 - EtwpEnumerateTraceGuids
- 0x18 - присваивание переменной EtwpSecurityProviderPID значение PID вызвавшего процесса
Can you do a quick SRE of EtwpQueryTrace through NtTraceControl and provide some sample code? I was looking at the user mode call for QueryAllTraces to get all of the sessions going on and wanted to do this in kernel code. So, I looked at the code and it seems to loop from 0-40 (max sessions) and call QueryTrace for each index, for what I think is the session ID, which ends up calling NtTraceControl for op code 3.
ОтветитьУдалитьBut, I can't get the input correct to get the output of a session. I allocate for the sizeof(EVENT_TRACE_PROPERTIES) and add more at the end of the structure for the session name and session log file name and update the pointers like in the example. But I don't know how/where to put the index (session id) ... I keep getting status code 0xc00000d, sometimes 0xc00000005.
Any help is appreciated! Thanks.
I am not sure that you need session name
ОтветитьУдалитьIf you check advapi32!StartTraceA you can see code which compare name of session and put some IID to EVENT_TRACE_PROPERTIES + 0x18:
"NT Kernel Logger" - SystemTraceControlGuid
"Circular Kernel Context Logger" - 54DEA73A-ED1F-42A4-AF71-3E63D056F174
Check content of EVENT_TRACE_PROPERTIES after calling StartTrace