Alexandre Julliard : ntdll: Implement the ProcessAffinityMask case in NtQueryInformationProcess.
Alexandre Julliard
julliard at winehq.org
Fri Apr 15 10:19:23 CDT 2011
Module: wine
Branch: master
Commit: baa04014ebd686d95214beb3cd2183ff9a85b4f4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=baa04014ebd686d95214beb3cd2183ff9a85b4f4
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Apr 14 19:57:34 2011 +0200
ntdll: Implement the ProcessAffinityMask case in NtQueryInformationProcess.
---
dlls/kernel32/process.c | 22 ++++++++--------------
dlls/ntdll/process.c | 19 ++++++++++++++++++-
2 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index e039cad..c263092 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -3137,24 +3137,18 @@ BOOL WINAPI SetProcessAffinityMask( HANDLE hProcess, DWORD_PTR affmask )
/**********************************************************************
* GetProcessAffinityMask (KERNEL32.@)
*/
-BOOL WINAPI GetProcessAffinityMask( HANDLE hProcess,
- PDWORD_PTR lpProcessAffinityMask,
- PDWORD_PTR lpSystemAffinityMask )
+BOOL WINAPI GetProcessAffinityMask( HANDLE hProcess, PDWORD_PTR process_mask, PDWORD_PTR system_mask )
{
- PROCESS_BASIC_INFORMATION pbi;
- NTSTATUS status;
+ NTSTATUS status = STATUS_SUCCESS;
- status = NtQueryInformationProcess(hProcess,
- ProcessBasicInformation,
- &pbi, sizeof(pbi), NULL);
- if (status)
+ if (system_mask) *system_mask = (1 << NtCurrentTeb()->Peb->NumberOfProcessors) - 1;
+ if (process_mask)
{
- SetLastError( RtlNtStatusToDosError(status) );
- return FALSE;
+ if ((status = NtQueryInformationProcess( hProcess, ProcessAffinityMask,
+ process_mask, sizeof(*process_mask), NULL )))
+ SetLastError( RtlNtStatusToDosError(status) );
}
- if (lpProcessAffinityMask) *lpProcessAffinityMask = pbi.AffinityMask;
- if (lpSystemAffinityMask) *lpSystemAffinityMask = (1 << NtCurrentTeb()->Peb->NumberOfProcessors) - 1;
- return TRUE;
+ return !status;
}
diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c
index eff3f58..a39f5d0 100644
--- a/dlls/ntdll/process.c
+++ b/dlls/ntdll/process.c
@@ -134,7 +134,6 @@ NTSTATUS WINAPI NtQueryInformationProcess(
UNIMPLEMENTED_INFO_CLASS(ProcessEnableAlignmentFaultFixup);
UNIMPLEMENTED_INFO_CLASS(ProcessPriorityClass);
UNIMPLEMENTED_INFO_CLASS(ProcessWx86Information);
- UNIMPLEMENTED_INFO_CLASS(ProcessAffinityMask);
UNIMPLEMENTED_INFO_CLASS(ProcessPriorityBoost);
UNIMPLEMENTED_INFO_CLASS(ProcessDeviceMap);
UNIMPLEMENTED_INFO_CLASS(ProcessSessionInformation);
@@ -385,6 +384,24 @@ NTSTATUS WINAPI NtQueryInformationProcess(
ret = STATUS_INFO_LENGTH_MISMATCH;
}
break;
+
+ case ProcessAffinityMask:
+ len = sizeof(ULONG_PTR);
+ if (ProcessInformationLength == len)
+ {
+ const ULONG_PTR system_mask = ((ULONG_PTR)1 << NtCurrentTeb()->Peb->NumberOfProcessors) - 1;
+
+ SERVER_START_REQ(get_process_info)
+ {
+ req->handle = wine_server_obj_handle( ProcessHandle );
+ if (!(ret = wine_server_call( req )))
+ *(ULONG_PTR *)ProcessInformation = reply->affinity & system_mask;
+ }
+ SERVER_END_REQ;
+ }
+ else ret = STATUS_INFO_LENGTH_MISMATCH;
+ break;
+
case ProcessWow64Information:
len = sizeof(DWORD);
if (ProcessInformationLength == len)
More information about the wine-cvs
mailing list