server: Fix generic access mapping for a thread.

This commit is contained in:
Dmitry Timoshkov 2014-02-05 16:46:55 +09:00 committed by Alexandre Julliard
parent 2b1f2001b1
commit 6e2de14df1
2 changed files with 4 additions and 9 deletions

View File

@ -4985,7 +4985,7 @@ static void test_thread_security(void)
switch (map[i].generic)
{
case GENERIC_READ:
todo_wine
case GENERIC_EXECUTE:
ok(access == map[i].mapped || access == (map[i].mapped | THREAD_QUERY_LIMITED_INFORMATION) /* Vista+ */,
"%d: expected %#x, got %#x\n", i, map[i].mapped, access);
break;
@ -4994,11 +4994,6 @@ todo_wine
ok(access == map[i].mapped || access == (map[i].mapped | THREAD_SET_LIMITED_INFORMATION) /* Vista+ */,
"%d: expected %#x, got %#x\n", i, map[i].mapped, access);
break;
case GENERIC_EXECUTE:
todo_wine
ok(access == map[i].mapped || access == (map[i].mapped | THREAD_QUERY_LIMITED_INFORMATION) /* Vista+ */,
"%d: expected %#x, got %#x\n", i, map[i].mapped, access);
break;
case GENERIC_ALL:
ok(access == map[i].mapped || access == THREAD_ALL_ACCESS_VISTA,
"%d: expected %#x, got %#x\n", i, map[i].mapped, access);

View File

@ -331,9 +331,9 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
static unsigned int thread_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 | THREAD_QUERY_INFORMATION | THREAD_GET_CONTEXT;
if (access & GENERIC_WRITE) access |= STANDARD_RIGHTS_WRITE | THREAD_SET_INFORMATION | THREAD_SET_CONTEXT | THREAD_TERMINATE | THREAD_SUSPEND_RESUME;
if (access & GENERIC_EXECUTE) access |= STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE;
if (access & GENERIC_ALL) access |= THREAD_ALL_ACCESS;
return access & ~(GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | GENERIC_ALL);
}