C# Process Injection
Date: 12.05.11 - 1:16am
Todays task brought me to working on vc6 process injection dll along with a VB6 UI to receive the WM_COPYDATA output. I had all the VB6 code already from SysAnalyzer, but as I looked at the dependencies this small UI project required I couldnt help but wonder if C# could do it cleaner.
In VB6 I would have been including my subclass dll, vbdevkit for WinApi Md5 hashing, RICHTX32.OCX and mscomctl.ocx.
Thats a lot of shit for a small UI and it means if I wanted anyone else to be able to run it, I would need to include all of these files along with a bat script to register them (or an installer). All in all it would have been like an extra 3mb of dependencies for a 20k UI!
After some quick googling to see if C# can support subclassing and WM_COPYDATA it was on. C# had native support for everything I needed from the subclass, to the hashing, to prebuilt support for common dialong, rich text box control, listviews and tab controls. Final exe size was 19k and only needed the runtime. Also the code was a lot smaller without having to include my own common dialog class etc.
It pains me to say it, but C# was a better choice for this app than VB6. I also like that C# is not limited as to staying in the "safe" sandbox like Java apps are. While all the managed types can be a bit of a pita when you just want to access raw data and convert it around,the massive amount of built in functionality is pretty attractive.
I am also going to say that I am glad I wait until now to start working my way into C#. There is now a huge codebase available for C# along with web answers and examples to everything I can think of which makes learning it a breeze. I am not an early adopter of new technologies exactly for that reason.
Also I have to admit I was very pleased to see how easy subclassing was. When I first saw the code, I couldnt believe that was it. In vb6 land subclassing can be a very shitty experience necessitating you include a module, and call back, and leads to IDE instability while developing if you do anything wrong or even break at the wrong time.