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