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 nulib.system.win32.psapi;
15 
16 
17 version (ANSI) {} else version = Unicode;
18 
19 import nulib.system.win32.w32api;
20 import nulib.system.win32.winbase;
21 import nulib.system.win32.windef;
22 
23 struct MODULEINFO {
24     LPVOID lpBaseOfDll;
25     DWORD SizeOfImage;
26     LPVOID EntryPoint;
27 }
28 alias LPMODULEINFO = MODULEINFO*;
29 
30 struct PSAPI_WS_WATCH_INFORMATION {
31     LPVOID FaultingPc;
32     LPVOID FaultingVa;
33 }
34 alias PPSAPI_WS_WATCH_INFORMATION = PSAPI_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 PPSAPI_WS_WATCH_INFORMATION_EX = PSAPI_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 PPROCESS_MEMORY_COUNTERS = PROCESS_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 PPERFORMANCE_INFORMATION = PERFORMANCE_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 PENUM_PAGE_FILE_INFORMATION = ENUM_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) nothrow @nogc {
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_CALLBACK = PENUM_PAGE_FILE_CALLBACKW;
144     alias GetModuleBaseName = GetModuleBaseNameW;
145     alias GetModuleFileNameEx = GetModuleFileNameExW;
146     alias GetMappedFileName = GetMappedFileNameW;
147     alias GetDeviceDriverBaseName = GetDeviceDriverBaseNameW;
148     alias GetDeviceDriverFileName = GetDeviceDriverFileNameW;
149     alias EnumPageFiles = EnumPageFilesW;
150     alias GetProcessImageFileName = GetProcessImageFileNameW;
151 } else {
152     alias PENUM_PAGE_FILE_CALLBACK = PENUM_PAGE_FILE_CALLBACKA;
153     alias GetModuleBaseName = GetModuleBaseNameA;
154     alias GetModuleFileNameEx = GetModuleFileNameExA;
155     alias GetMappedFileName = GetMappedFileNameA;
156     alias GetDeviceDriverBaseName = GetDeviceDriverBaseNameA;
157     alias GetDeviceDriverFileName = GetDeviceDriverFileNameA;
158     alias EnumPageFiles = EnumPageFilesA;
159     alias GetProcessImageFileName = GetProcessImageFileNameA;
160 }