Commit 666c5b6e authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

kernel32: Use IOCTL_CONDRV_READ_CONSOLE in ReadConsoleW when possible.

parent 0cdb070b
......@@ -541,6 +541,13 @@ BOOL WINAPI ReadConsoleW(HANDLE hConsoleInput, LPVOID lpBuffer,
return FALSE;
}
if (DeviceIoControl(hConsoleInput, IOCTL_CONDRV_READ_CONSOLE, NULL, 0, lpBuffer,
nNumberOfCharsToRead * sizeof(WCHAR), lpNumberOfCharsRead, NULL))
{
*lpNumberOfCharsRead /= sizeof(WCHAR);
return TRUE;
}
if (!GetConsoleMode(hConsoleInput, &mode))
return FALSE;
if ((fd = get_console_bare_fd(hConsoleInput)) != -1)
......
......@@ -1693,7 +1693,7 @@ static struct object *create_console_server( void )
static int is_blocking_read_ioctl( unsigned int code )
{
return code == IOCTL_CONDRV_READ_INPUT;
return code == IOCTL_CONDRV_READ_INPUT || code == IOCTL_CONDRV_READ_CONSOLE;
}
static int console_input_ioctl( struct fd *fd, ioctl_code_t code, struct async *async )
......@@ -1898,8 +1898,12 @@ static int console_input_ioctl( struct fd *fd, ioctl_code_t code, struct async *
}
default:
set_error( STATUS_INVALID_HANDLE );
return 0;
if (!console->server || code >> 16 != FILE_DEVICE_CONSOLE)
{
set_error( STATUS_INVALID_HANDLE );
return 0;
}
return queue_host_ioctl( console->server, code, 0, async, &console->ioctl_q );
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment