пятница, 25 марта 2011 г.

SetTraceCallback

а вот например в advapi32.dll есть такая ф-ция и ее близнец. И как обычно нет механизма перечисления этих обработчиков
Устроено оно внутри очень просто и примитивно - все обработчики лежат в примерно такой структуре:

struct trace_list_item
{
  LIST_ENTRY List;
  GUID       Iid;
  PEVENT_CALLBACK  TraceCallback;
};

Cписок из этих структур живет в EtwpEventCallbackList, причем до vista там лежит указатель на LIST_ENTRY
Доступ к списку синхронизируется через critical section EtwTCCritSect
Обе переменные вытаскиваются простым дизассемблированием SetTraceCallback

Комментариев нет:

Отправить комментарий