Jacek Caban : kernelbase: Use IOCTL_CONDRV_WRITE_OUTPUT in WriteConsoleOutputCharacterW.

Alexandre Julliard julliard at winehq.org
Thu Jul 23 16:36:57 CDT 2020


Module: wine
Branch: master
Commit: db886f09236759141a95183be83c666cac5f9a64
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=db886f09236759141a95183be83c666cac5f9a64

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jul 23 17:31:47 2020 +0200

kernelbase: Use IOCTL_CONDRV_WRITE_OUTPUT in WriteConsoleOutputCharacterW.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernelbase/console.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c
index 01f326cb81..b7443ce9ae 100644
--- a/dlls/kernelbase/console.c
+++ b/dlls/kernelbase/console.c
@@ -1600,6 +1600,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputCharacterA( HANDLE handle, LPCST
 BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputCharacterW( HANDLE handle, LPCWSTR str, DWORD length,
                                                             COORD coord, DWORD *written )
 {
+    struct condrv_write_output_params *params;
+    size_t size;
     BOOL ret;
 
     TRACE( "(%p,%s,%d,%dx%d,%p)\n", handle, debugstr_wn(str, length), length, coord.X, coord.Y, written );
@@ -1611,16 +1613,14 @@ BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputCharacterW( HANDLE handle, LPCWS
     }
 
     *written = 0;
-    SERVER_START_REQ( write_console_output )
-    {
-        req->handle = console_handle_unmap( handle );
-        req->x      = coord.X;
-        req->y      = coord.Y;
-        req->mode   = CHAR_INFO_MODE_TEXT;
-        req->wrap   = TRUE;
-        wine_server_add_data( req, str, length * sizeof(WCHAR) );
-        if ((ret = !wine_server_call_err( req ))) *written = reply->written;
-    }
-    SERVER_END_REQ;
+    size = sizeof(*params) + length * sizeof(WCHAR);
+    if (!(params = HeapAlloc( GetProcessHeap(), 0, size ))) return FALSE;
+    params->mode   = CHAR_INFO_MODE_TEXT;
+    params->x      = coord.X;
+    params->y      = coord.Y;
+    params->width  = 0;
+    memcpy( params + 1, str, length * sizeof(*str) );
+    ret = console_ioctl( handle, IOCTL_CONDRV_WRITE_OUTPUT, params, size, written, sizeof(*written), NULL );
+    HeapFree( GetProcessHeap(), 0, params );
     return ret;
 }




More information about the wine-cvs mailing list