From 7444aa42306cd0e091dd46efc2e0be3c7c61b2fa Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 14 Aug 2020 13:27:10 +0200 Subject: [PATCH] kernelbase: Use IOCTL_CONDRV_GET_TITLE in GetConsoleTitleW. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/kernel32/tests/console.c | 9 +++++++++ dlls/kernelbase/console.c | 21 ++++++++------------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c index ee050e887a7..1fc23992ba9 100644 --- a/dlls/kernel32/tests/console.c +++ b/dlls/kernel32/tests/console.c @@ -3589,7 +3589,9 @@ static void test_GetConsoleScreenBufferInfoEx(HANDLE std_output) static void test_FreeConsole(void) { + WCHAR title[16]; HANDLE handle; + DWORD size; UINT cp; BOOL ret; @@ -3637,6 +3639,13 @@ static void test_FreeConsole(void) ok(!cp, "cp = %x\n", cp); ok(GetLastError() == ERROR_INVALID_HANDLE, "last error %u\n", GetLastError()); + SetLastError(0xdeadbeef); + memset( title, 0xc0, sizeof(title) ); + size = GetConsoleTitleW( title, ARRAY_SIZE(title) ); + ok(!size, "GetConsoleTitleW returned %u\n", size); + ok(title[0] == 0xc0c0, "title byffer changed\n"); + ok(GetLastError() == ERROR_INVALID_HANDLE, "last error %u\n", GetLastError()); + if (!skip_nt) { SetStdHandle( STD_INPUT_HANDLE, (HANDLE)0xdeadbeef ); diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index 8f4bde8d050..a3271712d9b 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -739,20 +739,15 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetConsoleScreenBufferInfoEx( HANDLE handle, */ DWORD WINAPI DECLSPEC_HOTPATCH GetConsoleTitleW( LPWSTR title, DWORD size ) { - DWORD ret = 0; + if (!size) return 0; - SERVER_START_REQ( get_console_input_info ) - { - req->handle = 0; - wine_server_set_reply( req, title, (size - 1) * sizeof(WCHAR) ); - if (!wine_server_call_err( req )) - { - ret = wine_server_reply_size(reply) / sizeof(WCHAR); - title[ret] = 0; - } - } - SERVER_END_REQ; - return ret; + if (!console_ioctl( RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle, IOCTL_CONDRV_GET_TITLE, + NULL, 0, title, (size - 1) * sizeof(WCHAR), &size )) + return 0; + + size /= sizeof(WCHAR); + title[size] = 0; + return size + 1; }