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