-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathListProcessModules.ahk
36 lines (36 loc) · 1.15 KB
/
ListProcessModules.ahk
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
ListProcessModules(dwPID) {
me32 := Buffer(A_PtrSize = 8 ? 568 : 548), modules := []
NumPut("UInt", A_PtrSize = 8 ? 568 : 548, me32, 0)
hModuleSnap := DllCall("CreateToolhelp32Snapshot", "UInt", 0x08, "UInt", dwPID)
if (hModuleSnap = -1)
return FALSE
if (!DllCall("Module32First", "PTR", hModuleSnap, "PTR", me32)) {
DllCall("CloseHandle", "PTR", hModuleSnap)
return FALSE
}
while (A_Index = 1 || DllCall("Module32Next", "PTR", hModuleSnap, "PTR", me32)) {
modules.Push({
szModule: StrGet(me32.Ptr + A_PtrSize * 4 + 16, "cp0"),
szExePath: StrGet(me32.Ptr + A_PtrSize * 4 + 272, "cp0"),
modBaseAddr: NumGet(me32, A_PtrSize + 16, "ptr"),
modBaseSize: NumGet(me32, A_PtrSize * 2 + 16, "uint")
})
}
DllCall("CloseHandle", "PTR", hModuleSnap)
return modules
}
/*
* total size: 548(32 bit) 568(64 bit)
* struct tagMODULEENTRY32 {
* UInt dwSize; // 0 0
* UInt th32ModuleID; // 4 4
* UInt th32ProcessID; // 8 8
* UInt GlblcntUsage; // 12 12
* UInt ProccntUsage; // 16 16
* Ptr modBaseAddr; // 20 24
* UInt modBaseSize; // 24 32
* Ptr hModule; // 28 40
* char szModule[256]; // 32 48
* char szExePath[260]; // 288 304
* } MODULEENTRY32;
*/