#![allow(missing_docs)]
use crate::types::ProcessId;
use std::net::IpAddr;
#[derive(Debug, Clone)]
pub enum DecodedEvent {
ProcessStart(ProcessStartEvent),
ProcessEnd(ProcessEndEvent),
ImageLoad(ImageLoadEvent),
ImageUnload(ImageUnloadEvent),
Tcp(TcpEvent),
Registry(RegistryEvent),
FileIo(FileIoEvent),
Generic(Vec<EventField>),
Unknown,
}
#[derive(Debug, Clone)]
pub struct EventField {
pub name: String,
pub value: EventFieldValue,
}
#[derive(Debug, Clone)]
pub enum EventFieldValue {
String(String),
IpAddr(IpAddr),
U8(u8),
U16(u16),
U32(u32),
U64(u64),
I32(i32),
I64(i64),
Bool(bool),
Guid(windows::core::GUID),
Binary(Vec<u8>),
Pointer(u64),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TcpOperation {
Send,
Receive,
Connect,
Disconnect,
Retransmit,
Accept,
Reconnect,
Copy,
Unknown,
}
#[derive(Debug, Clone)]
pub struct TcpEvent {
pub operation: TcpOperation,
pub process_id: Option<ProcessId>,
pub source_ip: Option<IpAddr>,
pub source_port: Option<u16>,
pub destination_ip: Option<IpAddr>,
pub destination_port: Option<u16>,
pub size: Option<u32>,
pub sequence_number: Option<u32>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RegistryOperation {
Create,
Open,
DeleteKey,
QueryKey,
SetValue,
DeleteValue,
QueryValue,
EnumerateKey,
EnumerateValue,
SetInformation,
Unknown,
}
#[derive(Debug, Clone)]
pub struct RegistryEvent {
pub operation: RegistryOperation,
pub process_id: Option<ProcessId>,
pub key_name: Option<String>,
pub relative_name: Option<String>,
pub value_name: Option<String>,
pub status: Option<u32>,
pub key_handle: Option<u64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FileIoOperation {
Name,
Create,
Rundown,
Cleanup,
Close,
SetInformation,
DirectoryEnumeration,
Flush,
QueryInformation,
FileSystemControl,
OperationEnd,
DirectoryNotification,
Read,
Write,
Delete,
Rename,
Unknown,
}
#[derive(Debug, Clone)]
pub struct FileIoEvent {
pub operation: FileIoOperation,
pub process_id: Option<ProcessId>,
pub file_object: Option<u64>,
pub irp_ptr: Option<u64>,
pub file_key: Option<u64>,
pub open_path: Option<String>,
pub create_options: Option<u32>,
pub file_attributes: Option<u32>,
pub share_access: Option<u32>,
}
#[derive(Debug, Clone)]
pub struct ProcessStartEvent {
pub process_id: ProcessId,
pub parent_process_id: ProcessId,
pub session_id: Option<u32>,
pub exit_status: Option<u32>,
pub unique_process_key: Option<u64>,
pub directory_table_base: Option<u64>,
pub image_file_name: String,
pub command_line: Option<String>,
pub user_sid: Option<String>,
pub version: u8,
}
#[derive(Debug, Clone)]
pub struct ProcessEndEvent {
pub process_id: ProcessId,
pub parent_process_id: ProcessId,
pub session_id: Option<u32>,
pub exit_status: Option<u32>,
pub unique_process_key: Option<u64>,
pub directory_table_base: Option<u64>,
pub image_file_name: String,
pub command_line: Option<String>,
pub user_sid: Option<String>,
pub version: u8,
}
#[derive(Debug, Clone)]
pub struct ImageLoadEvent {
pub process_id: ProcessId,
pub image_base: u64,
pub image_size: u64,
pub checksum: u32,
pub timestamp: u32,
pub default_base: u64,
pub file_name: String,
pub version: u8,
}
#[derive(Debug, Clone)]
pub struct ImageUnloadEvent {
pub process_id: ProcessId,
pub image_base: u64,
pub image_size: u64,
pub checksum: u32,
pub timestamp: u32,
pub default_base: u64,
pub file_name: String,
pub version: u8,
}