--- 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() { @@ -406,8 +409,10 @@ PSUTIL_DEBUG = 1; #ifdef PSUTIL_WINDOWS +#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 #include +#include +#include #include // memory_info(), memory_maps() #include #include // 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_cores() #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"]