kernel32: Don't set unconditionally SECTION_QUERY flag in OpenFileMapping.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
0cb983f8b8
commit
e625e86ee1
|
@ -5560,17 +5560,23 @@ static void test_filemap_security(void)
|
|||
char temp_path[MAX_PATH];
|
||||
char file_name[MAX_PATH];
|
||||
DWORD ret, i, access;
|
||||
HANDLE file, mapping, dup;
|
||||
HANDLE file, mapping, dup, created_mapping;
|
||||
static const struct
|
||||
{
|
||||
int generic, mapped;
|
||||
BOOL open_only;
|
||||
} map[] =
|
||||
{
|
||||
{ 0, 0 },
|
||||
{ GENERIC_READ, STANDARD_RIGHTS_READ | SECTION_QUERY | SECTION_MAP_READ },
|
||||
{ GENERIC_WRITE, STANDARD_RIGHTS_WRITE | SECTION_MAP_WRITE },
|
||||
{ GENERIC_EXECUTE, STANDARD_RIGHTS_EXECUTE | SECTION_MAP_EXECUTE },
|
||||
{ GENERIC_ALL, STANDARD_RIGHTS_REQUIRED | SECTION_ALL_ACCESS }
|
||||
{ GENERIC_ALL, STANDARD_RIGHTS_REQUIRED | SECTION_ALL_ACCESS },
|
||||
{ SECTION_MAP_READ | SECTION_MAP_WRITE, SECTION_MAP_READ | SECTION_MAP_WRITE },
|
||||
{ SECTION_MAP_WRITE, SECTION_MAP_WRITE },
|
||||
{ SECTION_MAP_READ | SECTION_QUERY, SECTION_MAP_READ | SECTION_QUERY },
|
||||
{ SECTION_QUERY, SECTION_MAP_READ, TRUE },
|
||||
{ SECTION_QUERY | SECTION_MAP_READ, SECTION_QUERY | SECTION_MAP_READ }
|
||||
};
|
||||
static const struct
|
||||
{
|
||||
|
@ -5599,6 +5605,8 @@ static void test_filemap_security(void)
|
|||
|
||||
for (i = 0; i < sizeof(prot_map)/sizeof(prot_map[0]); i++)
|
||||
{
|
||||
if (map[i].open_only) continue;
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
mapping = CreateFileMappingW(file, NULL, prot_map[i].prot, 0, 4096, NULL);
|
||||
if (prot_map[i].mapped)
|
||||
|
@ -5645,6 +5653,8 @@ static void test_filemap_security(void)
|
|||
|
||||
for (i = 0; i < sizeof(map)/sizeof(map[0]); i++)
|
||||
{
|
||||
if (map[i].open_only) continue;
|
||||
|
||||
SetLastError( 0xdeadbeef );
|
||||
ret = DuplicateHandle(GetCurrentProcess(), mapping, GetCurrentProcess(), &dup,
|
||||
map[i].generic, FALSE, 0);
|
||||
|
@ -5659,6 +5669,24 @@ static void test_filemap_security(void)
|
|||
CloseHandle(mapping);
|
||||
CloseHandle(file);
|
||||
DeleteFileA(file_name);
|
||||
|
||||
created_mapping = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 0x1000,
|
||||
"Wine Test Open Mapping");
|
||||
ok(created_mapping != NULL, "CreateFileMapping failed with error %u\n", GetLastError());
|
||||
|
||||
for (i = 0; i < sizeof(map)/sizeof(map[0]); i++)
|
||||
{
|
||||
if (!map[i].generic) continue;
|
||||
|
||||
mapping = OpenFileMappingA(map[i].generic, FALSE, "Wine Test Open Mapping");
|
||||
ok(mapping != NULL, "OpenFileMapping failed with error %d\n", GetLastError());
|
||||
access = get_obj_access(mapping);
|
||||
ok(access == map[i].mapped, "%d: unexpected access flags %#x, expected %#x\n",
|
||||
i, access, map[i].mapped);
|
||||
CloseHandle(mapping);
|
||||
}
|
||||
|
||||
CloseHandle(created_mapping);
|
||||
}
|
||||
|
||||
static void test_thread_security(void)
|
||||
|
|
|
@ -472,7 +472,6 @@ HANDLE WINAPI OpenFileMappingW( DWORD access, BOOL inherit, LPCWSTR name)
|
|||
RtlInitUnicodeString( &nameW, name );
|
||||
|
||||
if (access == FILE_MAP_COPY) access = SECTION_MAP_READ;
|
||||
access |= SECTION_QUERY;
|
||||
|
||||
if (GetVersion() & 0x80000000)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue