aboutsummaryrefslogtreecommitdiff
path: root/core/sys/windows/tlhelp.odin
blob: 006c9c330d4bd00b1695660f011767e478d03be9 (plain)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#+build windows
package sys_windows

foreign import kernel32 "system:Kernel32.lib"

@(default_calling_convention="system")
foreign kernel32 {
	CreateToolhelp32Snapshot :: proc (dwFlags: DWORD, th32ProcessID: DWORD) -> HANDLE ---
	Process32FirstW :: proc (hSnapshot: HANDLE, lppe: LPPROCESSENTRY32W) -> BOOL ---
	Process32NextW :: proc (hSnapshot: HANDLE, lppe: LPPROCESSENTRY32W) -> BOOL ---
	Thread32First :: proc (hSnapshot: HANDLE, lpte: LPTHREADENTRY32) -> BOOL ---
	Thread32Next :: proc (hSnapshot: HANDLE, lpte: LPTHREADENTRY32) -> BOOL ---
	Module32FirstW :: proc (hSnapshot: HANDLE, lpme: LPMODULEENTRY32W) -> BOOL ---
	Module32NextW :: proc (hSnapshot: HANDLE, lpme: LPMODULEENTRY32W) -> BOOL ---
	Heap32ListFirst :: proc (hSnapshot: HANDLE, lphl: LPHEAPLIST32) -> BOOL ---
	Heap32ListNext :: proc (hSnapshot: HANDLE, lphl: LPHEAPLIST32) -> BOOL ---
	Heap32First :: proc (lphe: LPHEAPENTRY32, th32ProcessID: DWORD, th32HeapID: ULONG_PTR) -> BOOL ---
	Heap32Next :: proc (lphe: LPHEAPENTRY32) -> BOOL ---
	Toolhelp32ReadProcessMemory :: proc (
		th32ProcessID: DWORD,
		lpBaseAddress: LPCVOID,
		lpBuffer: LPVOID,
		cbRead: SIZE_T,
		lpNumberOfBytesRead: ^SIZE_T,
	) -> BOOL ---
}

MAX_MODULE_NAME32 :: 255

TH32CS_INHERIT      :: 0x80000000
TH32CS_SNAPHEAPLIST :: 0x00000001
TH32CS_SNAPPROCESS  :: 0x00000002
TH32CS_SNAPTHREAD   :: 0x00000004
TH32CS_SNAPMODULE   :: 0x00000008
TH32CS_SNAPMODULE32 :: 0x00000010
TH32CS_SNAPALL :: TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE

PROCESSENTRY32W :: struct {
	dwSize: DWORD,
	cntUsage: DWORD,
	th32ProcessID: DWORD,
	th32DefaultHeapID: ULONG_PTR,
	th32ModuleID: DWORD,
	cntThreads: DWORD,
	th32ParentProcessID: DWORD,
	pcPriClassBase: LONG,
	dwFlags: DWORD,
	szExeFile: [MAX_PATH]WCHAR,
}

LPPROCESSENTRY32W :: ^PROCESSENTRY32W

THREADENTRY32 :: struct {
	dwSize: DWORD,
	cntUsage: DWORD,
	th32ThreadID: DWORD,
	th32OwnerProcessID: DWORD,
	tpBasePri: LONG,
	tpDeltaPri: LONG,
	dwFlags: DWORD,
}

LPTHREADENTRY32 :: ^THREADENTRY32

MODULEENTRY32W :: struct {
	dwSize: DWORD,
	th32ModuleID: DWORD,
	th32ProcessID: DWORD,
	GlblcntUsage: DWORD,
	ProccntUsage: DWORD,
	modBaseAddr: ^BYTE,
	modBaseSize: DWORD,
	hModule: HMODULE,
	szModule: [MAX_MODULE_NAME32 + 1]WCHAR,
	szExePath: [MAX_PATH]WCHAR,
}

LPMODULEENTRY32W :: ^MODULEENTRY32W

HEAPLIST32 :: struct {
	dwSize: SIZE_T,
	th32ProcessID: DWORD,
	th32HeapID: ULONG_PTR,
	dwFlags: DWORD,
}

LPHEAPLIST32 :: ^HEAPLIST32

HEAPENTRY32 :: struct {
	dwSize: SIZE_T,
	hHandle: HANDLE,
	dwAddress: ULONG_PTR,
	dwBlockSize: SIZE_T,
	dwFlags: DWORD,
	dwLockCount: DWORD,
	dwResvd: DWORD,
	th32ProcessID: DWORD,
	th32HeapID: ULONG_PTR,
}

LPHEAPENTRY32 :: ^HEAPENTRY32