1#![allow(missing_docs)]
2
3use crate::types::ProcessId;
4use std::net::IpAddr;
5
6#[derive(Debug, Clone)]
8pub enum DecodedEvent {
9 ProcessStart(ProcessStartEvent),
11 ProcessEnd(ProcessEndEvent),
13 ImageLoad(ImageLoadEvent),
15 ImageUnload(ImageUnloadEvent),
17 Tcp(TcpEvent),
19 Registry(RegistryEvent),
21 FileIo(FileIoEvent),
23 Generic(Vec<EventField>),
25 Unknown,
27}
28
29#[derive(Debug, Clone)]
31pub struct EventField {
32 pub name: String,
33 pub value: EventFieldValue,
34}
35
36#[derive(Debug, Clone)]
38pub enum EventFieldValue {
39 String(String),
41 IpAddr(IpAddr),
43 U8(u8),
45 U16(u16),
47 U32(u32),
49 U64(u64),
51 I32(i32),
53 I64(i64),
55 Bool(bool),
57 Guid(windows::core::GUID),
59 Binary(Vec<u8>),
61 Pointer(u64),
63}
64
65#[derive(Debug, Clone, Copy, PartialEq, Eq)]
67pub enum TcpOperation {
68 Send,
70 Receive,
72 Connect,
74 Disconnect,
76 Retransmit,
78 Accept,
80 Reconnect,
82 Copy,
84 Unknown,
86}
87
88#[derive(Debug, Clone)]
90pub struct TcpEvent {
91 pub operation: TcpOperation,
92 pub process_id: Option<ProcessId>,
93 pub source_ip: Option<IpAddr>,
94 pub source_port: Option<u16>,
95 pub destination_ip: Option<IpAddr>,
96 pub destination_port: Option<u16>,
97 pub size: Option<u32>,
98 pub sequence_number: Option<u32>,
99}
100
101#[derive(Debug, Clone, Copy, PartialEq, Eq)]
103pub enum RegistryOperation {
104 Create,
106 Open,
108 DeleteKey,
110 QueryKey,
112 SetValue,
114 DeleteValue,
116 QueryValue,
118 EnumerateKey,
120 EnumerateValue,
122 SetInformation,
124 Unknown,
126}
127
128#[derive(Debug, Clone)]
130pub struct RegistryEvent {
131 pub operation: RegistryOperation,
132 pub process_id: Option<ProcessId>,
133 pub key_name: Option<String>,
134 pub relative_name: Option<String>,
135 pub value_name: Option<String>,
136 pub status: Option<u32>,
137 pub key_handle: Option<u64>,
138}
139
140#[derive(Debug, Clone, Copy, PartialEq, Eq)]
142pub enum FileIoOperation {
143 Name,
145 Create,
147 Rundown,
149 Cleanup,
151 Close,
153 SetInformation,
155 DirectoryEnumeration,
157 Flush,
159 QueryInformation,
161 FileSystemControl,
163 OperationEnd,
165 DirectoryNotification,
167 Read,
169 Write,
171 Delete,
173 Rename,
175 Unknown,
177}
178
179#[derive(Debug, Clone)]
181pub struct FileIoEvent {
182 pub operation: FileIoOperation,
183 pub process_id: Option<ProcessId>,
184 pub file_object: Option<u64>,
185 pub irp_ptr: Option<u64>,
186 pub file_key: Option<u64>,
187 pub open_path: Option<String>,
188 pub create_options: Option<u32>,
189 pub file_attributes: Option<u32>,
190 pub share_access: Option<u32>,
191}
192
193#[derive(Debug, Clone)]
195pub struct ProcessStartEvent {
196 pub process_id: ProcessId,
197 pub parent_process_id: ProcessId,
198 pub session_id: Option<u32>,
199 pub exit_status: Option<u32>,
200 pub unique_process_key: Option<u64>,
201 pub directory_table_base: Option<u64>,
202 pub image_file_name: String,
203 pub command_line: Option<String>,
204 pub user_sid: Option<String>,
205 pub version: u8,
206}
207
208#[derive(Debug, Clone)]
210pub struct ProcessEndEvent {
211 pub process_id: ProcessId,
212 pub parent_process_id: ProcessId,
213 pub session_id: Option<u32>,
214 pub exit_status: Option<u32>,
215 pub unique_process_key: Option<u64>,
216 pub directory_table_base: Option<u64>,
217 pub image_file_name: String,
218 pub command_line: Option<String>,
219 pub user_sid: Option<String>,
220 pub version: u8,
221}
222
223#[derive(Debug, Clone)]
225pub struct ImageLoadEvent {
226 pub process_id: ProcessId,
227 pub image_base: u64,
228 pub image_size: u64,
229 pub checksum: u32,
230 pub timestamp: u32,
231 pub default_base: u64,
232 pub file_name: String,
233 pub version: u8,
234}
235
236#[derive(Debug, Clone)]
238pub struct ImageUnloadEvent {
239 pub process_id: ProcessId,
240 pub image_base: u64,
241 pub image_size: u64,
242 pub checksum: u32,
243 pub timestamp: u32,
244 pub default_base: u64,
245 pub file_name: String,
246 pub version: u8,
247}