
#ifndef __NOTIFY_EVENTS_H_
#define __NOTIFY_EVENTS_H_

/**
 * @file notify_event.h
 *
 * Hlavickovy soubor k souboru notify_events.c, ktery implementuje podporu pro vytvareni
 * zaznamu udalosti specifickych pro ovladac logptm.
 */

#include <ntddk.h>

// Typy udalosti
#define EVENT_TYPE_PROCESS             1
#define EVENT_TYPE_IMAGE               2
#define EVENT_TYPE_THREAD              3


// Struktura specificka pro udalost procesu
typedef struct _EVENT_PROCESS
{
  ULONG64 PID;            // PID noveho procesu ci PID prave ukoncovaneho procesu
  ULONG64 ParentPID;      // PID rodice noveho procesu
  ULONG64 CreatorPID;     // PID procesu, ktery vytvoril novy proces
  ULONG64 CreatorTID;     // TID vlakna, ktere vytvorilo novy proces
  BOOLEAN Created;        // TRUE - vytvoreni noveho procesu, FALSE - ukonceni existujiciho procesu
} EVENT_PROCESS, *PEVENT_PROCESS; 

// Struktura specificka pro udalost modulu
typedef struct _EVENT_IMAGE
{
  ULONG64 PID;            // PID procesu, do ktereho byl soubor namapovan
  ULONG64 TID;            // TID vlakna, v jehoz kontextu k nacteni modulu doslo
  ULONG64 BaseAddress;    // virtualni adresa modulu
  ULONG32 ImageSize;      // velikost modulu v bajtech
  ULONG32 NameLength;     // delka jmena modulu (v bytech)
  WCHAR Name[1];          // jmeno mapovaneho souboru PE
} EVENT_IMAGE, *PEVENT_IMAGE;

// Struktura specificka pro udalost vlakna
typedef struct _EVENT_THREAD
{
  ULONG64 PID;            // PID procesu, kteremu vlakno patri
  ULONG64 TID;            // TID vlakna, jehoz se udalost tyka
  ULONG64 CreatorTID;     // TID vlakna, ktere vytvorilo nove vlakno
  ULONG64 CreatorPID;     // PID procesu, kteremu patri tvurci vlakno
  BOOLEAN Created;        // TRUE - vytvoreno nove vlakno, FALSE - ukonceno existujici vlakno
} EVENT_THREAD, *PEVENT_THREAD;


PEVENT ProcessEventCreate(PLARGE_INTEGER Time, HANDLE ParentPID, HANDLE CreatorPID, HANDLE CreatorTID, HANDLE NewPID, BOOLEAN Created);
PEVENT ThreadEventCreate(PLARGE_INTEGER Time, HANDLE TID, HANDLE PID, HANDLE CreatorTID, HANDLE CreatorPID, BOOLEAN Created);
PEVENT ImageEventCreate(PLARGE_INTEGER Time, PUNICODE_STRING Name, HANDLE PID, HANDLE TID, PVOID BaseAddress, ULONG ImageSize);


#endif
