Don't require write access on the file handle to create a

copy-on-write mapping.
This commit is contained in:
James Abbatiello 2001-02-12 18:07:16 +00:00 committed by Alexandre Julliard
parent b87a83866f
commit a7faef9516
1 changed files with 10 additions and 2 deletions

View File

@ -365,7 +365,14 @@ static BYTE VIRTUAL_GetProt(
vprot = VPROT_READ | VPROT_WRITE; vprot = VPROT_READ | VPROT_WRITE;
break; break;
case PAGE_WRITECOPY: case PAGE_WRITECOPY:
vprot = VPROT_READ | VPROT_WRITE | VPROT_WRITECOPY; /* MSDN CreateFileMapping() states that if PAGE_WRITECOPY is given,
* that the hFile must have been opened with GENERIC_READ and
* GENERIC_WRITE access. This is WRONG as tests show that you
* only need GENERIC_READ access (at least for Win9x,
* FIXME: what about NT?). Thus, we don't put VPROT_WRITE in
* PAGE_WRITECOPY and PAGE_EXECUTE_WRITECOPY.
*/
vprot = VPROT_READ | VPROT_WRITECOPY;
break; break;
case PAGE_EXECUTE: case PAGE_EXECUTE:
vprot = VPROT_EXEC; vprot = VPROT_EXEC;
@ -377,7 +384,8 @@ static BYTE VIRTUAL_GetProt(
vprot = VPROT_EXEC | VPROT_READ | VPROT_WRITE; vprot = VPROT_EXEC | VPROT_READ | VPROT_WRITE;
break; break;
case PAGE_EXECUTE_WRITECOPY: case PAGE_EXECUTE_WRITECOPY:
vprot = VPROT_EXEC | VPROT_READ | VPROT_WRITE | VPROT_WRITECOPY; /* See comment for PAGE_WRITECOPY above */
vprot = VPROT_EXEC | VPROT_READ | VPROT_WRITECOPY;
break; break;
case PAGE_NOACCESS: case PAGE_NOACCESS:
default: default: