Quantcast
Channel: remote desktop mobile – Windows CE Programming
Viewing all 18 articles
Browse latest View live

Automated Login for Remote Desktop Mobile II

$
0
0

Update 18. nov 2011: fixed some bugs, as mentioned by Patrick S. (great to see, that some take and use the code):

  • screen_width and height for WriteRDP()
  • read FitToScreen from reg in readReg()
  • check for already running process of startOnExit in startTSC(). Although I think check for running a process multiple times should be done in the target process.

Update 16. may 2011: converted code for VS2008(windows mobile 6 sdk), see Downloads at bottom

UPDATE 23 june 2010: new registry option to switch between MouseClick and Keyboard simulation:

REGEDIT4
[HKEY_LOCAL_MACHINE\Software\RDP_autologin]
"FitToScreen"="1"
"FullScreen"="1"
"Status"="connecting..."
"Save Password"="1"
"Domain"=""
"Password"="Intermec+2004"
"Username"="rdesktop"
"Computer"="192.168.0.130"
"DesktopWidth"=640
"DesktopHeight"=480
"startOnExit"="\rdp_keepBusy.exe"
"execargs"="noRDPstart"
"UseMouseClick"="0"    //added with version 3 to switch between mouse and keyboard simulation

 

Some days ago I published my RDP_Autologin code: RDP_Autologin

As there were some screen metrics hardcoded and more and more devices come with a VGA screen the hardcoded QVGA values will not match. So I extended the first version and implemented some additional logic and settings.

First, the emulated screen tap has been adjusted to depend on the device screen width and height. For that I included the HIRES_AWARE resource to get the real screen size.

...
	DWORD dX = (0xFFFF / iScreenWidth) * (80); // changed from 13 to width=240, 1/3=80
	DWORD dY = (0xFFFF / iScreenHeight) * (iScreenHeight - 13);
...
BOOL getScreenSize(){
	int iScreenX = GetSystemMetrics(SM_CXSCREEN);
	int iScreenY = GetSystemMetrics(SM_CYSCREEN);
	DEBUGMSG(1, (L"\ngetScreenSize: x=%i, y=%i\n", iScreenX, iScreenY));
	if(iScreenX>0)
		iScreenWidth=iScreenX;
	if(iScreenY>0)
		iScreenHeight=iScreenY;
	if(iScreenX+iScreenY > 0){
		_itow(iScreenWidth, sScreenWidth, 10);
		_itow(iScreenHeight, sScreenHeight, 10);
		return TRUE;
	}
	else
		return FALSE;
}
...

The rdp file defaults for desktop width and height will also be calculated but you can set the default to use via the registry.

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\RDP_autologin]
"startOnExit"="\Windows\rdp_keepbusy.exe" "DesktopHeight"=dword:000001E0 "DesktopWidth"=dword:00000280
"Computer"="192.168.0.2"
"FitToScreen"="0"
"FullScreen"="0"
"Username"="rdesktop"
"Password"="xxxx"
"Domain"=""
"Save Password"="1"
"Status"="connecting..."

As you can see, I added a line where you can specify an application that will be started at the end of the autoconnect process: startOnExit.

Downloads:

evc4 source code: DOWNLOAD:rdp autologin 2 evc4 source code - (Hits: 612, size: 113.37 KB)

Armv4i executable: DOWNLOAD:rdp autologin 2 Armv4i executable - (Hits: 679, size: 6.47 KB)

NEW: Version 3 adds new option to let the app use MouseClick or Keyboard Simulation

Update 18. nov 2011: DOWNLOAD:Updated rdp_auologin (screen_width/height) - (Hits: 340, size: 159.78 kB)

Exe File (ArmV4i) DOWNLOAD:RDP Autologin Version 3 - New version with Mouse or Keyboard simulation switch in registry: UseMouseClick=DWORD 0/1 (Hits: 643, size: 6.56 kB)

eVC4 source code DOWNLOAD:RDP AutoLogin version 3 source code - eVC4 source code for my RDP_AutoLogin version 3 (Hits: 364, size: 131.73 kB)

NEW: VS2008 code and exe DOWNLOAD:RDPautologin Visual Studio 2008 code (and Release\\exe) - (Hits: 411, size: 144.01 kB)

Update 4.march 2011: Please also see http://blogs.msdn.com/b/raffael/archive/2009/09/11/remote-desktop-mobile-rdp-client-disconnects-after-10-minutes-of-inactivity.aspx about idle timeout

 


Mobile Development: a native remote desktop client (rdesktop port win32)

$
0
0

The famous rdesktop running natively on windows ce and windows mobile

Intro and Background

Some times ago I found that message of Jay Sorg and retrieved a copy of his code for a native rdesktop win32 version. I played a little and got the code compile with Visual Studio 2005 with the Windows Mobile SDK.

I tried to implement windows clipboard support to enhance the transfer of texts between the client and server, but unfortunately I was not successful yet. Hopefully someone jumps in and helps enhancing the code and adds some features.

Rdesktop is open source and you can go with the wince implementation here, but if it does not work for you, you have either change the code yourself (and publish it) or find someone that is able to do for you.

There is a template uiports/xxxwin.c in the actual rdesktop source you can use as a starter to compile the actual rdesktop version for windows mobile if you manage to get all the dependencies to work. If you success, forget this post and go with this version (maybe you leave me a note?).

Why another Remote Desktop/Terminal Server Client?

The Windows Mobile Remote Desktop Client (or Remote Desktop Mobile, RDM) lacks some useful features available in the Windows CE version or the Desktop Windows version:

  • No automated login
  • No kiosk mode
  • Function keys are not sent to server

The first item is essential if you like to start a Terminal Server session without user intervention.

The second item is important for using RDM in a production environment.

The third item is useful to run applications on the Terminal Server (TS) that use Function keys.

Commercial RDM

There are some commercial remote desktop clients available for windows mobile:

  • Mochasoft RDP client
    “Windows 200x servers and terminal servers are not supported, as to a Microsoft patent license.”
  • zaDesktop
    This is currently in an early state.
  • RDP Finster
    Not really clear where this comes from.

I assume some of the commercials are either using mstscax or rdesktop code. Some time ago MS published the RDP documentation. Maybe the commercial apps did start from there. Going with the TSC COM library mststcax would be great, but who has the doc for this? For desktop PCs it is documented but not for windows mobile. If someone has a doc to this leave me a note. Then we can start to write a TSC around this library.

There are also some rewritten TSC for the desktop not using mstscax. One is called ProperJavaRDP and maybe a good starting point to rewrite a dotnet based native TSC for windows mobile.

Usage of the free opensource rdesktop-ce

You can start winrdesktop on windows mobile either with an ini file or with command line arguments:

Sample winrdesktop.ini

(place either in program dir or in root)

[main]
server=192.168.128.5
port=3389
username=YourUserName
password=YourPassword
bpp=16
geometry=1024x768
#fullscreen

server : provide the server IP or DNS host name
port : provide the port to use for RDP, usually 3389
username : provide the login user name for the terminal client session
password : provide the password of the user
bpp : define the bits per pixel to be used (number of colors per pixel)
geometry : define the size of the remote desktop window width x height An application to be used on windows mobile devices should match the screen size of the device. For example 240×320 (QVGA). Otherwise the user has to scroll the window to get access to all of the remote screen.
fullscreen : currently not supported


UPDATE 23. nov 2010:

fullscreen now supported. Fullscreen will switch rdesktop to not show a caption and no menu bar. If geometry matches the device’s screen size, there will also be no scrollbars.

This screenshot was taken of an app I wrote running on a Windows 2003 server of a QVGA device with following winrdesktop.ini:

[main]
server=192.168.128.5
port=3389
username=rdesktop
password=rdesktop
bpp=16
geometry=240x320
fullscreen

Rdesktop usage

Command line

WinRDesktop [-g widthxheight] [-t port] [-a bpp]
    [-f] [-u username] [-p password] [-d domain]
    [-s shell] [-c working directory] [-n host name]
    server-name-or-ip

options are the same as in winrdesktop.ini plus:

-d domain : specify the domain of the user login
-s shell : define a shell to use on TSC
-c working directory : define a working directory for the session
-n host name : specify the host name to use for the client (visible on TSC)

Restrictions of current code

See googlecode issues for a list of known restrictions.

Downloads

Windows Mobile Executable and INI sample file at googlecode
Source code: see googlecode

WM 6.5: Remote Desktop Client disconnects after 10 minutes

$
0
0

Hi

as MS does not change it, the Remote Desktop Mobile application still disconnects a session after 10 minutes idle time.

Although there is a solution for Windows Mobile 6.1 (http://www.hjgode.de/wp/2009/09/18/wm6-1-remote-desktop-client-disconnects-after-10-minutes/) based on the posting of Rafael (MS Support), this will not work with Windows Embedded Handheld (WM6.5).

The TSSHELLWND will not react on mouse_event and you have to replace the calls by SendMessage and send the WM_MOUSEMOVE to the Terminal Server Input window.

The attached application will do so but it will start only on Int*rm*c devices. It sends a mouse_move message all 4 minutes to the TS input window and so the idle timer will not timeout.

If you ever need to stop RDMKeepbusy from running in the background, you will need StopKeepBusy which is part of the executable download.

For visual control, RDMKeepbusy shows a small blinking line in the task bar:
green = Remote Desktop window found and input window is active
yellow = Remote Desktop window found, but no input window active
red = Remote Desktop window not found

Version 1: DOWNLOAD:RDM Keepbusy - Windows Embedded Handheld application to avoid idle timeouts (Hits: 409, size: 8.07 kB)

Version 3: Updated version (you dont need to start RDM before starting RDM_KeepBusy): DOWNLOAD:RDM_KeepBusy 3 - (Hits: 362, size: ) Note: this will run only on intermec devices!

Version dec 2011: Updated version (see usage.txt): DOWNLOAD:RDM_KeepBusy - remote desktop mobile disconnects after 10 minutes of idle time. RDM_KeepBusy will avoid this by simulating mouse movements (Hits: 385, size: 8.56 kB)

Remote Desktop Mobile on VGA devices: QVGA applications do not scale well

$
0
0

Hi

there are now more and more full VGA rugged devices coming. And some customers are still using Remote Desktop Mobile to run there application on the small screens. Unfortunately some of the coders use application screen layouts hard coded to QVGA (240×320). Now with a VGA capable Windows Mobile device they get weird screens on the device.

The client (Remote Desktop Mobile) sends the server information about there screen sizes. As a VGA device can display 480×640 pixels, the hard coded 240×320 applications only use a quarter of the screen. The texts are very small and more or less unreadable.

The terminal server gets client resolution information:

Unscaled (left) VGA display of a QVGA application (with “Fit remote desktop to screen” NOT CHECKED) and on the right the same application with internal autoadjust to workscreen size:

   

As you can see in the right image above this line, it is no problem to show a form designed for QVGA to scale nice with the use of some code (as using WorkingArea.Width/Height and a table layout). But in the left image you see what happens to hard coded designed applications.

If you have the source code, you should change the design of your dialogs to be resolution aware, so it scales fine for QVGA and VGA (and whatever comes next).

If you do not have the code or can not change the application, you have to tell Windows Mobile to behave like the Remote Desktop Mobile application is NOT HI_RES_AWARE. That means you need to hack the exe file. I took a look at the Windows Mobile 6.5.3 wpctsc.exe (the Remote Desktop Mobile executable) and did not find the HI_RES_AWARE resource, so the OS must use the other mark to see that wpctsc.exe is HI_RES_AWARE. And yes, indeed, the PE header shows that wpctsc.exe has a subystem version of 5.2. With some PEInfo tool, you can hack the major subsystem version and just change it from 5 to 4.

When you start a application that is not HI_RES_AWARE, the Windows Mobile 6.5.3 OS will scale all UI elements for the application and the app will look fine and not only fill a quarter of the VGA screen. After changing the major subsystem version number, the first thing you will notice is the more coarse display of the menu items in the menu bar:

  

Left is the HI_RES_AWARE original app and on the right we have the hacked one (take a closer look ate the ellipses around the menu items).

When you use the hacked, not HI_RES_AWARE, application, the terminal server will see the client supports QVGA only (Client Resolution) and your hard coded application screens will look the same as on a QVGA capable device:

  

The attached wpctsc.exe is the hacked one with a subsystem major version number of 4 instead of 5. Use this on your Windows Mobile 6.5.3 device at your own risk. The file is not signed as the device I work with are not requiring signed exe files. The change to the exe file (after I dumped the OS files to my PC using itsutils) was simply done with mgeeky’s PEinfo code at GitHub.

If you can not copy the file on top of the original one on the device (\Windows\wpctsc.exe), you can use the syscache feature. Copy the wpctsc.exe to \Windows\System\SysCache directory and reboot the device. If the directory does not exist you just have to create it manually.

If you want to get the old wpctsc.exe back, just delete the file you copied. As the original wpctsc.exe is part of the OS (a XIP file), you can not delete the file but you can copy a file with the same name on top of it. When you delete this copied file, the original is back in place. So, there is no harm in testinng the exe.

Update 18. june 2013:

Here is an alternative way for changing the subsystem version number

Using ResHacker and EditBin

Depending on the exe file you have to remove the CEUX/HIRES_AWARE resource from the exe file and/or change the subsystem version number.
The below will not work for .NET applications as these are executed by the .NET runtime.

Use EditBin to down the major subsystem version number below 5.0

First start your vcvarsall.bat normally located at “C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC”. This will setup the search path to let cmd find editbin and runtimes.

To lower or change the subsystem version number use following command:

editbin.exe yourexefilename /SUBSYSTEM:WINDOWS,4.20

this will return:

Microsoft (R) COFF/PE Editor Version 11.00.50727.1
Copyright (C) Microsoft Corporation.  All rights reserved.

LINK : warning LNK4241: invalid subsystem version number 4.20

Do not care, the version number is changed.

Test your patched exe on a device. If it shows strange you may have to use the following editbin command:

editbin.exe yourexefilename /SUBSYSTEM:WINDOWSCE,4.20

Test your patched exe again. This time it should work OK.

Use ResHacker to remove CEUX

Start ResHacker and then look for the CEUX resource entry. Double click down to the deepest branch of CEUX and then right click the binary entry and select [Delete Resource].

reshacker_1  reshacker_2

Repeat that if the CEUX has another branch. When all branches are deleted, the CEUX entry will disappear.
Save your new exe file with a different name and test it on a device.


DOWNLOAD:wpctsc.exe with major subsystem version number = 4 - (Hits: 1075, size: 40.21 kB)

Windows Mobile – the no-go world of Function Keys

$
0
0

Hello

I want to summarize the role of function keys in Windows Mobile, former Pocket PC, as I got several questions each week on how to use or enable Function keys in this or that application.

Here is a simple information about how function keys work in Windows Mobile.

As example you have a web application which shows F3 and F4 as shortcuts to previous/next page:

SAP ITS Mobile screen Intermec Browser

SAP ITS Mobile screen Intermec Browser

Without some prepare this screen will not react on function keys! As the screen shows Intermec Browser (IB) with a SAP ITS Mobile form, you are able to define settings in IB to be able to really use the Function Keys.

Windows Mobile uses Function Key values for its own purpose. The usage can be retrieved by looking at winuserm.h of a Windows Mobile SDK:

[codesyntax lang="cpp" lines="normal" lines_start="1"]

//winuserm.h
...
#define VK_TSOFT1   VK_F1               // Softkey 1
#define VK_TSOFT2   VK_F2               // Softkey 2
#define VK_TTALK    VK_F3               // Talk
#define VK_TEND     VK_F4               // End
...
#define VK_TRECORD      VK_F10          // Record
#define VK_TFLIP        VK_F17          // Flip
#define VK_TPOWER       VK_F18          // Power
#define VK_TVOLUMEUP    VK_F6           // Volume Up
#define VK_TVOLUMEDOWN  VK_F7           // Volume Down
...
#define VK_TSPEAKERPHONE_TOGGLE VK_F16
#define VK_END_ALL_DATA_CALLS   VK_F15
...
#define VK_TSTAR    VK_F8               // *
#define VK_TPOUND   VK_F9               // #
...
#define VK_SYMBOL   VK_F11              // Symbol (SYM) key

#define VK_REDKEY   VK_F19              // Sent by a keypad that has a special red function key
#define VK_ROCKER   VK_F20              // Arrow keys came from a Rocker
#define VK_DPAD     VK_F21              // Arrow keys came from a DPAD
#define VK_ACTION   VK_F23              // Sent with VK_RETURN when doing Action on PPC rockers

#define VK_VOICEDIAL  VK_F24            // Key used to kick off voice dial recognition
#define VK_KEYLOCK    VK_F22            // Key used to lock the device
#define VK_KEYUNLOCK  VK_F25             // Key used to unlock the key lock

// Chorded keys.  DONE is VK_RWIN + VK_F6 and MOJI is VK_RWIN + VK_F7
#define VK_DONE     VK_F6                 // <OK/Close> hotkey code
#define MOD_DONE    (MOD_WIN | MOD_KEYUP) // <OK/Close> hotkey modifiers

#define VK_MOJI     VK_F7                  // Key used to switch between FE language layouts
#define MOD_MOJI    (MOD_WIN | MOD_KEYUP)  //Modifiers so MOJI goes to the shell
...

[/codesyntax]

You see that many FunctionKey values are assigned to OS specific functions like Phone, END, Volume Up/Down etc.

So, you can normally not use Function Keys in your application to provide shortcuts to function calls. This is also true for client applications like Terminal Emulators (TE) like NaurTechTE and Intermec TE (ITE), browser based applications like Internet Explorer Mobile or Intermec Kiosk Mode Browser (IB), thin clients like Java client apps (ie. SAP ITS Mobile) or Remote Desktop client apps (ie Remote Desktop Mobile, zaDesktop).

Some of the kiosk mode apps provide a way to enable you to use Function Keys (see example at top). They can do so, as they use API calls like UnregisterFunc1 or AllKeys(TRUE) or GXOpenInput (deprecated!). These APIs instruct Windows Mobile OS to NOT catch and use Function Keys but handle them like ‘normal’ keys.

If you are the coder of an application using CPP, CSharp (C#), VB.NET, CPP or JAVA, you can use the Microsoft API function AllKeys(TRUE) in your code and Windows Mobile will not tamper the function keys.

If you are not the coder you may use UnregisterFunc1 (see my post “Freedom for Function Keys“). But be warned, there are applications that even then will not process Function Keys or do not forward them. For example Internet Explorer Mobile (IEM) will NOT process Function Keys except for internal functions like help or full-screen. Another bad example is Remote Desktop Mobile (RDM). It does not support Function Keys, even if you un-register them before you launch RDM, Function Keys will NOT be processed or transmitted to the host application. An alternative to RDM with function key support is rdesktopCE.

When you use UnregisterFunc1, you can check the Function Keys using a tool like KeyTest3AK. It will show the keydown and keyup values of keys and shows what happens if you use AllKeys():

More posts about AllKeys

Update 1. march 2012:

Additional annoyance: Did youknow, that F11 will be signaled as
WM_KEYDOWN VK_PROCESSKEY
WM_KEYUP VK_F11
so you can only rely on the keyup message for this function key. The translation of WM_KEYDOWN VK_F11 is done by the OS and cant be disabled, AFAIK.

Mobile Developement – RDP AutoLogin extended (version 4)

$
0
0

Hello

on the wish of the one or other user I extended the RDP AutoLogin code and we now reached level 4.

The new code simply has only one extension, it supports the color depth selection. Also the color depth and other settings are visible on the dialog of Remote Desktop Mobile, the settings itself are done via the Default.rdp file. But you are right, RDP_AutoLogin also controls some of the dialog items directly.

[codesyntax lang="text"]

...
Domain:s:
ColorDepthID:i:3
ScreenStyle:i:0
DesktopWidth:i:640
DesktopHeight:i:480
UserName:s:rdesktop
...
ServerName:s:192.168.128.5
SavePassword:i:1
...

[/codesyntax]

The color depth setting supports two modes, 8 Bit with 256b colors (ColorDepthID:i:1) and 16 Bit with ~65000 colors (ColorDepthID:i:3).

[codesyntax lang="reg"]

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\RDP_autologin]
"FitToScreen"="1"
"FullScreen"="1"
"Status"="connecting..."
"Save Password"="1"
"Domain"=""
"Password"="Intermec+2004"
"Username"="rdesktop"
"Computer"="192.168.0.130"
"DesktopWidth"=640
"DesktopHeight"=480
"startOnExit"="\\rdp_keepBusy.exe"
"execargs"="noRDPstart"
"UseMouseClick"="0"	//added with version 3 to switch between mouse and keyboard simulation
"ColorDepth"=1		//added with version 4 to enable switching between 8 and 16 Bit colors

[/codesyntax]

The code changes are small. Some code addition to read the value from the registry and some to write the rdp file:

[codesyntax lang="cpp"]

void readReg(){
...
        //ColorDepth new with version 4
        if(RegReadDword(L"ColorDepth", &dwTemp) == 0)
            dwColorDepth=dwTemp;
...
}
void writeRDP(){
...
			else if(wcsstr(rdpLines[c].line, L"ColorDepthID")!=NULL){
				wsprintf(szTemp, rdpLines[c].line, dwColorDepth);  //3=HighColor(16Bit) or 1=(8Bit) color
			}
...
}

[/codesyntax]

Additionally I have added a new project to the solution to enable to set all the settings not only via the registry but using a GUI application. RDP_Autologin_Settings is born:

 

As you see, there is also a small file browser integrated. The default OpenFile dialog of Compact Framework does not allow you to browse all directories, but only “\My Documents”.

RDP AutoLogin Settings Editor (exe): DOWNLOAD:RDP AutoLogin Settings editor - (Hits: 270, size: 10.45 kB)
source (Visual Studio 2008 WM5 SDK project): DOWNLOAD:RDP AutoLogin Settings editor Source Code - (Hits: 164, size: 21.23 kB)

RDP_AutoLogin (exe): DOWNLOAD:RDP AutoLogin Executable - (Hits: 272, size: 6.78 kB)
source (Visual Studio 2008 WM5 SDK project): DOWNLOAD:RDP AutoLogin Source Code - (Hits: 165, size: 56.85 kB)

RDP_KeepBusy (exe): DOWNLOAD:RDP KeepBusy (executable) - (Hits: 224, size: 3.17 kB)
RDP_KeepBusy (vs2008 WM5 SDK project): DOWNLOAD:RDP KeepBusy Source Code - (Hits: 152, size: 12.92 kB)

Have fun

Josef

WM 6.5: Remote Desktop Client disconnects after 10 minutes rev 3

Mobile Development: RDP AutoLogin v5

$
0
0

Based on version-4 here is an more extended version with the option to preset Resource mapping (Device storage and Remote desktop sound).

These two options are controlled by the default.rdp file:

EnableDriveRedirection:i:1
AudioRedirectionMode:i:

with the following options for windows mobile:

EnableDriveRedirection
1=enables access to local files inside the host session
0=disable access to local files

AudioRedirectionMode
0=Redirect sounds to the client,
1=Play sounds at the remote computer,
2=Disable sound redirection; do not play sounds at the server

The settings program has been updated to let you change the corresponding registry settings for RDP_AutoLogin.exe:

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\RDP_autologin]
...
"AudioRedirectionMode"=dword:00000002
"DeviceStorage"=dword:00000001
...

Here are the updated executables:

RDP_Autologin.exe: DOWNLOAD:RDP_AutoLogin v5 - (Hits: 361, size: 22 kB)

RDP_Autologin_Settings.exe: DOWNLOAD:RDP_Autologin_Settings - (Hits: 312, size: 24.5 kB)

RDP_Keepbusy.exe: DOWNLOAD:RDP_Keepbusy - (Hits: 268, size: 9 kB)

Update 21.aug.2012: new binary downloads at code.google.com. Fixed a bug with RDP_AutoLogin (if run twice). Added RDM_KeepBusy settings to settings application (see also changelog at google code).

For Windows Mobile/Embedded Handheld 6.5.3 use RDM_KeepBusy!

Source Code


RDM_Keepbusy has been updated

$
0
0

I fixed a bug in RDM_KeepBusy. It worked only for the first session and not after close/open another session. Please always use the subversion code.

Mobile Development: rdesktop-ce is now Win2008 R2 compatible

$
0
0

Just a short note: rdesktop-ce is now RDP5 capable and can connect to Win2008 R2 Terminal Services.

With the help of bradh I now have a Windows CE fork of rdesktop that does not show modulo 0×108 error any more when run against windows 2008 R2 server.

Windows Mobile: Hidden Remote Desktop Client Clipboard support

$
0
0

Recently I looked for support of starting an alternative shell when using Remote Desktop Mobile on a Windows Embedded Handheld 6.5.3 device.

MSDN says that I can to specify AlternateShell in a rdp file. As Windows Mobile devices always use \Windows\default.rdp, I added the following two lines and tested what happens.

WorkingDir:s:C:\Program Files (x86)
AlternateShell:s:C:\Program Files (x86)\notepad.exe

Unfortunately the above entries are ignored :-(

But why? I decided to look inside wpctsc.exe I dumped of a WEH device to see which strings (used sysinternals strings app) are known to the Mobile Remote Desktop client. And, no surprise, AlternateShell is not known inside wpctsc.exe. But I saw two other interesting strings around the ones used in rdp files.

\windows\TscShift.txt
GrabFocusOnConnect
MinutesToIdleTimeout
SavePassword
AutoLogon
MCSPort
ServerName
Domain
Password
UserName
DisableFileAccess
BBarEnabled
EnablePrinterRedirection
EnableSCardRedirection
AutoReconnectEnabled
EnableDriveRedirection
EnablePortRedirection
AudioRedirectionMode
BitmapPersistenceEnabled
BBarShowPinBtn
Compress
KeyboardHookMode
MaxReconnectAttempts
Disable Wallpaper
Disable Full Window Drag
Disable Menu Anims
Disable Themes
DesktopHeight
DesktopWidth
ScreenStyle
ColorDepthID
KeyboardLayoutString
0x00000409
KeyboardType
KeyboardSubType
KeyboardFunctionKey
FullScreenAlways
BBarPinned
EnableClipboardRedirection
RDPIdleTimeout

Oh, EnableClipboardRedirection sounds very promising to me. Just thought about the slow data input of barcode scanning into a Remote Desktop application. That transfer is done using keyboard messages with delays in between every key that is simulated.

So, I prepared a default.rdp with the new setting. First I started one remote desktop session of the mobile device and then downloaded the default.rdp created by wpcstc.exe. Then I added one line:

EnableClipboardRedirection:i:1

Then I copied the changed file back to \windows on the device and stopped remote desktop client on the device using the task manager app on the device. To test the new setting I used a small text in notes on the device, marked some text and used the software keyboard to issue a Ctrl+C to copy the text to the clipboard. Then switched to the remote session and tested Ctrl+V inside the servers notepad app. Yes, that works.

To check that with the WEH device and it’s barcode scanning software I switched the wedge method to Block Mode and tested barcode input again in the server’s notepad app.

wedgemode-block

I used a 500 char PDF barcode for the test and it was shown within notepad as fast I did never see before with barcode scanned data transfer (in a remote session). Although I am not a friend of videos I did a short an ugly one using MyMobiler scaled and converted to flv by ffmpeg on a linux machine:

rdp session with block and char mode

By the way, the other interesting string (RDPIdelTimeout) does not work. I just put the line

RDPIdleTimeout:i:0

into my copy of default.rdp and copied it back to \windows on the device. After restarting the remote desktop client on the device it still disconnected after 10 minutes of no user action. Sorry, no help.

WHY are these settings not documented anywhere by Microsoft? Or do you know a location?

Download default.rdp sample: DOWNLOAD:default rdp sample - (Hits: 49, size: 964 bytes)

Mobile development: rdp_autologin updated to support clipboard redirection

$
0
0

The source code of rdp_autologin has been updated and now default.rdp will now include some more lines:

WorkingDir:s:C:\Program Files (x86)
AlternateShell:s:C:\Program Files (x86)\notepad.exe
EnableClipboardRedirection:i:1
RDPIdleTimeout:i:0

where only EnableClipboardRedirection is working.

Will update the code of rdp_autologin and it’s tools to enable you to control the clipboard setting by the registry. Currently it defaults to ENABLED.

See also previous posts.

Windows Server 2012 RDS and Windows Mobile: connection error

$
0
0

For whatever reason MS decided to make Windows 2012 RDS (former Terminal Services, now Remote Desktop Services) not compatible with Windows Mobile 6.x and other Windows CE 5.0 based handheld devices.

Fortunately, if you activated Remote Desktop License Server using ‘Web Browser’ method, you simply have to change the Collections Security settings and disable ‘Allow only … Network Level Authentication’ (NLA).

The following can also apply for Windows 2008 R2 Terminal Server. Check if you activate the Licensing server via “Web Browser” connection or directly. My 2008 R2 server is running OK for Windows Mobile, as a stand-alone server, with 100 licenses and activated via “Web Browser”.

But let start at the beginning.

Basic RDS setup

When you installed Windows 2012 Server within an existing or new Active Directory and then add the Remote Desktop Server role, you have different choices:

AddRolesAndFeatures

You may go on with “Remote Desktop Services scenario-based installation” and then just follow the wizard after selecting “Quick Start”.

AddRolesAndFeatures_2

The wizard will install everything onto one server.

AddRolesAndFeatures_3

Virtual Desktop Infrastructure makes no sense for Windows Mobile clients. They do not need a full virtual windows machine based on a virtual machine. So we select “Session Virtualization”.

The wizard will then deploy all the services and roles and create one default “Session Collection” and “Remote Apps”. At the end you should get following screen:

AddRolesAndFeatures_4

Now check the setup and look at the RDS Overview:

RemoteDesktopServices-Overview

You see we have RD Web Access (unused by Windows Mobile but cannot be removed), no RD Gateway (not needed here), no RD Licensing (we will install that later), the RD Connection Broker, no RD Virtualization Host (as we do not provide virtual machines here) and a RD Session Host with a QuickSession Collection.

At this stage we can not connect using Windows Mobile client. The NLA setting dis-allows that and we get an error in Remote Desktop Mobile. Just change the NLA setting of the Collection and your Windows Mobile clients can connect.

rdm_cn70   rdm_ck3b

NOTE that there is no License server and we are in the 120-day trial of RDS!

RDS_Collections_EditProperties QuickSessionCollection_Properties

You can access the above Properties using the TASKS menu of Remote Desktop Services-Collections-CollectionName and selecting “Edit Properties”.

If there is no Collection, we can not change the setting! Windows Desktop PCs can connect to that RDS without a Collection installed. We (Windows Mobile client) need a collection to disable NLA.

Setup Remote Desktop License Server

Now setup a Remote Desktop License server, activate it (or better read my later note about the activation method: see “RD License Server Activation Connection Method”) and install some CALs or DALs (licenses per User or Device). Ensure the License Manager shows your License Server without any error. And also check with RD License Diagnoser!

RD_licensing_Manager RD_Licensing_Diagnoser

The licensing mode must match the general Collections properties setting:

Collection_DeploymentProperties

If everything is in place and activated and licensed Windows Mobile Clients can no longer connect!

rdm_security_error

The certificates generated by the License Server are not compatible with Remote Desktop Mobile. They use 4096 bit key-length and SHA256 footprint. The certificates are stored in the registry at [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM]. Extracted and converted these certs look like this:

Certificate:
     Data:
         Version: 3 (0x2)
         Serial Number:
             0b:1c:04:1c:9c:74:34:af:41:3a:3c:bf:39:f5:56:bf
     Signature Algorithm: sha256WithRSAEncryption
         Issuer: C=US, ST=Washington, L=Redmond, O=Microsoft Corporation, CN=Microsoft Assurance Designation Root 2011
         Validity
             Not Before: Mar 23 17:41:27 2011 GMT
             Not After : Mar 23 17:48:11 2036 GMT
         Subject: C=US, ST=Washington, L=Redmond, O=Microsoft Corporation, CN=Microsoft Assurance Designation Root 2011
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (4096 bit)
                 Modulus:
                     00:a8:ef:ce:ef:ec:12:8b:92:94:ed:cf:aa:a5:81:
                     8d:4f:a4:ad:4a:ec:a5:f0:da:a8:3d:b6:e5:61:01:
  ...
                     2b:a9:44:56:83:be:b6:6e:60:b9:16:1a:e1:62:e9:
                     54:9d:bf
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Key Usage: 
                 Digital Signature, Certificate Sign, CRL Sign
             X509v3 Basic Constraints: critical
                 CA:TRUE
             X509v3 Subject Key Identifier: 
                 1A:A9:53:45:33:8E:D0:6E:22:52:54:76:39:76:43:1E:FF:79:14:41
             1.3.6.1.4.1.311.21.1: 
                 ...
     Signature Algorithm: sha256WithRSAEncryption
          0b:2e:fa:54:de:11:a4:72:e4:13:1d:8b:bc:42:36:7c:fe:76:
 ...
          fa:be:02:5b:1a:c1:d9:58:66:c2:0c:b3:ce:e4:b4:ec:f4:eb:
          56:4f:9a:cc:cc:b2:a0:a4

RD License Server Activation Connection Method

To fix that and get compatible certificates re-activate the RD Licensing Server using the Web method. In RD Licensing Manager right-click the server name and select Properties. Change the Connection Method to “Web Browser”. Close Properties with OK and again right click the server and then Advanced-Reactivate. Follow the process to reactivate the server using the web browser.

RD_license_server_web_activation

After reactivation delete the following registry keys and reboot the server!

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM
 o Certificate
 o X509 Certificate
 o X509 Certificate ID
 o X509 Certificate2

These registry keys will rebuild with lower security after reboot (see also).

And, surprise, after reboot Remote Desktop Mobile (Windows CE5, Windows Mobile 6.x and Windows Embedded Handheld 6.5.3) can connect!

rdm_cn70_after_reactivation

If you extract and convert the new ‘web-based’ certificates you see the difference:

Certificate:
 Data:
 Version: 3 (0x2)
 Serial Number:
 01:9d:e7:ca:8c:9a:66:80
 Signature Algorithm: sha1WithRSA
 Issuer: L=\x00W\x002\x00K\x001\x002, CN=\x00W\x002\x00K\x001\x002\x00H\x00G\x00O
 Validity
 Not Before: Mar 10 14:50:50 1970 GMT
 Not After : Mar 10 14:50:50 2049 GMT
 Subject: L=\x00W\x002\x00K\x001\x002, CN=\x00W\x002\x00K\x001\x002\x00H\x00G\x00O
 Subject Public Key Info:
 Public Key Algorithm: rsaEncryption
 Public-Key: (2048 bit)
 Modulus:
 00:b6:7e:f2:41:23:f1:f3:cf:44:90:e7:fc:ba:3f:
 ...
 d0:51:d1:55:8c:6b:d0:f6:65:e5:c4:d2:09:1d:d0:
 17:c7
 Exponent: 65537 (0x10001)
 X509v3 extensions:
 X509v3 Basic Constraints:
 CA:TRUE, pathlen:0
 1.3.6.1.4.1.311.18.8:
 Q.G.K.8.V.3.W.2.K.H.P.D.6.W.4.V.M.Q.2.G.3.T.H.3.K.C.8.J.W.K.W.D.M.4.Y...
 Signature Algorithm: sha1WithRSA
 3a:1d:94:36:5d:32:12:6f:5e:e3:76:9f:cb:2b:1c:92:c2:ff:
 ...
 ac:1e:23:b2:a0:73:ff:6f:12:f8:86:24:4b:95:15:54:c0:a2:
 ba:05:00:e3

The key length is only 2048 bits and the security algorithm is SHA1.
If you had activated the “Web browser” Connection method before Activating the server the first time, you do not need to touch the registry and reactivate the server!

Conclusion

Windows Mobile’s Remote Desktop Mobile (RDM) application connects fine if the right certificates are generated when Activating the RD License Server. RDM will not connect, if SHA256 and 4096 bits key are used on the server. RDM does not support NLA nor SSL/TLS!

What MS says

RDS 2008, 2008R2, and 2012 will not allow connections from older RDP 5.x clients.

To get around this add the following registry key to the RDS Session Host

Subkey: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM
Registry entry: Use512LenPropCert
Data type: REG_DWORD
Value: 0 or 1

This is far less secure (512bit encryption vs 2048bit), and you won't be able to take advantage of the features of later versions of the RDP protocol, but older clients will be able to connect.

What wonders me about that, is that it says ‘no support of 2048 length key’, but the key length is 2048 in my validated tests. Possibly they mean, does not support 4096 key length but 2048 (which is set with the Use512LenPropCert?).

Test your installation

If you like to check the certificates of your installation you may use the attached demo application: “RDS2012_security”. It will just read the registry and show the certificates data.

RDS_Security_CertifcateDump_not_ok RDS_Security_CertifcateDump_ok

The code (included in the attachment) just reads the registry and extracts the certification data. The data is stored binary with some extra data at the beginning. There are twelve bytes to remove to get the raw certificate (all these certs start with 0×30 0×82). So the reg might look like this:

"X509 Certificate"=hex:02,00,00,00,04,00,00,00,f1,05,00,00,30,82,05,ed,30,82,\
  03,d5,a0,03,02,01,02,02,10,0b,1c,04,1c,9c,74,34,af,41,3a,3c,bf,39,f5,56,bf,\
  30,0d,06,09,2a,86,48,86,f7,0d,01,01,0b,05,00,30,81,88,31,0b,30,09,06,03,55,\
...

Then the tool has to remove the first 12 bytes and we get the raw data:

30,82,05,ed,30,82,\
  03,d5,a0,03,02,01,02,02,10,0b,1c,04,1c,9c,74,34,af,41,3a,3c,bf,39,f5,56,bf,\
  30,0d,06,09,2a,86,48,86,f7,0d,01,01,0b,05,00,30,81,88,31,0b,30,09,06,03,55,\
...

Here is the simple code that does this in csharp and then initializes a new X509Certificate2 object:

        const string rd_mainRegKey = @"SYSTEM\CurrentControlSet\Control\Terminal Server\RCM"
        string[] _x509ValueNames = new string[] { "X509 Certificate", "X509 Certificate2" };
...
        byte[] readX509Cert(string sValueName)
        {
            byte[] buf = null;
            using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(rd_mainRegKey, false))
            {
                byte[] bufTemp = (byte[]) rk.GetValue(sValueName);
                //remove first 12 bytes
                buf = new byte[bufTemp.Length - 0x0b];                
                Array.Copy(bufTemp, 0x0c, buf, 0, bufTemp.Length - 0x0c);
            }
            if(sValueName.EndsWith("2"))
                _x509Certificate2=new X509Certificate2(buf);
            else
                _x509Certificate = new X509Certificate2(buf);

            return buf;
        }

Now you can even save the cert or, like the demo does, just show the key length and used algorithm.

DOWNLOAD:rds_security - test the certs of an win 2012 RDS server. (Hits: 21, size: 43.74 kB)

 

rdesktopce builds done with LOW_RES ‘marker’

$
0
0

I have added two new build variants to rdesktopce_rdp5 (see also older article).

The normal builds make Windows Mobile ‘think’ the app is HI_RES_AWARE and so QVGA screens (see geometry setting in winrdesktop.ini) are NOT scaled to the larger screens of current devices:

with HI_RES_AWARE and geometry=240×320 on a WXGA screen:

ScreenShotFullscreenQVGA_on_WXGA_HIRES

If you have read my article “Remote Desktop Mobile on VGA devices: QVGA applications do not scale well” you know that Windows Mobile will scale the application output if the application is not HI_RES_AWARE.

with Subsystem version 4.20 and geometry=240×320 on a WXGA screen:

ScreenShotFullscreenQVGA_on_WXGA_LOWRES

The effect is simple, Windows Mobile will scale the application output, if the application uses a lower resolution like QVGA.

As rdesktopce_rdp5 does not use the HI_RES_AWARE resource, the only indicator for the awareness is the Subsystem version. This version number can be simply changed in the Linker Settings of the Visual Studio project. Right click on the project in Solution Explorer of Visual Studio, then look at Properties>Configuration Properties>Linker>Command Line. Replace the Additional Options entry ‘/subsystem:windowsce,5.01’ by ‘/subsystem:windowsce,4.20’ and save that change. Now do a build and you get an application exe with Subsystem version number 4.20.

Note: if the geometry setting is larger than the lowres QVGA resolution (240×320), then you get only a small part. Example: device screen resolution is 480×800, geometry is ‘geometry=480×640’, then you will only a QVGA view of the terminal server screen (left image). The right image shows what you get with the HI_RES_AWARE rdesktopce_rdp5 version on the same device:

ScreenShotFullscreenVGA_on_WXGA_LOWRES ScreenShotFullscreenVGA_on_WXGA_HIRES

I have added two build variants for these LOW_RES builds, so one can simply build a HI_RES_AWARE or a lowres exe file.

Latest source code and binaries at github (lowres release binary, hires release binary)

Mobile Development: Subclass foreign Window using injectDLL

$
0
0

Recently we needed to show and hide the SIP (Software Input Panel) inside a full screen Remote Desktop Mobile session.

The first challenge is to control the SIP without having a menu bar with the SIP symbol inside. To get this working you can assign a hardware keyboard button, it must be an App button, to show the SIP. See Settings>Personal>Buttons and assign “<Input Panel>” to the hardware key.

app_button_to_input_panel RDM_fullscreen_option RDM_fullscreen RDM_fullscreen_with_SIP

Unfortunately the SIP will be hidden immediately after being shown if RDM is started with Full Screen option.

To overcome this I looked at the Windows Messages inside the RDM window tree and found that there is a Windows Message WM_WININICHANGE send to the main RDM window every time the SIP is shown. Inside the UIMainClass window the SIP show will result in some more messages, Now, if we can suppress the WM_WININICHANGE message, the SIP may stay until hidden manually, hopefully.

tsshellwnd_on_sip_show  UIMainClass_on_SIP_show

But how can one hook in a foreign Message Pump (WndProc)? Fortunately there is a general option provided by Windows CE / Mobile to inject one or more DLLs into every started process. Simply add your DLL to the registry key HKLM\System\Kernel\InjectDLL. The type of InjectDLL is REG_MULTISZ.

Now the DLL that I wrote compares the Module File Name of the process that is calling DLL_ATTACH with the Module File Name of RDM, which is “\Windows\wpctsc.exe” on Windows Mobile/Embedded Handheld. If the Module File Name matches, the code looks for the Windows Class “TSSHELLWND”. If this is found, the RDM window has been loaded and initialized. Now the DLL code looks for the child window with class “UIMainClass”. This window marks a remote session has been started. If found, the code uses SetWindowLong and hooks a custom WndProc into the main RDM window. This custom WndProc simply looks for the Window Message that hides the SIP and just returns a TRUE, as if the message has been processed. The other window messages are forwarded unchanged to the original WndProc. The message we filter is WM_WININICHANGE with lParam==133071496.

Remember that ‘subclassing’ a window is only possible from inside the process that created the window. But using InjectDLL the DLL code is part of the RDM process (and all others) and you can subclass the ‘foreign’ window.

RDM_fullscreen_with_SIP

The only ‘disadvantage’ here is the position of the SIP. As there is no menu bar, the SIP is floating above the lower border. But there are custom SIPs you can move around, if this is a no-go for you.

The demo RDMinjectDLL.dll has to be copied to \Windows and then you need to edit the registry of the device:

REGEDIT4
[HKEY_LOCAL_MACHINE\System\Kernel]
"InjectDLL"=hex(7):\
 5C,57,69,6E,64,6F,77,73,5C,52,44,4D,69,6E,6A,65,63,74,44,6C,6C,2E,64,6C,\
 6C,00

The hex codes are nothing else than the string “\Windows\RDMinjectDLL.dll” (without quotes). After changing the registry, the device needs to be rebooted.

During development I had to remove the reg entry, reboot, deploy a new version, change the reg back and reboot again to test the new version.

Download DLL and .reg file: DOWNLOAD:RDMinjectDLL - (Hits: 178, size: 5.62 kB)


Windows 2012 R2 Terminal Service does not render Desktop if resolution width less than 600

$
0
0

Recently I had to realize that w2k12 only shows an empty background when connecting to a new Terminal Service session and the requested resolution is 240×320, 480×640 or 480×800. These reolutions are used by Remote Desktop Mobille if you select the option “Fit remote desktop to screen”.

After login, the Start screen (Metro-Ui) is shown, regardless of having set TS to start new sessions always in Desktop mode. If you then start a desktop application or simply the “Control Panel” or “My Computer”, which are Desktop apps both, the screen changes to show an empty (Start screen) background only.

rdm_fullscreen

The apps are started on the desktop, but the desktop will not be shown by TS!

If you first start the session with a supported resolution, let’s say 800×600 or even 600×800, and then just disconnect the session (do not logout) and reconnect to the existing session with an unsupported resolution, the Desktop and running apps will be shown normally.

rdm_landscape_00 rdm_landscape_01

This is not an issue with Remote Desktop Mobile only. If you try this with a Windows 7 or Windows 8 TS client, the desktop will not be rendered by TS if the session has been started with an unsupported resolution. The resolution must be changed manually in a saved rdp file, as these clients only support resolutions down to 800×600. Then use the saved rdp file to start a new session.

screen mode id:i:1
use multimon:i:0
desktopwidth:i:480
desktopheight:i:800

Result trying to start “Control Panel”:

win7_480x800 win7_480x800_01

If you test Remote Desktop on a Windows Phone 8 device, for example, you will not be able to change the resolution. The Terminal Server uses the default resolution (1024×768) and the windows phone screen is always shown in landscape view.

Seems to be a bug in TS. Especially as if starting the session with a supported res. and then reconnecting with an unsupported res. the TS will render correctly. It will only not render the desktop, if the session is started with an unsupported res.

Mobile Development – Start apps with another using injectDLL

$
0
0

I already posted one article about using injectDLL, one about subclassing a foreign window. This time injectDLL is used to start and stop an application when another app is started. Remember that every DLL listed inside the MULTI_SZ registry key HKLM\System\Kernel\injectDLL is loaded into every process.

I would like to add some battery and wifi indicator to a full screen Remote Desktop Mobile (RDM) session. There are two specialized applications that display a small bar graph on the right of the screen, one for the battery level and one for the WiFi RSSI.

tsshellwnd_normal_with_wifi_and_batt_monitor_bars

The upper right one is for the WLAN RSSI and the lower bar shows the battery charge level.

As these apps should only add there display when RDM ist started, I added them to an injectDLL.

The injectDLL is loaded into every process that is started on the Windows Mobile device. Inside the DLLMain function, that every DLL has to implement, the code checks if the loading process is “\windows\wpctsc.exe”:

BOOL APIENTRY DllMain( HANDLE hModule, 
 DWORD ul_reason_for_call, 
 LPVOID lpReserved
 )
{
 if (ul_reason_for_call == DLL_PROCESS_ATTACH)
 {
 // Disable the DLL_THREAD_ATTACH and DLL_THREAD_DETACH notification calls
 DisableThreadLibraryCalls ((HMODULE)hModule);

 TCHAR szModuleFileName[MAX_PATH+1] = {0};
 TCHAR szRecord[MAX_PATH] = {0};
 if ((GetModuleFileName(NULL, szModuleFileName, MAX_PATH)) == NULL){
   wsprintf(szRecord, L"GetModuleFileName failed!");
   WriteRecordToTextFile(szRecord);
   return TRUE;
 }

 if (_wcsicmp(szModuleFileName, MODULE_FILENAME) != 0){
   wsprintf(szRecord, L"Compare ModuleFileName failed: %s", szModuleFileName);
   WriteRecordToTextFile(szRecord);
   return TRUE;
 }
...
 if ((hThread = CreateThread(NULL, 0, WaitForProcessToBeUpAndReadyThread, 0, 0, NULL)) == NULL)

MODULE_FILENAME holds the full name of the process we want to use. The above code simply returns without further action if the loader does not match the process we are looking for. If the process matches, the code creates a thread that will do the further processing. This avoids that the further actions block the watched process from being blocked or slow down.

The created thread just waits for the windows being ‘visible’ to the system and then starts the external processes:

  while ((hWndRDM = FindWindow(L"TSSHELLWND", NULL)) == NULL)
  {
...
  do{
    hChildWin=FindChildWindowByParent(hWndRDM, L"UIMainClass");
  }while(hChildWin==NULL);
...
  if(runProcess(L"\\Windows\\RdmAddonBatt2.exe", L"")==0)
    DEBUGMSG(1, (L"\\Windows\\RdmAddonBatt2.exe started\n"));
  else
    DEBUGMSG(1, (L"\\Windows\\RdmAddonBatt2.exe not started?"));
  if(runProcess(L"\\Windows\\RdmAddonWiFi.exe", L"")==0)
    DEBUGMSG(1, (L"\\Windows\\RdmAddonWiFi.exe started\n"));
  else
    DEBUGMSG(1, (L"\\Windows\\RdmAddonWiFi.exe not started?"));
...

In the above code the external processes are hard coded, but it would be easy to use the registry or a configuration file to replace the hard coded file names.

There are much more useful scenarios for using injectDLL.

Code at Github: RdmInject, RdmAddonBatt2, RdmAddonWiFi

 

rdesktopce issues

$
0
0

If rdesktopce has issues to connect to a Remote Desktop Server keep in mind that is only supported up to Windows Server 2008. Depending on your settings and the installed or not installed updates, rdesktopce may not be able to connect. I cannot fix this!

If rdesktopce connects to a Windows 2008 R2 server and shows only a desktop with blue background, try the following setting in Remote Desktop Session Host configuration:

Change “Security Layer:” to “Negotiate”

The same setting prevents rdesktopce to connect to a Windows 2012 R2 Server! Currently no solution for this issue.

Viewing all 18 articles
Browse latest View live