Writing this post made me nostalgic for my own desktop management software so I ran it up just to remember how well/badly it worked.
Part of the functionality of my tool is that when it is first run up, it enumerates desktops to find out “What’s out there”.
Why does it do that? Well, it goes like this.
- You log in to Windows.
- You run my application. It offers you the possibility of creating a new desktop.
- You create a new desktop. My application switches you over to that new desktop.
- By default, my application wouldn’t be running on that new desktop so you’re now a bit “lost” ( you could start it manually ) so what my application does is to start itself on any new desktops that it creates so that “when you arrive on that desktop” it’s already there offering you the chance to switch back to the desktop you just came from.
- In order to be able to “switch back”, my application needs to know what desktops are already out there so it enumerates them when it first runs up ( it assumes that it created them as it’s pretty rare to create desktops ).
Perhaps that’s a longer explanation than was needed. Regardless, coming back to that “it’s pretty rare to create desktops” I was a bit surprised when I ran my app that by default on my machine I see;
What’s this ChromeRendererDesktop then? Presumably this is Google’s Chrome browser but I’m wondering what the heck it needs another desktop for just to draw some HTML.
I logged out to get rid of this extra desktop, spun up WinDbg and loaded Chrome.exe into it ( strangely, Chrome.exe seems to just be a .exe file and is living in my \users\appdata\local\Google folder ).
I pointed windbg at our public symbol server ( http://msdl.microsoft.com/downloads/symbols ) and set a breakpoint in USER32!CreateDesktopEx and ran Chrome.exe
0:000> bp USER32!CreateDesktopExW
0:000> bp USER32!CreateDesktopExA
0:000> bp USER32!CreateDesktopW
0:000> bp USER32!CreateDesktopA
and, sure enough, I see Chrome.exe calling CreateDesktopW. I can’t get much out of the stack trace because I’ve no symbols for Chrome. I wonder if Google has a public symbol server?
Anyway, I wasn’t really expecting that a browser would create a second desktop so I think I’ll return to IE and FireFox.
I also notice that I’m running some GoogleUpdate.exe process that I don’t remember agreeing to but it’s been added to my startup programs ( type “SYSTEM” into your start menu on Vista ) so I’ve killed that off and uninstalled Chrome – too much stuff going on in there that I don’t understand so I figure it’s better to duck out of it altogether.
Update: There’s an explanation of the architecture of Chrome up here;
http://dev.chromium.org/developers/design-documents/multi-process-architecture
which explains that the renderer is separated across a process boundary from the browser itself and it’s moved to a separate desktop in order to avoid the renderer trying to interfere with the user’s real desktop.