For any computer guru with a monitor (or multiple monitors for that matter) that displays a resolution greater than 1600 x 1200 knows that the Windows XP/2003 RDP client has a hard coded limitation of 1600 x 1200. No amount of registry hacking, command line switches, or ini modifying can fix this limitation.
A few weeks a go a personal challenge was extended to me to reverse engineer Microsoft's RDP protocol and enable resolutions of 4096 x 2048 to match the new Vista RDP Client. For anyone who knows me you know that I love a personal challenge, especially a technical one. So the adventure began. First I had to determine whether the limitation was in the protocol itself or just the client implementation. So I copied over the Windows Vista RDP client in hopes that it would work on Windows XP. I was pleasantly surprised to find that indeed it did work on XP and furthermore, it supported resolutions of 4096 x 2048. After establishing the fact that the limitation was in the client itself and not the protocol I was able to narrow down the files limiting the resolution: mstsc.exe and mstscax.dll.
The next step was to determine what and how I needed to modify one or both of those files to enhance the resolution. First I busted out one of my favorite Hex Editors in hopes a quick edit would resolve my little dilema, no dice. I would have to dig deeper. With the help of IDA Pro, Ollydbg and APIMonitor I was able to narrow it down to a few different calls to functions that used the Win32 API to call the GetSystemMetrics funciton. I found that the GetSystemMetrics was returning the correct max resolution, but the functions calling it were modifying the return values if they were above 1600 and 1200. So essentially what I did was modify a handful of functions and swap out the hex value 0x640 with 0x1000 and 0x4b0 with 0x800 and I had a XP RDP client running at 4096 x 2048.
I have attached a copy of both the original and the modified XP RDP client.
**Update**
Microsoft just released their RDP 6.0 client for Windows XP/2003 which supports resolutions of 4096x2048.
Downloads:
Original Windows XP RDP Client
Resolution Enhanced XP RDP Client
Friday, November 24, 2006
Tuesday, November 07, 2006
Mobile Me - Applications Anywhere

Being a geek on the run I often find myself wishing that I had my laptop with me, or that a public access computer had application X or Y on it. Well, I have found my solution. U3 enabled USB thumbdrives. U3 is a new technology that allows you to use applications that do not modify the registry or files on the local computer. For example, I can run FireFox from my U3 thumbdrive and not worry about the cached files from the websites I visit remaining on the host computer (very valuable if you are visiting sensitive websites such as bank sites or corporate email).
When you pop your U3 compatible drive it it asks you for a password (which you can disable) and then loads an icon in the system tray that works like a second Windows "Start" button.
Unfortunatley not all applications are U3 compliant. But with a little tweaking you can make most applications work just fine. Here is a list of applications that I have either hacked to be U3 compliant (and don't worry I own licenses for all of them) or that have U3 compliant versions: Firefox, Yahoo Widgets, Putty, Mozilla Thunderbird, OpenOffice.Org, Avast Antivirus, Winrar, Photoshop CS, Illustrator CS, Flash Professional 8, Dreamweaver 8, Ethereal, Audacity, Winamp, Nero 7, Gimp, and quite a few more. So now I have the abillity to sit down at any computer and run these applications from my thumbdrive. Yes, there is a little performance loss because I am running from a USB drive, but it's not to bad.
The best news, you can get a 1GB U3 compatible drive for $35 or $20 after $15 mail-in rebate. You can see a list of available applications at U3.com. Here is a full list of U3 compliant drives.
For those who already have a thumdrive and don't want to purchase a U3 compliant drive, check out PortableApps.com for applications you can run from your thumbdrive.
Sunday, November 05, 2006
TradeStation on Windows Vista

For anyone trying to get TradeStation to install on Windows Vista here is how I did it. First I downloaded the TradeStation software on a Windows XP computer. Then I copied the install file to my thumbdrive (you can use a CD, DVD, Network, etc) and transfered it to my Vista computer. When I tried installing it I got a message telling me that it could not install on this computer and to install in on the computer that TradeStation was downloaded to. After about 10 minutes of poking around I figured out how to "Authorize" my Vista computer to install TradeStation. I wrote a little application to assist anyone else who would like to install TradeStation on Windows Vista.
Monday, October 30, 2006
A Geeks Halloween
It's that time of year again, monsters and witches, people pretending to be something they're not. No I'm not talking about election season, I'm talking about Halloween.We carved pumpkins for family home evening tonight. I figured I would put a little geek spin on it. My daugter got a good laugh out of it.
I call him number 011. He has built in wifi, bluetooth, a CDRW/DVDRW, an RJ45 jack and is Windows Vista ready.

Monday, October 16, 2006
pList - Process management for the command line
Here is a little application I wrote to manage processes from the command line (Kind of Task Manager for the command line). Anyone who has used Linux/Unix or OS X (I guess that would fall under the Unix category) knows how easy it is to list and kill processes from the command line. A while back -- when I was using OS X on a frequent basis -- it was driving me nuts not having the "ps" and "kill" command in Windows, so I wrote this little app to remedy my frustrations.
Here is a brief overview of it's functionality. It is basic and pretty straight forward, but I will add functionaliy as I need it.
c:\>plist /?
c:\>
So if I want to list all processes that start with s I would type:
c:\>plist -l s
c:\>
Now if I wanted to kill sqlwriter I could do it one of two ways:
c:\>plist 1732
or
c:\>plist sqlwriter
Depending on which way I write it, the following will be returned
Process 1732 has been terminated.
or
Process sqlserver has been terminated.
Now, you may have to processes with the same name running (i.e. cmd.exe, svhosts, etc). If you specify a name (sqlwriter from the example above) it will kill all processes with that name. For example, open for or five command prompt windows (cmd.exe) and then type:
c:\>plist cmd
pList will kill all of the cmd processes (including the one you used to run the command).
Anyway, a useful little tool. I will add some more wild card features and probably remoting so you can manage processes on another computer on your local network. If anyone has any suggestions for ideas just let me know.
pList.exe pList_src.zip
* You will need the .Net Framework 2.0 to run this app
Here is a brief overview of it's functionality. It is basic and pretty straight forward, but I will add functionaliy as I need it.
c:\>plist /?
Usage:
List Running Processes: pList.exe
Kill Running processes: pList.exe [PID 1] [PID 2]...
Kill Running processes: pList.exe [Process Name 1] [Process Name 2]...
List Running processes that start with specified parameter:
pList.exe -l [Process Name 1] [Process Name 2]...c:\>
So if I want to list all processes that start with s I would type:
c:\>plist -l s
Process Name PID Mem(KB) Virtual Mem(KB)
------------ --- ------- ---------------
sqlwriter 1732 232 20,336
sqlservr 1232 21,532 1,131,828
spoolsv 604 3,116 49,412
------------ --- ------- ---------------
Process Name PID Mem(KB) Virtual Mem(KB)c:\>
Now if I wanted to kill sqlwriter I could do it one of two ways:
c:\>plist 1732
or
c:\>plist sqlwriter
Depending on which way I write it, the following will be returned
Process 1732 has been terminated.
or
Process sqlserver has been terminated.
Now, you may have to processes with the same name running (i.e. cmd.exe, svhosts, etc). If you specify a name (sqlwriter from the example above) it will kill all processes with that name. For example, open for or five command prompt windows (cmd.exe) and then type:
c:\>plist cmd
pList will kill all of the cmd processes (including the one you used to run the command).
Anyway, a useful little tool. I will add some more wild card features and probably remoting so you can manage processes on another computer on your local network. If anyone has any suggestions for ideas just let me know.
pList.exe pList_src.zip
* You will need the .Net Framework 2.0 to run this app
Tuesday, October 10, 2006
Vista RC2 is here!
Wahooo! The last release of Vista before the RTM (release to manufacturer) release. I just updated my Macbook Pro from Vista RC1 to Vista RC2 and all went well. I know everybody has been bagging on Vista, but I'm quite impressed with it. I would definatley say that this is there most significant upgrade since the upgrade from Windows 98 to Windows ME... no, just kidding (actually, I don't think that was even an upgrade, I think they just popped out the Win98 CD's and put them in WinME boxes). I do believe that this is the most significant upgrade since the Windows 3.1 to Windows 95. Oh, I've got to go, but I will get back to everyone bagging on Microsoft and how that bandwagon is filling up.
Saturday, October 07, 2006
Box.Net - 1GB Online Storage for Free!

I don't have any vested interest in them except that I am a user, but Box.Net freakin rocks! For those of you have not heard, they provide online storage aimed towards end users that would like to easily share pictures, audio, video, and any other type of file you would like to store or share. They have a great interface for uploading and sharing your file. They offer 1GB of storage free or you can sign up for a premium account, $5 a month for 5GB or 15GB for $9.99 a month. Anyway, very cool service definatley worth checking out if you ever need online storage. The service works on all platforms (Windows, Linux, OS X), and for Windows users they have a "Desktop Sync" tool.
They also have an XML based API for developers who would like to add Box.Net capabilities to their software. Currently I am working on two projects that will utilize this API. The first is a C# wrapper for their XML API to make it nearly effortless when adding Box.Net capabilities to any software written in Dot Net. The second is an Outlook Addin. The addin is targeted towards those who want to email a large attachments to a friend or colegue but they don't accept large emails or you cannot send them. The addin will provide a "Add Box.Net Attachment" button that will automaticlly upload their file to Box.Net and insert a link into the email you are sending. You will have the ability to zip and password protect the file, require a password for someone to download the file, or just directly download the file. I'm pretty excited about this and it should be pretty cool.
One more thing, Box.Net also provides Box.Net Lite which is a quick file sharing tool for those who don't want to sign up for an account. It just asks for the file you want to share and an name and that is it. You upload your file and your done. They provide you with the url, and html if you want to insert a link to the file.

share your files at box.net
Subscribe to:
Posts (Atom)