@@ -105,6 +105,37 @@ struct SEtwEventMonitor
105
105
});
106
106
kernel_trace.enable(file_provider);*/
107
107
108
+ proc_provider.add_on_event_callback ([This](const EVENT_RECORD &record) {
109
+ // qDebug() << "process event";
110
+ krabs::schema schema (record);
111
+
112
+ if (schema.event_id () != 0 )
113
+ return ;
114
+
115
+ int Type = EventTypeUnknow;
116
+ switch (schema.event_opcode ())
117
+ {
118
+ case 1 : Type = EtwProcessStarted; break ;
119
+ case 2 : Type = EtwProcessStopped; break ;
120
+ default : // we dont care for other event types
121
+ return ;
122
+ }
123
+
124
+ krabs::parser parser (schema);
125
+
126
+ quint32 ProcessId = parser.parse <uint32_t >(L" ProcessId" );
127
+ QString CommandLine = QString::fromStdWString (parser.parse <wstring>(L" CommandLine" ));
128
+ QString FileName = QString::fromStdString (parser.parse <string>(L" ImageFileName" ));
129
+ quint32 ParentId = parser.parse <uint32_t >(L" ParentId" );
130
+
131
+ // qDebug() << FILETIME2time(schema.timestamp().QuadPart) << GetTime();
132
+
133
+ emit This->ProcessEvent (Type, ProcessId, CommandLine, FileName, ParentId, schema.timestamp ().QuadPart );
134
+
135
+ });
136
+ kernel_trace.enable (proc_provider);
137
+
138
+
108
139
auto net_callback = [](CEtwEventMonitor* This, const EVENT_RECORD &record) {
109
140
// qDebug() << "net event";
110
141
@@ -267,6 +298,7 @@ struct SEtwEventMonitor
267
298
268
299
krabs::kernel::disk_io_provider disk_provider;
269
300
// krabs::kernel::file_io_provider file_provider;
301
+ krabs::kernel::process_provider proc_provider;
270
302
krabs::kernel::network_tcpip_provider tcp_provider;
271
303
krabs::kernel::network_udpip_provider udp_provider;
272
304
0 commit comments