1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//! Debugger support.

use ::status::NTSTATUS;

extern "C"
{
	/// `DbgPrint` routine sends a message to the kernel debugger.
	pub fn DbgPrint(Format: *const u8, ...) -> NTSTATUS;
	/// The `DbgPrintEx` routine sends a string to the kernel debugger if certain conditions are met.
	pub fn DbgPrintEx(ComponentId: u32, Level: u32, Format: *const u8, ...) -> NTSTATUS;
}

extern "system"
{
	/// Breaks into the kernel debugger.
	pub fn DbgBreakPoint();
	/// Breaks into the kernel debugger and sends the value of `Status` to the debugger.
	pub fn DbgBreakPointWithStatus(Status: NTSTATUS);
}

/// `DbgPrintEx` Message severity.
#[repr(C)]
pub enum DPFLTR_LEVEL {
	ERROR = 0,
	WARNING,
	TRACE,
	INFO,
}

/// `DbgPrintEx` Component name.
#[repr(C)]
pub enum DPFLTR_ID {
	SYSTEM = 0,
	SMSS,
	SETUP,
	NTFS,
	// ...
	IHVDRIVER = 77,
	IHVVIDEO,
	IHVAUDIO,
	IHVNETWORK,
	IHVSTREAMING,
	IHVBUS,

	DEFAULT = 99,
}