1/*-
2        tlhelp32.h - Include file for Tool help functions.
3
4        Written by Mumit Khan <khan@nanotech.wisc.edu>
5
6        This file is part of a free library for the Win32 API.
7
8        This library is distributed in the hope that it will be useful,
9        but WITHOUT ANY WARRANTY; without even the implied warranty of
10        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
12*/
13#ifndef _TLHELP32_H
14# define _TLHELP32_H
15#ifdef __cplusplus
16extern "C" {
17#endif
18# define HF32_DEFAULT    1
19# define HF32_SHARED     2
20# define LF32_FIXED      0x1
21# define LF32_FREE       0x2
22# define LF32_MOVEABLE   0x4
23# define MAX_MODULE_NAME32       255
24# define TH32CS_SNAPHEAPLIST     0x1
25# define TH32CS_SNAPPROCESS      0x2
26# define TH32CS_SNAPTHREAD       0x4
27# define TH32CS_SNAPMODULE       0x8
28# define TH32CS_SNAPALL  (TH32CS_SNAPHEAPLIST|TH32CS_SNAPPROCESS|TH32CS_SNAPTHREAD|TH32CS_SNAPMODULE)
29# define TH32CS_INHERIT  0x80000000
30typedef struct tagHEAPLIST32 {
31    DWORD dwSize;
32    DWORD th32ProcessID;
33    DWORD th32HeapID;
34    DWORD dwFlags;
35} HEAPLIST32, *PHEAPLIST32, *LPHEAPLIST32;
36typedef struct tagHEAPENTRY32 {
37    DWORD dwSize;
38    HANDLE hHandle;
39    DWORD dwAddress;
40    DWORD dwBlockSize;
41    DWORD dwFlags;
42    DWORD dwLockCount;
43    DWORD dwResvd;
44    DWORD th32ProcessID;
45    DWORD th32HeapID;
46} HEAPENTRY32, *PHEAPENTRY32, *LPHEAPENTRY32;
47typedef struct tagPROCESSENTRY32W {
48    DWORD dwSize;
49    DWORD cntUsage;
50    DWORD th32ProcessID;
51    DWORD th32DefaultHeapID;
52    DWORD th32ModuleID;
53    DWORD cntThreads;
54    DWORD th32ParentProcessID;
55    LONG pcPriClassBase;
56    DWORD dwFlags;
57    WCHAR szExeFile[MAX_PATH];
58} PROCESSENTRY32W, *PPROCESSENTRY32W, *LPPROCESSENTRY32W;
59typedef struct tagPROCESSENTRY32 {
60    DWORD dwSize;
61    DWORD cntUsage;
62    DWORD th32ProcessID;
63    DWORD th32DefaultHeapID;
64    DWORD th32ModuleID;
65    DWORD cntThreads;
66    DWORD th32ParentProcessID;
67    LONG pcPriClassBase;
68    DWORD dwFlags;
69    CHAR szExeFile[MAX_PATH];
70} PROCESSENTRY32, *PPROCESSENTRY32, *LPPROCESSENTRY32;
71typedef struct tagTHREADENTRY32 {
72    DWORD dwSize;
73    DWORD cntUsage;
74    DWORD th32ThreadID;
75    DWORD th32OwnerProcessID;
76    LONG tpBasePri;
77    LONG tpDeltaPri;
78    DWORD dwFlags;
79} THREADENTRY32, *PTHREADENTRY32, *LPTHREADENTRY32;
80typedef struct tagMODULEENTRY32W {
81    DWORD dwSize;
82    DWORD th32ModuleID;
83    DWORD th32ProcessID;
84    DWORD GlblcntUsage;
85    DWORD ProccntUsage;
86    BYTE *modBaseAddr;
87    DWORD modBaseSize;
88    HMODULE hModule;
89    WCHAR szModule[MAX_MODULE_NAME32 + 1];
90    WCHAR szExePath[MAX_PATH];
91} MODULEENTRY32W, *PMODULEENTRY32W, *LPMODULEENTRY32W;
92typedef struct tagMODULEENTRY32 {
93    DWORD dwSize;
94    DWORD th32ModuleID;
95    DWORD th32ProcessID;
96    DWORD GlblcntUsage;
97    DWORD ProccntUsage;
98    BYTE *modBaseAddr;
99    DWORD modBaseSize;
100    HMODULE hModule;
101    char szModule[MAX_MODULE_NAME32 + 1];
102    char szExePath[MAX_PATH];
103} MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32;
104BOOL WINAPI Heap32First(LPHEAPENTRY32, DWORD, DWORD);
105BOOL WINAPI Heap32ListFirst(HANDLE, LPHEAPLIST32);
106BOOL WINAPI Heap32ListNext(HANDLE, LPHEAPLIST32);
107BOOL WINAPI Heap32Next(LPHEAPENTRY32);
108BOOL WINAPI Module32First(HANDLE, LPMODULEENTRY32);
109BOOL WINAPI Module32FirstW(HANDLE, LPMODULEENTRY32W);
110BOOL WINAPI Module32Next(HANDLE, LPMODULEENTRY32);
111BOOL WINAPI Module32NextW(HANDLE, LPMODULEENTRY32W);
112BOOL WINAPI Process32First(HANDLE, LPPROCESSENTRY32);
113BOOL WINAPI Process32FirstW(HANDLE, LPPROCESSENTRY32W);
114BOOL WINAPI Process32Next(HANDLE, LPPROCESSENTRY32);
115BOOL WINAPI Process32NextW(HANDLE, LPPROCESSENTRY32W);
116BOOL WINAPI Thread32First(HANDLE, LPTHREADENTRY32);
117BOOL WINAPI Thread32Next(HANDLE, LPTHREADENTRY32);
118BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD, LPCVOID, LPVOID, DWORD,
119                                        LPDWORD);
120HANDLE WINAPI CreateToolhelp32Snapshot(DWORD, DWORD);
121# ifdef UNICODE
122#  define LPMODULEENTRY32 LPMODULEENTRY32W
123#  define LPPROCESSENTRY32 LPPROCESSENTRY32W
124#  define MODULEENTRY32 MODULEENTRY32W
125#  define Module32First Module32FirstW
126#  define Module32Next Module32NextW
127#  define PMODULEENTRY32 PMODULEENTRY32W
128#  define PPROCESSENTRY32 PPROCESSENTRY32W
129#  define PROCESSENTRY32 PROCESSENTRY32W
130#  define Process32First Process32FirstW
131#  define Process32Next Process32NextW
132# endif                         /* UNICODE */
133#ifdef __cplusplus
134}
135#endif
136#endif                          /* _TLHELP32_H */
137