diff --git a/channels/rdpdr/server/CMakeLists.txt b/channels/rdpdr/server/CMakeLists.txt index 96112aef0..d82c29f1f 100644 --- a/channels/rdpdr/server/CMakeLists.txt +++ b/channels/rdpdr/server/CMakeLists.txt @@ -21,4 +21,5 @@ set(${MODULE_PREFIX}_SRCS rdpdr_main.c rdpdr_main.h) set(${MODULE_PREFIX}_LIBS freerdp) +option(WITH_WCHAR_FILE_DIRECTORY_INFORMATION "Build with WCHAR FILE_DIRECTORY_INFORMATION::FileName" OFF) add_channel_server_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} FALSE "VirtualChannelEntry") diff --git a/channels/rdpdr/server/rdpdr_main.c b/channels/rdpdr/server/rdpdr_main.c index 3d0f94e20..efaf5fb40 100644 --- a/channels/rdpdr/server/rdpdr_main.c +++ b/channels/rdpdr/server/rdpdr_main.c @@ -2344,7 +2344,7 @@ static UINT rdpdr_server_read_file_directory_information(wLog* log, wStream* s, if (fileNameLength / sizeof(WCHAR) > ARRAYSIZE(fdi->FileName)) return ERROR_INVALID_DATA; -#if defined(__MINGW32__) +#if defined(__MINGW32__) || defined(WITH_WCHAR_FILE_DIRECTORY_INFORMATION) if (Stream_Read_UTF16_String(s, fdi->FileName, fileNameLength / sizeof(WCHAR))) return ERROR_INVALID_DATA; #else diff --git a/include/config/config.h.in b/include/config/config.h.in index fe27a5f87..d42de2fef 100644 --- a/include/config/config.h.in +++ b/include/config/config.h.in @@ -239,4 +239,10 @@ #cmakedefine WITHOUT_FREERDP_3x_DEPRECATED #endif +/** Build FILE_DIRECTORY_INFORMATION::FileName with type WCHAR instead of char + * + * @since version 3.20.0 + */ +#cmakedefine WITH_WCHAR_FILE_DIRECTORY_INFORMATION + #endif /* FREERDP_CONFIG_H */ diff --git a/include/freerdp/server/rdpdr.h b/include/freerdp/server/rdpdr.h index 8f01f1fc5..c4ddc5ba5 100644 --- a/include/freerdp/server/rdpdr.h +++ b/include/freerdp/server/rdpdr.h @@ -24,6 +24,7 @@ #define FREERDP_CHANNEL_RDPDR_SERVER_RDPDR_H #include +#include #include #include #include @@ -59,7 +60,11 @@ typedef struct LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; UINT32 FileAttributes; +#if defined(WITH_WCHAR_FILE_DIRECTORY_INFORMATION) + WCHAR FileName[512]; +#else char FileName[512]; +#endif } FILE_DIRECTORY_INFORMATION; #endif