1 /**
2 * Windows API header module
3 *
4 * Translated from MinGW Windows headers
5 *
6 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7 * Source: $(DRUNTIMESRC core/sys/windows/_psapi.d)
8 */
9 /* Comment from MinGW
10 * Process status API (PSAPI)
11 * http://windowssdk.msdn.microsoft.com/library/ms684884.aspx
12 */
13
14 module core.sys.windows.psapi;
version(Windows)15 version (Windows):
16 @system:
17
18 version (ANSI) {} else version = Unicode;
19
20 import core.sys.windows.w32api;
21 import core.sys.windows.winbase;
22 import core.sys.windows.windef;
23
24 struct MODULEINFO {
25 LPVOID lpBaseOfDll;
26 DWORD SizeOfImage;
27 LPVOID EntryPoint;
28 }
29 alias MODULEINFO* LPMODULEINFO;
30
31 struct PSAPI_WS_WATCH_INFORMATION {
32 LPVOID FaultingPc;
33 LPVOID FaultingVa;
34 }
35 alias PSAPI_WS_WATCH_INFORMATION* PPSAPI_WS_WATCH_INFORMATION;
36
37 struct PSAPI_WS_WATCH_INFORMATION_EX {
38 PSAPI_WS_WATCH_INFORMATION BasicInfo;
39 ULONG_PTR FaultingThreadId;
40 ULONG_PTR Flags;
41 }
42 alias PSAPI_WS_WATCH_INFORMATION_EX* PPSAPI_WS_WATCH_INFORMATION_EX;
43
44 struct PROCESS_MEMORY_COUNTERS {
45 DWORD cb;
46 DWORD PageFaultCount;
47 SIZE_T PeakWorkingSetSize;
48 SIZE_T WorkingSetSize;
49 SIZE_T QuotaPeakPagedPoolUsage;
50 SIZE_T QuotaPagedPoolUsage;
51 SIZE_T QuotaPeakNonPagedPoolUsage;
52 SIZE_T QuotaNonPagedPoolUsage;
53 SIZE_T PagefileUsage;
54 SIZE_T PeakPagefileUsage;
55 }
56 alias PROCESS_MEMORY_COUNTERS* PPROCESS_MEMORY_COUNTERS;
57
58 struct PERFORMANCE_INFORMATION {
59 DWORD cb;
60 SIZE_T CommitTotal;
61 SIZE_T CommitLimit;
62 SIZE_T CommitPeak;
63 SIZE_T PhysicalTotal;
64 SIZE_T PhysicalAvailable;
65 SIZE_T SystemCache;
66 SIZE_T KernelTotal;
67 SIZE_T KernelPaged;
68 SIZE_T KernelNonpaged;
69 SIZE_T PageSize;
70 DWORD HandleCount;
71 DWORD ProcessCount;
72 DWORD ThreadCount;
73 }
74 alias PERFORMANCE_INFORMATION* PPERFORMANCE_INFORMATION;
75
76 struct ENUM_PAGE_FILE_INFORMATION {
77 DWORD cb;
78 DWORD Reserved;
79 SIZE_T TotalSize;
80 SIZE_T TotalInUse;
81 SIZE_T PeakUsage;
82 }
83 alias ENUM_PAGE_FILE_INFORMATION* PENUM_PAGE_FILE_INFORMATION;
84
85 /* application-defined callback function used with the EnumPageFiles()
86 * http://windowssdk.msdn.microsoft.com/library/ms682627.aspx */
87 alias BOOL function(LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR)
88 PENUM_PAGE_FILE_CALLBACKW;
89 alias BOOL function(LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR)
90 PENUM_PAGE_FILE_CALLBACKA;
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_CALLBACKW, LPVOID); /* 2000/XP/Server2003/Vista/Longhorn */
140 BOOL EnumPageFilesA(PENUM_PAGE_FILE_CALLBACKA, LPVOID); /* 2000/XP/Server2003/Vista/Longhorn */
141 }
142
version(Unicode)143 version (Unicode) {
144 alias PENUM_PAGE_FILE_CALLBACKW PENUM_PAGE_FILE_CALLBACK;
145 alias GetModuleBaseNameW GetModuleBaseName;
146 alias GetModuleFileNameExW GetModuleFileNameEx;
147 alias GetMappedFileNameW GetMappedFileName;
148 alias GetDeviceDriverBaseNameW GetDeviceDriverBaseName;
149 alias GetDeviceDriverFileNameW GetDeviceDriverFileName;
150 alias EnumPageFilesW EnumPageFiles;
151 alias GetProcessImageFileNameW GetProcessImageFileName;
152 } else {
153 alias PENUM_PAGE_FILE_CALLBACKA PENUM_PAGE_FILE_CALLBACK;
154 alias GetModuleBaseNameA GetModuleBaseName;
155 alias GetModuleFileNameExA GetModuleFileNameEx;
156 alias GetMappedFileNameA GetMappedFileName;
157 alias GetDeviceDriverBaseNameA GetDeviceDriverBaseName;
158 alias GetDeviceDriverFileNameA GetDeviceDriverFileName;
159 alias EnumPageFilesA EnumPageFiles;
160 alias GetProcessImageFileNameA GetProcessImageFileName;
161 }
162