The Longhorn Start page is a feature present in Milestone 3 and early Milestone 4 builds. The start page appears to be an early attempt at replacing the OOBE (Out-Of-Box Experience) that these builds carry over from Windows XP.
Structure
The code relating to the start page is split across two shell libraries. The bulk of the code is in Microsoft.Windows.Client.dll
. The code in here is self-contained with no external dependencies, and covers the Avalon UI and its supporting code and the code required to load the data for it. This library is written in C#, with some code automatically generated by the Avalon Compiler, such as the CAML (XAML compiled to MSIL).
The second library is ShellInterop.dll
. This is a relatively small amount of code that provides the integration into the shell. This code is written in Managed C++, and loads the code from the client library into a traditional Win32 environment and exposes it as a COM component for external Win32 applications (such as explorer.exe) to consume.
Builds
Build 3683
The start page in this build is little more than a placeholder, with no code to load tasks or UI beyond a few panels with only a background colour and some text.
It’s interesting to note that in this build, Microsoft.Windows.Client.dll
contains both XAML and CAML versions of the start page, which differ slightly. The CAML version has an additional white text block (PromotionsTilePlaceHolder
) inside the panel (PromotionsTile
) at the top, which then contains the text “Promotions”. The CAML version of the page is not used however, ShellInterop.dll
explicitly only loads the XAML resource and the CAML version is ignored entirely.
The XAML version has no content within the PromotionsTile
panel, but the code in ShellInterop.dll
loads a PromotionsTile
class. This class inherits an abstract BaseTile
and implements an IModuleView
interface clearly based on, though separate to the identically-named sidebar class and interface. The interface is slimmed down compared to the sidebar though, removing items like support for multiple views.
We can assume that at this point, “Email”, “Calendar” and “Quicklaunch” were also planned to have their own tiles as well, though these are not present in this build. This would allow them to have several self-contained blocks, probably configurable by the OEM.
Build 3706
In build 3706, the start page is much more complete. The different tiles have been removed with the exception of the promotion tile, which now constitutes the entire functional part of the start page.
In the upper corners, there are buttons, probably for debugging purposes. The “Go” button (re-)loads the application and starts an animation. The X button will close the application.
In the centre, there is the PromotionsTile
, which now displays a list of tasks read from an XML file, whose path is hardcoded to \\shelltest\scratch\ewad\oobe.xml
. Each task gives the option to “do” the task, or “skip” it. Both options will mark the task as “done”, though doing the task will execute the action. At this point, the task execution is simply hardcoded to launch notepad.exe
.
The status of the tasks is tracked in the registry, under the key HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TaskPromotions\OOBE
.
Builds 3713 - 4005
In later builds (3713 through 4005), the start page lacks the “debug buttons” in the upper corners. Both the animation and the data are now automatically loaded on start. The current user’s wallpaper fades in as part of the animation. The glassy border is gone and now replaced with an opaque, plex themed border. The page also now includes the user’s avatar.
Launching the start page
For a long time the start page was considered “inaccessible” because every trace of a launcher was missing and only one screenshot of the start page in action was available.
Stanimir Stoyanov’s Launcher
Melcher was able to contact the original creator of both the launcher and screenshot: Stanimir Stoyanov. Stanimir wrote this launcher back in 2006 and now is finally publicly available. The launcher is written in C++ and creates a COM object registered as CShellStartPage
by ShellInterop.dll
.
Lucas Brooks later produced a re-compilable decompiled version of the binary and shared the source on GitHub. This was primarily done with to of remove the tempermental file hook that intercepted when the oobe.xml
file was read.
Experience Longhorn Launcher
Building on the work above, Thomas Hounsell has written a new launcher with the intention of providing an alternative with documented, clearly-readable code. This was built using Visual Studio .NET (2002), using native C++.
oobe.xml
From the code within Microsoft.Windows.Client.dll
in 3706 and later, we can reverse-engineer the format that should be used for the XML file that lists the tasks:
<root>
<promotion>
<UID>12345</UID>
<priority>1</priority>
<display_message>This is a sample task.</display_message>
<help_message>none</help_message>
<category>test</category>
<displayed>not used</displayed>
<created>01-01-2000</created>
<expires>01-01-2050</expires>
<requirements>
<applications>NONE</applications>
<hardware>NONE</hardware>
<network>NONE</network>
</requirements>
</promotion>
</root>
Lucas Brooks wrote a more realistic sample oobe.xml file that you can use yourself, downloadable here.
For an unknown reason, the first promotion item is not added to the list presented to the user. As such, you should include an empty promotion item in your file.
Build 3706 is completely unable to start when more than one <promotion>
element is present in the file.
If you want to use the oobe.xml file yourself, you will need to set the computer name to shelltest (reboot required) and create the required directories (scratch/ewad) and oobe.xml file. Now just share the scratch folder. Try browsing to \\shelltest\scratch\ewad\
. If the address is resolved correctly you are all set!
If you change the oobe.xml file to remove already existing tasks, you must clear down the registry key that tracks status first before running the launcher again.
The Welcome Center
It seem the start page made its way into Vista as the Welcome Center. The Welcome Center in Vista has exactly the same purpose as the start page; getting the user started on the system with various promotions and offers.
Special thanks to Stanimir for sharing his launcher and helping to recreate oobe.xml