Устроено оно внутри очень просто и примитивно - все обработчики лежат в примерно такой структуре:
struct trace_list_item
{
LIST_ENTRY List;
GUID Iid;
PEVENT_CALLBACK TraceCallback;
};
Cписок из этих структур живет в EtwpEventCallbackList, причем до vista там лежит указатель на LIST_ENTRY
Доступ к списку синхронизируется через critical section EtwTCCritSect
Обе переменные вытаскиваются простым дизассемблированием SetTraceCallback
Комментариев нет:
Отправить комментарий