Module: wine Branch: master Commit: 53847fd6a1b78e16a9591992bad051c9b6431bf5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=53847fd6a1b78e16a9591992ba...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Thu Feb 6 20:47:29 2014 +0900
server: Fix generic access mapping for a process.
---
dlls/advapi32/tests/security.c | 2 -- server/process.c | 7 ++++--- 2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c index 87f3ea93..6225529 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c @@ -5053,12 +5053,10 @@ static void test_process_access(void) switch (map[i].generic) { case GENERIC_READ: -todo_wine ok(access == map[i].mapped || access == (map[i].mapped | PROCESS_QUERY_LIMITED_INFORMATION) /* Vista+ */, "%d: expected %#x, got %#x\n", i, map[i].mapped, access); break; case GENERIC_WRITE: -todo_wine ok(access == map[i].mapped || access == (map[i].mapped | PROCESS_TERMINATE) /* before Vista */, "%d: expected %#x, got %#x\n", i, map[i].mapped, access); break; diff --git a/server/process.c b/server/process.c index 4a73662..41b5eca 100644 --- a/server/process.c +++ b/server/process.c @@ -448,9 +448,10 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
static unsigned int process_map_access( struct object *obj, unsigned int access ) { - if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | SYNCHRONIZE; - if (access & GENERIC_WRITE) access |= STANDARD_RIGHTS_WRITE | SYNCHRONIZE; - if (access & GENERIC_EXECUTE) access |= STANDARD_RIGHTS_EXECUTE; + if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ; + if (access & GENERIC_WRITE) access |= STANDARD_RIGHTS_WRITE | PROCESS_SET_QUOTA | PROCESS_SET_INFORMATION | PROCESS_SUSPEND_RESUME | + PROCESS_VM_WRITE | PROCESS_DUP_HANDLE | PROCESS_CREATE_PROCESS | PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION; + if (access & GENERIC_EXECUTE) access |= STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE | PROCESS_TERMINATE; if (access & GENERIC_ALL) access |= PROCESS_ALL_ACCESS; return access & ~(GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | GENERIC_ALL); }