| --- a/psutil/_psutil_common.c |
| +++ b/psutil/_psutil_common.c |
| @@ -272,6 +272,8 @@ |
| } |
| |
| |
| +#ifndef __MINGW32__ |
| + |
| static int |
| psutil_loadlibs() { |
| // --- Mandatory |
| @@ -351,6 +353,7 @@ |
| return 0; |
| } |
| |
| +#endif /* !__MINGW32__ */ |
| |
| static int |
| psutil_set_winver() { |
| @@ -381,8 +384,10 @@ |
| |
| int |
| psutil_load_globals() { |
| +#ifndef __MINGW32__ |
| if (psutil_loadlibs() != 0) |
| return 1; |
| +#endif |
| if (psutil_set_winver() != 0) |
| return 1; |
| GetSystemInfo(&PSUTIL_SYSTEM_INFO); |
| --- a/psutil/_psutil_windows.c |
| +++ b/psutil/_psutil_windows.c |
| @@ -19,6 +19,8 @@ |
| |
| #include <Python.h> |
| #include <windows.h> |
| +#include <winternl.h> |
| +#include <wtsapi32.h> |
| #include <Psapi.h> // memory_info(), memory_maps() |
| #include <signal.h> |
| #include <tlhelp32.h> // threads(), PROCESSENTRY32 |
| @@ -1215,6 +1217,7 @@ |
| if (py_retlist == NULL) |
| return NULL; |
| |
| +#ifndef __MINGW32__ |
| if (WTSEnumerateSessionsW == NULL || |
| WTSQuerySessionInformationW == NULL || |
| WTSFreeMemory == NULL) { |
| @@ -1223,6 +1226,7 @@ |
| // https://docs.microsoft.com/en-us/windows/win32/termserv/run-time-linking-to-wtsapi32-dll |
| return py_retlist; |
| } |
| +#endif /* !__MINGW32__ */ |
| |
| if (WTSEnumerateSessionsW(hServer, 0, 1, &sessions, &count) == 0) { |
| if (ERROR_CALL_NOT_IMPLEMENTED == GetLastError()) { |
| --- a/psutil/arch/windows/ntextapi.h |
| +++ b/psutil/arch/windows/ntextapi.h |
| @@ -56,6 +56,8 @@ |
| MaximumThreadState |
| } KTHREAD_STATE, *PKTHREAD_STATE; |
| |
| +#ifndef __MINGW32__ |
| + |
| typedef enum _KWAIT_REASON { |
| Executive, |
| FreePage, |
| @@ -146,6 +148,8 @@ |
| WTSInit, // WinStation in initialization |
| } WTS_CONNECTSTATE_CLASS; |
| |
| +#endif /* !_MINGW32__ */ |
| + |
| // ================================================================ |
| // Structs. |
| // ================================================================ |
| @@ -362,6 +366,9 @@ |
| } RTL_USER_PROCESS_PARAMETERS_, *PRTL_USER_PROCESS_PARAMETERS_; |
| |
| // users() |
| + |
| +#ifndef __MINGW32__ |
| + |
| typedef struct _WTS_SESSION_INFOW { |
| DWORD SessionId; // session id |
| LPWSTR pWinStationName; // name of WinStation this session is |
| @@ -399,6 +406,8 @@ |
| |
| #define PWTSINFO PWTSINFOW |
| |
| +#endif /* !__MINGW32__ */ |
| + |
| // cpu_count_phys() |
| #if (_WIN32_WINNT < 0x0601) // Windows < 7 (Vista and XP) |
| typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { |
| @@ -550,6 +559,8 @@ |
| // Type defs for modules loaded at runtime. |
| // ================================================================ |
| |
| +#ifndef __MINGW32__ |
| + |
| BOOL (WINAPI *_GetLogicalProcessorInformationEx) ( |
| LOGICAL_PROCESSOR_RELATIONSHIP relationship, |
| PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer, |
| @@ -704,4 +715,15 @@ |
| |
| #define RtlNtStatusToDosErrorNoTeb _RtlNtStatusToDosErrorNoTeb |
| |
| + |
| +#else /* __MINGW32__ */ |
| + |
| +ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS status); |
| +NTSTATUS WINAPI RtlGetVersion(PRTL_OSVERSIONINFOW lpVersionInformation); |
| +NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE ProcessHandle, PVOID BaseAddress, int MemoryInformationClass, PVOID MemoryInformation, SIZE_T MemoryInformationLength, PSIZE_T ReturnLength); |
| +NTSTATUS WINAPI NtResumeProcess(HANDLE hProcess); |
| +NTSTATUS WINAPI NtSuspendProcess(HANDLE hProcess); |
| + |
| +#endif /* !__MINGW32__ */ |
| + |
| #endif // __NTEXTAPI_H__ |
| --- a/setup.py |
| +++ b/setup.py |
| @@ -176,7 +176,7 @@ |
| define_macros=macros, |
| libraries=[ |
| "psapi", "kernel32", "advapi32", "shell32", "netapi32", |
| - "ws2_32", "PowrProf", "pdh", |
| + "ws2_32", "powrprof", "pdh", "iphlpapi", "ntdll", "wtsapi32", |
| ], |
| # extra_compile_args=["/W 4"], |
| # extra_link_args=["/DEBUG"] |