Microsoft RDP Client Extensions

Overview

Microsoft RDP Extensions (msrdpex)

The official Microsoft RDP client is the only one with an exhaustive implementation of the entire feature set. While FreeRDP is open source and available on all platforms, most vendors offering RDP support on Windows use the Microsoft RDP ActiveX interface instead. The solution is not to choose between FreeRDP and the Microsoft ActiveX, but to support them both while extending the Microsoft RDP client. In addition to this, Microsoft has been pushing for its "modern" remote desktop client (msrdc.exe) over the "classic" terminal services client (mstsc.exe) without providing the means to fully migrate to it. While both remote desktop clients use essentially the same RDP engine, they have multiple differences and limitations imposed by their user interfaces.

Initial Goals

We have recently confirmed that the modern RDP client core (rdclientax.dll) is binary-compatible with the RDP client classic core (mstscax.dll). The first goal of this project is to make it easier for third-party vendors to selectively load the ActiveX interfaces from either one of them, at runtime, for projects written in C or C#.

The second goal is to make it easier to launch msrdc.exe as a replacement of mstsc.exe, and avoid many of the issues that affect the window size handling. The biggest problem is that msrdc.exe doesn't have a GUI, and the one provided with the modern remote desktop client can't be used for direct RDP connectivity.

mstsc.exe / mstscax.dll

The Microsoft Terminal Services Client (mstsc.exe) is the built-in RDP client that most people in the industry are familiar with. It has a simple user interface that can be used to select a few RDP options and then connect to the RDP server of your choice. Since it is shipped as part of Windows, it has a long release cycle. The Microsoft RDP ActiveX interface is contained in mstscax.dll, the companion DLL to mstsc.exe.

msrdc.exe / rdclientax.dll

The Microsoft Remote Desktop Client (msrdc.exe) is the modern RDP client that is now shipped separately from Windows, and therefore has a faster release cycle. Unlike mstsc.exe, msrdc.exe only accepts .RDP files to launch new connections - the GUI is provided by its companion executable, msrdcw.exe. Unfortunately, the msrdcw.exe user interface is extremely limited: you can only subscribe to Azure Virtual Desktop web feeds and launch RDP connections from it. The rdclientax.dll companion DLL contains the same ActiveX interfaces as mstscax.dll with the exception that it is shipped separately from Windows.

Issues
  • COM Native library resolution

    COM Native library resolution

    With regards to the DllImport loading library hooking, if the target framework is .NET Core (>= 3.0) the best solution is NativeLibrary.SetDllImportResolver (https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.nativelibrary.setdllimportresolver?view=net-5.0)

    I know you already found a different workaround to make it work on .NET Framework. But it would be better (IMO) to use this API when the runtime is .NET Core.

    HTH

    opened by raffaeler 7
  • Consider supporting reconnection after sleep

    Consider supporting reconnection after sleep

    An active RDP connection gets of course lost when the workstation goes "sleeping". A soon as the PC is restored, sometimes it gets automatically connected back, most of the times the connection is broken. I believe this is network-related because the reconnection to a local VM is almost always restored correctly.

    Suggestion: consider supporting a solid reconnection to the session for any RDP session.

    opened by raffaeler 3
Owner
Marc-André Moreau
Marc-André Moreau
Linux Terminal Service Manager (LTSM) is a set of service programs that allows remote computers to connect to a Linux operating system computer using a remote terminal session (over VNC or RDP)

Linux Terminal Service Manager (LTSM) is a set of service programs that allows remote computers to connect to a Linux operating system computer using a remote terminal session (over VNC)

null 14 Jan 5, 2022
Enable RDP and set firewall by Windows API.

fast-enable-rdp This toool Enable RDP and set firewall by Windows API. How to use? enablerdp.exe -- this help enablerdp.exe any --

YangHaoi 4 May 30, 2022
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.

Welcome! The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design

Microsoft 7k Aug 6, 2022
Triton Python and C++ client libraries and example, and client examples for go, java and scala.

Triton Client Libraries and Examples To simplify communication with Triton, the Triton project provides several client libraries and examples of how t

Triton Inference Server 164 Aug 7, 2022
VEngine-Client - vEngine: Official Client Module

━ S Y N O P S I S ━ Maintainer(s): Aviril, Tron vEngine is Next-Gen Sandbox-Engine being crafted in C++. In contrast to UE/Unity/ReverseEngineered-Mod

ᴠ : ꜱᴛᴜᴅɪᴏ 13 Apr 13, 2022
Pyth-client - client API for on-chain pyth programs

pyth-client client API for on-chain pyth programs Build Instructions # depends on openssl apt install libssl-dev # depends on libz apt install zlib1g

Pyth Network 101 Jul 3, 2022
Webdav-client-cpp - C++ WebDAV Client provides easy and convenient to work with WebDAV-servers.

WebDAV Client Package WebDAV Client provides easy and convenient to work with WebDAV-servers: Yandex.Disk Dropbox Google Drive Box 4shared ownCloud ..

Cloud Polis 102 Jul 10, 2022
This repository provides a C++ client SDK for Unleash that meets the Unleash Client Specifications.

Unleash Client SDK for C++ This repository provides a C++ client SDK for Unleash that meets the Unleash Client Specifications. Features The below tabl

Antonio Ruiz 4 Jan 30, 2022
This repo contains Direct3D 9, Direct3D 10, a few Direct3D 11, and DirectSound C++ samples from the legacy DirectX SDK updated to build using the Windows 10 SDK and the Microsoft.DXSDK.D3DX NuGet package

DirectX SDK Legacy Samples This repo contains Direct3D 9, Direct3D 10, a few Direct3D 11, and DirectSound samples that originally shipped in the legac

Chuck Walbourn 36 Jul 24, 2022
A C++ header-only HTTP/HTTPS server and client library

cpp-httplib A C++11 single-file header-only cross platform HTTP/HTTPS library. It's extremely easy to setup. Just include the httplib.h file in your c

null 7.5k Aug 5, 2022
Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K connections problem solution

CppServer Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and

Ivan Shynkarenka 867 Aug 8, 2022
A portable MQTT C client for embedded systems and PCs alike.

MQTT-C is an MQTT v3.1.1 client written in C. MQTT is a lightweight publisher-subscriber-based messaging protocol that is commonly used in IoT and net

Liam Bindle 518 Aug 4, 2022
C++ client for making HTTP/REST requests

REST client for C++ About This is a simple REST client for C++. It wraps libcurl for HTTP requests. Usage restclient-cpp provides two ways of interact

Daniel Schauenberg 1.4k Aug 5, 2022
Wangle is a framework providing a set of common client/server abstractions for building services in a consistent, modular, and composable way.

Wangle C++ networking library Wangle is a library that makes it easy to build protocols, application clients, and application servers. It's like Netty

Facebook 2.9k Aug 9, 2022
C++ websocket client/server library

WebSocket++ (0.8.2) WebSocket++ is a header only C++ library that implements RFC6455 The WebSocket Protocol. It allows integrating WebSocket client an

Peter Thorson 5.7k Aug 10, 2022
LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.

LibVNCServer: A library for easy implementation of a VNC server. Copyright (C) 2001-2003 Johannes E. Schindelin If you already used LibVNCServer, you

null 851 Aug 8, 2022
C++11 implementation of Socket.IO client

By virtue of being written in C++, this client works in several different platforms. The examples folder contains an iPhone, QT and Console example chat client! It depends on websocket++ and is inspired by socket.io-clientpp.

Socket.IO 2k Aug 9, 2022
Client modifications of CoD4 X

CoD4x_Client_pub Client modifications of CoD4 X - this will not be the same as the official released files and you wont be able to join all servers wi

null 34 Aug 8, 2022
A network library for client/server games written in C++

yojimbo yojimbo is a network library for client/server games written in C++. It's designed around the networking requirements of competitive multiplay

The Network Protocol Company 2.2k Aug 4, 2022