kernel32: In CreateFile, when trying to open the CON special DOS file, force OPEN_EXISTING as creation flag.
This commit is contained in:
parent
fa8d5d166c
commit
8a529d60e2
|
@ -1322,10 +1322,10 @@ HANDLE WINAPI CreateFileW( LPCWSTR filename, DWORD access, DWORD sharing,
|
||||||
switch (access & (GENERIC_READ|GENERIC_WRITE))
|
switch (access & (GENERIC_READ|GENERIC_WRITE))
|
||||||
{
|
{
|
||||||
case GENERIC_READ:
|
case GENERIC_READ:
|
||||||
ret = OpenConsoleW(coninW, access, (sa && sa->bInheritHandle), creation);
|
ret = OpenConsoleW(coninW, access, (sa && sa->bInheritHandle), OPEN_EXISTING);
|
||||||
goto done;
|
goto done;
|
||||||
case GENERIC_WRITE:
|
case GENERIC_WRITE:
|
||||||
ret = OpenConsoleW(conoutW, access, (sa && sa->bInheritHandle), creation);
|
ret = OpenConsoleW(conoutW, access, (sa && sa->bInheritHandle), OPEN_EXISTING);
|
||||||
goto done;
|
goto done;
|
||||||
default:
|
default:
|
||||||
SetLastError( ERROR_FILE_NOT_FOUND );
|
SetLastError( ERROR_FILE_NOT_FOUND );
|
||||||
|
|
|
@ -1002,7 +1002,6 @@ static void test_OpenCON(void)
|
||||||
|
|
||||||
for (i = 0; i < sizeof(accesses) / sizeof(accesses[0]); i++)
|
for (i = 0; i < sizeof(accesses) / sizeof(accesses[0]); i++)
|
||||||
{
|
{
|
||||||
if (accesses[i] != OPEN_EXISTING) todo_wine {
|
|
||||||
h = CreateFileW(conW, GENERIC_WRITE, 0, NULL, accesses[i], 0, NULL);
|
h = CreateFileW(conW, GENERIC_WRITE, 0, NULL, accesses[i], 0, NULL);
|
||||||
ok(h != INVALID_HANDLE_VALUE, "Expected to open the CON device on write (%x)\n", accesses[i]);
|
ok(h != INVALID_HANDLE_VALUE, "Expected to open the CON device on write (%x)\n", accesses[i]);
|
||||||
CloseHandle(h);
|
CloseHandle(h);
|
||||||
|
@ -1018,23 +1017,6 @@ static void test_OpenCON(void)
|
||||||
ok(h != INVALID_HANDLE_VALUE, "Expected to open the CON device on read (%x)\n", accesses[i]);
|
ok(h != INVALID_HANDLE_VALUE, "Expected to open the CON device on read (%x)\n", accesses[i]);
|
||||||
}
|
}
|
||||||
CloseHandle(h);
|
CloseHandle(h);
|
||||||
} else {
|
|
||||||
h = CreateFileW(conW, GENERIC_WRITE, 0, NULL, accesses[i], 0, NULL);
|
|
||||||
ok(h != INVALID_HANDLE_VALUE, "Expected to open the CON device on write (%x)\n", accesses[i]);
|
|
||||||
CloseHandle(h);
|
|
||||||
|
|
||||||
h = CreateFileW(conW, GENERIC_READ, 0, NULL, accesses[i], 0, NULL);
|
|
||||||
/* Windows versions differ here:
|
|
||||||
* MSDN states in CreateFile that TRUNCATE_EXISTING requires GENERIC_WRITE
|
|
||||||
* NT, XP, Vista comply, but Win7 doesn't and allows to open CON with TRUNCATE_EXISTING
|
|
||||||
* So don't test when disposition is TRUNCATE_EXISTING
|
|
||||||
*/
|
|
||||||
if (accesses[i] != TRUNCATE_EXISTING)
|
|
||||||
{
|
|
||||||
ok(h != INVALID_HANDLE_VALUE, "Expected to open the CON device on read (%x)\n", accesses[i]);
|
|
||||||
}
|
|
||||||
CloseHandle(h);
|
|
||||||
}
|
|
||||||
h = CreateFileW(conW, GENERIC_READ|GENERIC_WRITE, 0, NULL, accesses[i], 0, NULL);
|
h = CreateFileW(conW, GENERIC_READ|GENERIC_WRITE, 0, NULL, accesses[i], 0, NULL);
|
||||||
ok(h == INVALID_HANDLE_VALUE, "Expected not to open the CON device on read-write (%x)\n", accesses[i]);
|
ok(h == INVALID_HANDLE_VALUE, "Expected not to open the CON device on read-write (%x)\n", accesses[i]);
|
||||||
ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Unexpected error %x\n", GetLastError());
|
ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Unexpected error %x\n", GetLastError());
|
||||||
|
|
Loading…
Reference in New Issue