1 /***********************************************************************\
2 * psapi.d *
3 * *
4 * Windows API header module *
5 * *
6 * Translated from MinGW Windows headers *
7 * *
8 * Placed into public domain *
9 \***********************************************************************/
10 /* Comment from MinGW
11 * Process status API (PSAPI)
12 * http://windowssdk.msdn.microsoft.com/library/ms684884.aspx
13 */
14
15 module win32.psapi;
16 version(Windows):
17
18 private import win32.w32api;
19 private import win32.winbase;
20 private import win32.windef;
21
22 struct MODULEINFO {
23 LPVOID lpBaseOfDll;
24 DWORD SizeOfImage;
25 LPVOID EntryPoint;
26 }
27 alias MODULEINFO* LPMODULEINFO;
28
29 struct PSAPI_WS_WATCH_INFORMATION {
30 LPVOID FaultingPc;
31 LPVOID FaultingVa;
32 }
33 alias PSAPI_WS_WATCH_INFORMATION* PPSAPI_WS_WATCH_INFORMATION;
34
35 struct PSAPI_WS_WATCH_INFORMATION_EX {
36 PSAPI_WS_WATCH_INFORMATION BasicInfo;
37 ULONG_PTR FaultingThreadId;
38 ULONG_PTR Flags;
39 }
40 alias PSAPI_WS_WATCH_INFORMATION_EX* PPSAPI_WS_WATCH_INFORMATION_EX;
41
42 struct PROCESS_MEMORY_COUNTERS {
43 DWORD cb;
44 DWORD PageFaultCount;
45 DWORD PeakWorkingSetSize;
46 DWORD WorkingSetSize;
47 DWORD QuotaPeakPagedPoolUsage;
48 DWORD QuotaPagedPoolUsage;
49 DWORD QuotaPeakNonPagedPoolUsage;
50 DWORD QuotaNonPagedPoolUsage;
51 DWORD PagefileUsage;
52 DWORD PeakPagefileUsage;
53 }
54 alias PROCESS_MEMORY_COUNTERS* PPROCESS_MEMORY_COUNTERS;
55
56 struct PERFORMANCE_INFORMATION {
57 DWORD cb;
58 SIZE_T CommitTotal;
59 SIZE_T CommitLimit;
60 SIZE_T CommitPeak;
61 SIZE_T PhysicalTotal;
62 SIZE_T PhysicalAvailable;
63 SIZE_T SystemCache;
64 SIZE_T KernelTotal;
65 SIZE_T KernelPaged;
66 SIZE_T KernelNonpaged;
67 SIZE_T PageSize;
68 DWORD HandleCount;
69 DWORD ProcessCount;
70 DWORD ThreadCount;
71 }
72 alias PERFORMANCE_INFORMATION* PPERFORMANCE_INFORMATION;
73
74 struct ENUM_PAGE_FILE_INFORMATION {
75 DWORD cb;
76 DWORD Reserved;
77 SIZE_T TotalSize;
78 SIZE_T TotalInUse;
79 SIZE_T PeakUsage;
80 }
81 alias ENUM_PAGE_FILE_INFORMATION* PENUM_PAGE_FILE_INFORMATION;
82
83 /* application-defined callback function used with the EnumPageFiles()
84 * http://windowssdk.msdn.microsoft.com/library/ms682627.aspx */
85 version (Unicode) {
86 alias BOOL function(LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR)
87 PENUM_PAGE_FILE_CALLBACK;
88 } else {
89 alias BOOL function(LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR)
90 PENUM_PAGE_FILE_CALLBACK;
91 }
92
93 // Grouped by application, not in alphabetical order.
94 extern (Windows) {
95 /* Process Information
96 * http://windowssdk.msdn.microsoft.com/library/ms684870.aspx */
97 BOOL EnumProcesses(DWORD*, DWORD, DWORD*); /* NT/2000/XP/Server2003/Vista/Longhorn */
98 DWORD GetProcessImageFileNameA(HANDLE, LPSTR, DWORD); /* XP/Server2003/Vista/Longhorn */
99 DWORD GetProcessImageFileNameW(HANDLE, LPWSTR, DWORD); /* XP/Server2003/Vista/Longhorn */
100
101 /* Module Information
102 * http://windowssdk.msdn.microsoft.com/library/ms684232.aspx */
103 BOOL EnumProcessModules(HANDLE, HMODULE*, DWORD, LPDWORD);
104 BOOL EnumProcessModulesEx(HANDLE, HMODULE*, DWORD, LPDWORD, DWORD); /* Vista/Longhorn */
105 DWORD GetModuleBaseNameA(HANDLE, HMODULE, LPSTR, DWORD);
106 DWORD GetModuleBaseNameW(HANDLE, HMODULE, LPWSTR, DWORD);
107 DWORD GetModuleFileNameExA(HANDLE, HMODULE, LPSTR, DWORD);
108 DWORD GetModuleFileNameExW(HANDLE, HMODULE, LPWSTR, DWORD);
109 BOOL GetModuleInformation(HANDLE, HMODULE, LPMODULEINFO, DWORD);
110
111 /* Device Driver Information
112 * http://windowssdk.msdn.microsoft.com/library/ms682578.aspx */
113 BOOL EnumDeviceDrivers(LPVOID*, DWORD, LPDWORD);
114 DWORD GetDeviceDriverBaseNameA(LPVOID, LPSTR, DWORD);
115 DWORD GetDeviceDriverBaseNameW(LPVOID, LPWSTR, DWORD);
116 DWORD GetDeviceDriverFileNameA(LPVOID, LPSTR, DWORD);
117 DWORD GetDeviceDriverFileNameW(LPVOID, LPWSTR, DWORD);
118
119 /* Process Memory Usage Information
120 * http://windowssdk.msdn.microsoft.com/library/ms684879.aspx */
121 BOOL GetProcessMemoryInfo(HANDLE, PPROCESS_MEMORY_COUNTERS, DWORD);
122
123 /* Working Set Information
124 * http://windowssdk.msdn.microsoft.com/library/ms687398.aspx */
125 BOOL EmptyWorkingSet(HANDLE);
126 BOOL GetWsChanges(HANDLE, PPSAPI_WS_WATCH_INFORMATION, DWORD);
127 BOOL GetWsChangesEx(HANDLE, PPSAPI_WS_WATCH_INFORMATION_EX, DWORD); /* Vista/Longhorn */
128 BOOL InitializeProcessForWsWatch(HANDLE);
129 BOOL QueryWorkingSet(HANDLE, PVOID, DWORD);
130 BOOL QueryWorkingSetEx(HANDLE, PVOID, DWORD);
131
132 /* Memory-Mapped File Information
133 * http://windowssdk.msdn.microsoft.com/library/ms684212.aspx */
134 DWORD GetMappedFileNameW(HANDLE, LPVOID, LPWSTR, DWORD);
135 DWORD GetMappedFileNameA(HANDLE, LPVOID, LPSTR, DWORD);
136
137 /* Resources Information */
138 BOOL GetPerformanceInfo(PPERFORMANCE_INFORMATION, DWORD); /* XP/Server2003/Vista/Longhorn */
139 BOOL EnumPageFilesW(PENUM_PAGE_FILE_CALLBACK, LPVOID); /* 2000/XP/Server2003/Vista/Longhorn */
140 BOOL EnumPageFilesA(PENUM_PAGE_FILE_CALLBACK, LPVOID); /* 2000/XP/Server2003/Vista/Longhorn */
141 }
142
143 version (Unicode) {
144 alias GetModuleBaseNameW GetModuleBaseName;
145 alias GetModuleFileNameExW GetModuleFileNameEx;
146 alias GetMappedFileNameW GetMappedFileName;
147 alias GetDeviceDriverBaseNameW GetDeviceDriverBaseName;
148 alias GetDeviceDriverFileNameW GetDeviceDriverFileName;
149 alias EnumPageFilesW EnumPageFiles;
150 alias GetProcessImageFileNameW GetProcessImageFileName;
151 } else {
152 alias GetModuleBaseNameA GetModuleBaseName;
153 alias GetModuleFileNameExA GetModuleFileNameEx;
154 alias GetMappedFileNameA GetMappedFileName;
155 alias GetDeviceDriverBaseNameA GetDeviceDriverBaseName;
156 alias GetDeviceDriverFileNameA GetDeviceDriverFileName;
157 alias EnumPageFilesA EnumPageFiles;
158 alias GetProcessImageFileNameA GetProcessImageFileName;
159 }