mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-14 08:24:16 +09:00
@@ -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")
|
||||
|
||||
@@ -2341,9 +2341,17 @@ static UINT rdpdr_server_read_file_directory_information(wLog* log, wStream* s,
|
||||
if (!Stream_CheckAndLogRequiredLengthWLog(log, s, fileNameLength))
|
||||
return ERROR_INVALID_DATA;
|
||||
|
||||
if (fileNameLength / sizeof(WCHAR) > ARRAYSIZE(fdi->FileName))
|
||||
return ERROR_INVALID_DATA;
|
||||
|
||||
#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
|
||||
if (Stream_Read_UTF16_String_As_UTF8_Buffer(s, fileNameLength / sizeof(WCHAR), fdi->FileName,
|
||||
ARRAYSIZE(fdi->FileName)) < 0)
|
||||
return ERROR_INVALID_DATA;
|
||||
#endif
|
||||
return CHANNEL_RC_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -281,7 +281,7 @@ static BOOL wf_pre_connect(freerdp* instance)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
uint32_t keyboardLayoutId = freerdp_settings_get_uint32(settings, FreeRDP_KeyboardLayout);
|
||||
DWORD keyboardLayoutId = freerdp_settings_get_uint32(settings, FreeRDP_KeyboardLayout);
|
||||
|
||||
{
|
||||
CHAR name[KL_NAMELENGTH + 1] = { 0 };
|
||||
|
||||
@@ -2469,8 +2469,8 @@ static int parse_codec_cache_options(rdpSettings* settings, const COMMAND_LINE_A
|
||||
|
||||
static BOOL check_kbd_remap_valid(const char* token)
|
||||
{
|
||||
DWORD key = 0;
|
||||
DWORD value = 0;
|
||||
UINT32 key = 0;
|
||||
UINT32 value = 0;
|
||||
|
||||
WINPR_ASSERT(token);
|
||||
/* The remapping is only allowed for scancodes, so maximum is 999=999 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#define FREERDP_CHANNEL_RDPDR_SERVER_RDPDR_H
|
||||
|
||||
#include <freerdp/api.h>
|
||||
#include <freerdp/config.h>
|
||||
#include <freerdp/types.h>
|
||||
#include <freerdp/channels/wtsvc.h>
|
||||
#include <freerdp/channels/rdpdr.h>
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -330,7 +330,7 @@ static char* guid2str(const GUID* guid, char* buffer, size_t len)
|
||||
{
|
||||
if (!guid)
|
||||
return NULL;
|
||||
char* strguid = NULL;
|
||||
RPC_CSTR strguid = NULL;
|
||||
|
||||
RPC_STATUS rpcStatus = UuidToStringA(guid, &strguid);
|
||||
|
||||
|
||||
@@ -539,7 +539,7 @@ static int rpc_channel_rpch_init(RpcClient* client, RpcChannel* channel, const c
|
||||
|
||||
if (guid)
|
||||
{
|
||||
char* strguid = NULL;
|
||||
RPC_CSTR strguid = NULL;
|
||||
RPC_STATUS rpcStatus = UuidToStringA(guid, &strguid);
|
||||
|
||||
if (rpcStatus != RPC_S_OK)
|
||||
|
||||
@@ -1515,7 +1515,8 @@ BOOL freerdp_tcp_set_nodelay(wLog* log, DWORD level, int sockfd)
|
||||
|
||||
int type = -1;
|
||||
socklen_t typelen = sizeof(type);
|
||||
const int rc = getsockopt(sockfd, SOL_SOCKET, SO_TYPE, &type, &typelen);
|
||||
char* ptype = (char*)&type;
|
||||
const int rc = getsockopt(sockfd, SOL_SOCKET, SO_TYPE, ptype, &typelen);
|
||||
if (rc < 0)
|
||||
{
|
||||
char buffer[128] = { 0 };
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
static BOOL cert_info_allocate(rdpCertInfo* info, size_t size);
|
||||
|
||||
BOOL read_bignum(BYTE** dst, UINT32* length, const BIGNUM* num, BOOL alloc)
|
||||
BOOL read_bignum(BYTE** dst, DWORD* length, const BIGNUM* num, BOOL alloc)
|
||||
{
|
||||
WINPR_ASSERT(dst);
|
||||
WINPR_ASSERT(length);
|
||||
@@ -97,7 +97,7 @@ BOOL cert_info_create(rdpCertInfo* dst, const BIGNUM* rsa, const BIGNUM* rsa_e)
|
||||
if (!read_bignum(&dst->Modulus, &dst->ModulusLength, rsa, TRUE))
|
||||
goto fail;
|
||||
|
||||
UINT32 len = sizeof(dst->exponent);
|
||||
DWORD len = sizeof(dst->exponent);
|
||||
BYTE* ptr = &dst->exponent[0];
|
||||
if (!read_bignum(&ptr, &len, rsa_e, FALSE))
|
||||
goto fail;
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
#include <freerdp/log.h>
|
||||
#include <freerdp/api.h>
|
||||
|
||||
#include "opensslcompat.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
@@ -40,7 +42,7 @@ extern "C"
|
||||
FREERDP_LOCAL BOOL cert_info_read_modulus(rdpCertInfo* info, size_t size, wStream* s);
|
||||
FREERDP_LOCAL BOOL cert_info_read_exponent(rdpCertInfo* info, size_t size, wStream* s);
|
||||
|
||||
FREERDP_LOCAL BOOL read_bignum(BYTE** dst, UINT32* length, const BIGNUM* num, BOOL alloc);
|
||||
FREERDP_LOCAL BOOL read_bignum(BYTE** dst, DWORD* length, const BIGNUM* num, BOOL alloc);
|
||||
|
||||
#if !defined(OPENSSL_VERSION_MAJOR) || (OPENSSL_VERSION_MAJOR < 3)
|
||||
FREERDP_LOCAL X509* x509_from_rsa(const RSA* rsa);
|
||||
|
||||
@@ -382,8 +382,8 @@ FREERDP_REMAP_TABLE* freerdp_keyboard_remap_string_to_list(const char* list)
|
||||
char* token = strtok_s(copy, ",", &context);
|
||||
while (token)
|
||||
{
|
||||
DWORD key = 0;
|
||||
DWORD value = 0;
|
||||
UINT32 key = 0;
|
||||
UINT32 value = 0;
|
||||
if (!freerdp_extract_key_value(token, &key, &value))
|
||||
goto fail;
|
||||
if (key >= remap_table_size)
|
||||
|
||||
@@ -141,19 +141,19 @@ if [ $CLONE -ne 0 ]; then
|
||||
do_clone v1.3.1 https://github.com/madler/zlib.git zlib
|
||||
do_clone uriparser-0.9.8 https://github.com/uriparser/uriparser.git uriparser
|
||||
do_clone json-c-0.18-20240915 https://github.com/json-c/json-c.git json-c
|
||||
do_clone release-3.2.10 https://github.com/libsdl-org/SDL.git SDL
|
||||
do_clone release-3.2.28 https://github.com/libsdl-org/SDL.git SDL
|
||||
if [ $FFMPEG -ne 0 ]; then
|
||||
do_clone n7.1.1 https://github.com/FFmpeg/FFmpeg.git FFmpeg
|
||||
do_clone n8.0.1 https://github.com/FFmpeg/FFmpeg.git FFmpeg
|
||||
fi
|
||||
if [ $OPENH264 -ne 0 ]; then
|
||||
do_clone v2.6.0 https://github.com/cisco/openh264.git openh264
|
||||
fi
|
||||
do_clone v1.0.28-0 https://github.com/libusb/libusb-cmake.git libusb-cmake
|
||||
do_clone v1.0.29-0 https://github.com/libusb/libusb-cmake.git libusb-cmake
|
||||
do_clone release-3.2.4 https://github.com/libsdl-org/SDL_image.git SDL_image
|
||||
do_clone release-3.2.2 https://github.com/libsdl-org/SDL_ttf.git SDL_ttf
|
||||
do_clone v2.0.3 https://github.com/mstorsjo/fdk-aac.git fdk-aac
|
||||
do_clone v1.5.2 https://gitlab.xiph.org/xiph/opus.git opus
|
||||
do_download https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/ libressl-4.0.0.tar.gz 4d841955f0acc3dfc71d0e3dd35f283af461222350e26843fea9731c0246a1e4 libressl
|
||||
do_download https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/ libressl-4.2.1.tar.gz 6d5c2f58583588ea791f4c8645004071d00dfa554a5bf788a006ca1eb5abd70b libressl
|
||||
fi
|
||||
|
||||
if [ $BUILD -eq 0 ]; then
|
||||
@@ -267,6 +267,7 @@ fi
|
||||
do_cmake_build \
|
||||
"$BUILD_BASE/freerdp" \
|
||||
-S "$SCRIPT_PATH/.." \
|
||||
-DWITHOUT_FREERDP_3x_DEPRECATED=ON \
|
||||
-DWITH_SERVER=ON \
|
||||
-DWITH_SHADOW=OFF \
|
||||
-DWITH_PLATFORM_SERVER=OFF \
|
||||
|
||||
@@ -33,3 +33,9 @@ set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "toolchain default")
|
||||
set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY ON CACHE BOOL "toolchain default")
|
||||
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "toolchain default")
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON CACHE BOOL "toolchain default")
|
||||
|
||||
# mingw does not support C11
|
||||
#
|
||||
# https://stackoverflow.com/questions/52239644/mingw-w64-c11-threads-h-not-found
|
||||
add_compile_definitions(__STDC_NO_THREADS__)
|
||||
add_compile_definitions(__STDC_NO_ATOMICS__)
|
||||
|
||||
@@ -72,7 +72,7 @@ typedef HANDLE(WINAPI* fnWinStationVirtualOpenEx)(HANDLE hServer, DWORD SessionI
|
||||
static fnWinStationVirtualOpen pfnWinStationVirtualOpen = NULL;
|
||||
static fnWinStationVirtualOpenEx pfnWinStationVirtualOpenEx = NULL;
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelClose(HANDLE hChannel);
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelClose(HANDLE hChannel);
|
||||
|
||||
/**
|
||||
* NOTE !!
|
||||
@@ -116,7 +116,7 @@ static void _wts_free(void* ptr)
|
||||
#endif
|
||||
}
|
||||
|
||||
BOOL Win32_WTSVirtualChannelReadAsync(WTSAPI_CHANNEL* pChannel)
|
||||
static BOOL Win32_WTSVirtualChannelReadAsync(WTSAPI_CHANNEL* pChannel)
|
||||
{
|
||||
BOOL status = TRUE;
|
||||
DWORD numBytes = 0;
|
||||
@@ -170,8 +170,8 @@ BOOL Win32_WTSVirtualChannelReadAsync(WTSAPI_CHANNEL* pChannel)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HANDLE WINAPI Win32_WTSVirtualChannelOpen_Internal(HANDLE hServer, DWORD SessionId,
|
||||
LPSTR pVirtualName, DWORD flags)
|
||||
static HANDLE WINAPI Win32_WTSVirtualChannelOpen_Internal(HANDLE hServer, DWORD SessionId,
|
||||
LPSTR pVirtualName, DWORD flags)
|
||||
{
|
||||
HANDLE hFile;
|
||||
HANDLE hChannel;
|
||||
@@ -245,17 +245,18 @@ HANDLE WINAPI Win32_WTSVirtualChannelOpen_Internal(HANDLE hServer, DWORD Session
|
||||
return hChannel;
|
||||
}
|
||||
|
||||
HANDLE WINAPI Win32_WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId, LPSTR pVirtualName)
|
||||
static HANDLE WINAPI Win32_WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId,
|
||||
LPSTR pVirtualName)
|
||||
{
|
||||
return Win32_WTSVirtualChannelOpen_Internal(hServer, SessionId, pVirtualName, 0);
|
||||
}
|
||||
|
||||
HANDLE WINAPI Win32_WTSVirtualChannelOpenEx(DWORD SessionId, LPSTR pVirtualName, DWORD flags)
|
||||
static HANDLE WINAPI Win32_WTSVirtualChannelOpenEx(DWORD SessionId, LPSTR pVirtualName, DWORD flags)
|
||||
{
|
||||
return Win32_WTSVirtualChannelOpen_Internal(0, SessionId, pVirtualName, flags);
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelClose(HANDLE hChannel)
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelClose(HANDLE hChannel)
|
||||
{
|
||||
BOOL status = TRUE;
|
||||
WTSAPI_CHANNEL* pChannel = (WTSAPI_CHANNEL*)hChannel;
|
||||
@@ -302,9 +303,10 @@ BOOL WINAPI Win32_WTSVirtualChannelClose(HANDLE hChannel)
|
||||
return status;
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelRead_Static(WTSAPI_CHANNEL* pChannel, DWORD dwMilliseconds,
|
||||
LPVOID lpBuffer, DWORD nNumberOfBytesToRead,
|
||||
LPDWORD lpNumberOfBytesTransferred)
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelRead_Static(WTSAPI_CHANNEL* pChannel,
|
||||
DWORD dwMilliseconds, LPVOID lpBuffer,
|
||||
DWORD nNumberOfBytesToRead,
|
||||
LPDWORD lpNumberOfBytesTransferred)
|
||||
{
|
||||
if (pChannel->readDone)
|
||||
{
|
||||
@@ -449,9 +451,10 @@ BOOL WINAPI Win32_WTSVirtualChannelRead_Static(WTSAPI_CHANNEL* pChannel, DWORD d
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelRead_Dynamic(WTSAPI_CHANNEL* pChannel, DWORD dwMilliseconds,
|
||||
LPVOID lpBuffer, DWORD nNumberOfBytesToRead,
|
||||
LPDWORD lpNumberOfBytesTransferred)
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelRead_Dynamic(WTSAPI_CHANNEL* pChannel,
|
||||
DWORD dwMilliseconds, LPVOID lpBuffer,
|
||||
DWORD nNumberOfBytesToRead,
|
||||
LPDWORD lpNumberOfBytesTransferred)
|
||||
{
|
||||
if (pChannel->readSync)
|
||||
{
|
||||
@@ -567,9 +570,9 @@ BOOL WINAPI Win32_WTSVirtualChannelRead_Dynamic(WTSAPI_CHANNEL* pChannel, DWORD
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelRead(HANDLE hChannel, DWORD dwMilliseconds, LPVOID lpBuffer,
|
||||
DWORD nNumberOfBytesToRead,
|
||||
LPDWORD lpNumberOfBytesTransferred)
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelRead(HANDLE hChannel, DWORD dwMilliseconds,
|
||||
PCHAR lpBuffer, DWORD nNumberOfBytesToRead,
|
||||
LPDWORD lpNumberOfBytesTransferred)
|
||||
{
|
||||
WTSAPI_CHANNEL* pChannel = (WTSAPI_CHANNEL*)hChannel;
|
||||
|
||||
@@ -625,9 +628,9 @@ BOOL WINAPI Win32_WTSVirtualChannelRead(HANDLE hChannel, DWORD dwMilliseconds, L
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelWrite(HANDLE hChannel, LPCVOID lpBuffer,
|
||||
DWORD nNumberOfBytesToWrite,
|
||||
LPDWORD lpNumberOfBytesTransferred)
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelWrite(HANDLE hChannel, PCHAR lpBuffer,
|
||||
DWORD nNumberOfBytesToWrite,
|
||||
LPDWORD lpNumberOfBytesTransferred)
|
||||
{
|
||||
OVERLAPPED overlapped = { 0 };
|
||||
WTSAPI_CHANNEL* pChannel = (WTSAPI_CHANNEL*)hChannel;
|
||||
@@ -652,7 +655,7 @@ BOOL WINAPI Win32_WTSVirtualChannelWrite(HANDLE hChannel, LPCVOID lpBuffer,
|
||||
#define FILE_DEVICE_TERMSRV 0x00000038
|
||||
#endif
|
||||
|
||||
BOOL Win32_WTSVirtualChannelPurge_Internal(HANDLE hChannelHandle, ULONG IoControlCode)
|
||||
static BOOL Win32_WTSVirtualChannelPurge_Internal(HANDLE hChannelHandle, ULONG IoControlCode)
|
||||
{
|
||||
IO_STATUS_BLOCK ioStatusBlock = { 0 };
|
||||
WTSAPI_CHANNEL* pChannel = (WTSAPI_CHANNEL*)hChannelHandle;
|
||||
@@ -698,20 +701,21 @@ BOOL Win32_WTSVirtualChannelPurge_Internal(HANDLE hChannelHandle, ULONG IoContro
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelPurgeInput(HANDLE hChannelHandle)
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelPurgeInput(HANDLE hChannelHandle)
|
||||
{
|
||||
return Win32_WTSVirtualChannelPurge_Internal(hChannelHandle,
|
||||
(FILE_DEVICE_TERMSRV << 16) | 0x0107);
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle)
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelPurgeOutput(HANDLE hChannelHandle)
|
||||
{
|
||||
return Win32_WTSVirtualChannelPurge_Internal(hChannelHandle,
|
||||
(FILE_DEVICE_TERMSRV << 16) | 0x010B);
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CLASS WtsVirtualClass,
|
||||
PVOID* ppBuffer, DWORD* pBytesReturned)
|
||||
static BOOL WINAPI Win32_WTSVirtualChannelQuery(HANDLE hChannelHandle,
|
||||
WTS_VIRTUAL_CLASS WtsVirtualClass, PVOID* ppBuffer,
|
||||
DWORD* pBytesReturned)
|
||||
{
|
||||
WTSAPI_CHANNEL* pChannel = (WTSAPI_CHANNEL*)hChannelHandle;
|
||||
|
||||
@@ -764,19 +768,19 @@ BOOL WINAPI Win32_WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CLAS
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID WINAPI Win32_WTSFreeMemory(PVOID pMemory)
|
||||
static VOID WINAPI Win32_WTSFreeMemory(PVOID pMemory)
|
||||
{
|
||||
_wts_free(pMemory);
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
|
||||
ULONG NumberOfEntries)
|
||||
static BOOL WINAPI Win32_WTSFreeMemoryExW(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
|
||||
ULONG NumberOfEntries)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI Win32_WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
|
||||
ULONG NumberOfEntries)
|
||||
static BOOL WINAPI Win32_WTSFreeMemoryExA(WTS_TYPE_CLASS WTSTypeClass, PVOID pMemory,
|
||||
ULONG NumberOfEntries)
|
||||
{
|
||||
return WTSFreeMemoryExW(WTSTypeClass, pMemory, NumberOfEntries);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user