diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 396b7d45bae5b614d02f0d14570d4f3f96944d40..8204dd982281e75352cda07f0dc46f2832693d37 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -3259,13 +3259,21 @@ BOOL WINAPI GetProcessAffinityMask( HANDLE hProcess, PDWORD_PTR process_mask, PD
 {
     NTSTATUS status = STATUS_SUCCESS;
 
-    if (system_mask) *system_mask = (1 << NtCurrentTeb()->Peb->NumberOfProcessors) - 1;
     if (process_mask)
     {
         if ((status = NtQueryInformationProcess( hProcess, ProcessAffinityMask,
                                                  process_mask, sizeof(*process_mask), NULL )))
             SetLastError( RtlNtStatusToDosError(status) );
     }
+    if (system_mask && status == STATUS_SUCCESS)
+    {
+        SYSTEM_BASIC_INFORMATION info;
+
+        if ((status = NtQuerySystemInformation( SystemBasicInformation, &info, sizeof(info), NULL )))
+            SetLastError( RtlNtStatusToDosError(status) );
+        else
+            *system_mask = info.ActiveProcessorsAffinityMask;
+    }
     return !status;
 }