ntdll: Do not update iosb.Status after FSCTL_PIPE_LISTEN call.

Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Sebastian Lackner 2016-04-07 10:02:42 +02:00 committed by Alexandre Julliard
parent 96aca1ad02
commit 9acff7550d
3 changed files with 8 additions and 4 deletions

View File

@ -2141,7 +2141,7 @@ static void test_overlapped_error(void)
err = GetLastError(); err = GetLastError();
ok(ret == FALSE, "ConnectNamedPipe succeeded\n"); ok(ret == FALSE, "ConnectNamedPipe succeeded\n");
ok(err == ERROR_PIPE_CONNECTED, "expected ERROR_PIPE_CONNECTED, got %u\n", err); ok(err == ERROR_PIPE_CONNECTED, "expected ERROR_PIPE_CONNECTED, got %u\n", err);
todo_wine ok(overlapped.Internal == STATUS_PENDING, "expected STATUS_PENDING, got %08lx\n", overlapped.Internal); ok(overlapped.Internal == STATUS_PENDING, "expected STATUS_PENDING, got %08lx\n", overlapped.Internal);
CloseHandle(file); CloseHandle(file);
CloseHandle(pipe); CloseHandle(pipe);

View File

@ -1757,6 +1757,11 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
} }
break; break;
case FSCTL_PIPE_LISTEN:
status = server_ioctl_file( handle, event, apc, apc_context, io, code,
in_buffer, in_size, out_buffer, out_size );
return status;
case FSCTL_PIPE_IMPERSONATE: case FSCTL_PIPE_IMPERSONATE:
FIXME("FSCTL_PIPE_IMPERSONATE: impersonating self\n"); FIXME("FSCTL_PIPE_IMPERSONATE: impersonating self\n");
status = RtlImpersonateSelf( SecurityImpersonation ); status = RtlImpersonateSelf( SecurityImpersonation );
@ -1797,7 +1802,6 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
io->Information = 0; io->Information = 0;
status = STATUS_SUCCESS; status = STATUS_SUCCESS;
break; break;
case FSCTL_PIPE_LISTEN:
case FSCTL_PIPE_WAIT: case FSCTL_PIPE_WAIT:
default: default:
status = server_ioctl_file( handle, event, apc, apc_context, io, code, status = server_ioctl_file( handle, event, apc, apc_context, io, code,

View File

@ -308,7 +308,7 @@ static void test_overlapped(void)
memset(&iosb, 0x55, sizeof(iosb)); memset(&iosb, 0x55, sizeof(iosb));
res = listen_pipe(hPipe, hEvent, &iosb, TRUE); res = listen_pipe(hPipe, hEvent, &iosb, TRUE);
ok(res == STATUS_PIPE_CONNECTED, "NtFsControlFile returned %x\n", res); ok(res == STATUS_PIPE_CONNECTED, "NtFsControlFile returned %x\n", res);
todo_wine ok(U(iosb).Status == 0x55555555, "iosb.Status got changed to %x\n", U(iosb).Status); ok(U(iosb).Status == 0x55555555, "iosb.Status got changed to %x\n", U(iosb).Status);
CloseHandle(hClient); CloseHandle(hClient);
} }
@ -392,7 +392,7 @@ static void test_alertable(void)
todo_wine ok(res == STATUS_CANCELLED, "NtFsControlFile returned %x\n", res); todo_wine ok(res == STATUS_CANCELLED, "NtFsControlFile returned %x\n", res);
ok(userapc_called, "user apc didn't run\n"); ok(userapc_called, "user apc didn't run\n");
todo_wine ok(U(iosb).Status == 0x55555555, "iosb.Status got changed to %x\n", U(iosb).Status); ok(U(iosb).Status == 0x55555555, "iosb.Status got changed to %x\n", U(iosb).Status);
ok(WaitForSingleObjectEx(hEvent, 0, TRUE) == WAIT_TIMEOUT, "hEvent signaled\n"); ok(WaitForSingleObjectEx(hEvent, 0, TRUE) == WAIT_TIMEOUT, "hEvent signaled\n");
ok(!ioapc_called, "IOAPC ran\n"); ok(!ioapc_called, "IOAPC ran\n");