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