Modernizing the original Microsoft Surface

I was recently lucky enough to receive an original Microsoft Surface through one of our great MVPs in the Netherlands, Dennis Vroegop. If you’re wondering what the fuss is about, I’m not talking about the Microsoft Surface Tablets, but the original device which was called Microsoft Surface: a 30-inch tabletop device, originally released in 2008. I was lucky enough to have worked with quite a few customers in The Netherlands between 2008 and 2010, creating solutions for Microsoft Surface in many verticals, including retail and finance. As you can imagine, I was pretty excited to get a $10,000 (original retail value) device at home and immediately replaced my coffee table in the living room with it.

Being released in 2008, the original Microsoft Surface runs on Windows Vista, which is somewhat outdated right now. After reading Joshua Blake’s blog post dating back to September 2011 on how he managed to run the Windows 8 Developer Preview on the original Microsoft Surface, I decided I’d take on the challenge of putting Windows 8.1 onto it. This blog post details the steps I’ve taken to get everything up and running, hopefully providing enough insight into what’s needed to accomplish this yourself as well.

Windows 8.1 running on the original Microsoft Surface

Creating some space

Similar to what Joshua did, I did not want to get rid of the original Operating System running on the device (especially since I didn’t know whether this whole endeavor was going to work out). Installing Windows 8.1 side by side next to the Windows Vista installation requires shrinking the volume to create some space for the Windows 8.1 installation. To do so, click on Start, right-click on Computer and select Manage. On the left side of the Computer Management console, click on Disk Management under Storage to view your existing disk configuration. You should see your C drive taking up most of the space, with some space assigned to the recovery partition of the Microsoft Surface unit. Right-clicking on the C partition and selecting Shrink Volume will cue the calculation of free space that can be removed from the partition to create a new one for the Windows 8.1 installation.

Note that if you have extensively used the device before, you may not be able to shrink enough space to install Windows 8.1. I’ve chosen to assign 80GB to the Windows 8.1 partition, so I would have enough room for apps and games, but you may choose less (I advise at least 50GB). If you can’t clear enough space, try defragmenting your disk before trying to shrink the partition, as defragmenting should clean up your disk by moving all the data to the beginning of the disk, leaving more room to clear at the end. Once you’ve shrunk the partition, you can leave the unallocated space as is, as the Windows 8.1 installation will create a partition for us in that space.

Installing Windows 8.1

Now that we have the space we need to install Windows 8.1, we can commence doing so. It’s really up to you as to how you want to install Windows 8.1, but I recommend creating a bootable USB drive through Rufus, as it’s the fastest way I know to create one. Also, make sure you install 32-bit Windows 8.1, as it’s going to make our life easier in the long run and there’s no real point in installing 64-bit on this hardware. Now, the tricky thing here is that you will need to modify the boot order in the BIOS to be able to successfully boot from the USB drive. By default, the Surface has a BIOS password on it, which I can’t share here for obvious reasons. If you’ve never obtained it before, contact the Business Desk for assistance. Once you’ve changed the boot order in the BIOS, go ahead and plug in the USB disk and commence the Windows 8.1 installation to the unallocated space on the disk.

After installing Windows 8.1 install Microsoft XNA Framework Redistributable 3.1 and turn on the .NET Framework 3.5 (includes .NET 2.0 and 3.0) feature.

Getting the Surface Shell and applications up and running again

Once you have Windows 8.1 all installed and configured, it’s time to get the Surface Shell and applications back up and running. Luckily, we have kept the Windows Vista partition intact, which allows us to access the SurfaceRuntime.exe installer in the D:\SurfaceInstallers folder (assuming D is your Windows Vista partition now). The problem here is that the installer has verification in place that prevent installation on anything other than Windows Vista with .NET 3.5 installed. Luckily, we can reuse the instructions described in Brian Peek’s blog, which was initially written to install the Surface 1.0 SP1 SDK on x64 machines. Here’s what you need to do:

  1. Copy the SurfaceRuntime.exe file from your Vista partition over to a new folder
  2. Open up a Command prompt as Administrator and extract the contents of the executable to a new folder, e.g.:
    C:\SurfaceInstallers>SurfaceRuntime.exe /extract C:\SurfaceInstallers\SurfaceRuntime
  3. Next, extract the individual files from the MSI that was extracted from the executable, e.g.:
    C:\SurfaceInstallers\SurfaceRuntime>msiexec /a SurfaceRuntime.msi /qb TARGETDIR=C:\SurfaceInstallers\SurfaceRuntime\Extracted
  4. For the next part, you will need to install the Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1, the only thing you will need is the .NET Development Tools under Developer Tools -> Windows Development Tools
  5. Once installed, go to the installed folder of the SDK (C:\Program Files\Microsoft SDKs\Windows\V7.0\bin) and install Orca.Msi
  6. Start Orca and open up the SurfaceRuntime.msi file from the Extracted directory (make sure you don’t open the one above that) and drop the following rows from the LaunchCondition table: Installed OR (VersionNT=600 AND ServicePackLevel>=1) and Installed OR VISTASKU=”Business” OR VISTASKU=”Ultimate” OR VISTASKU=”Enterprise”. Make sure you press Save and close Orca
    Removing the launch conditions from the Surface 1.0 Runtime installer
  7. Now proceed with the installation of the MSI you have just altered to install the Surface Runtime files

Last, but not least, we need to either recalibrate the Surface 1.0 unit or, if you don’t have that magnificent calibration board (anymore), copy over the calibration data from our Windows Vista installation:

  1. Reboot the machine and select the Windows Vista installation from the boot loader.
  2. Log on the Microsoft Surface unit as an administrator.
  3. Open the %ProgramData% folder, and then copy all *.DAT and *.HSH files to a removable USB flash drive.
  4. Click Start, enter regedit, and then press ENTER.
  5. In the left pane, expand HKEY_LOCAL_MACHINE, expand SOFTWARE, expand Microsoft, expand Surface, expand v1.0, right-click Calibration, and then click Export.
  6. Give the file a name, and then export it to the removable USB flash drive.
  7. Reboot back into the Windows 8.1 installation and copy the *.DAT and *.HSH files to the %ProgramData% folder and import the registry file you have created.

If all is well, you should now be able to run Surface Input and Surface Shell consecutively and should have a working Surface Shell and can start installing the Surface applications again.

Getting touch interaction across Windows 8.1 up and running

(Part of) the reason of this journey is to take advantage of all the great apps and games Windows 8.1 has to offer, but it won’t do us any good as it stands, as touch interaction through the Surface 1.0’s hardware isn’t working out of the box. Luckily, there’s a project on Codeplex called Multi-Touch Vista, which will enable this functionality when installed. So, the easiest way to get this working (in my opinion) is to have Visual Studio 2008 installed on either the Windows Vista partition of the Surface 1.0 unit or, similar to what I did, have a Virtual Machine with Windows Vista and Visual Studio 2008 installed available. The reason I chose to use a virtual machine is because I didn’t want to install Visual Studio 2008 on my Windows Vista partition (for no obvious reason) and I had already created the virtual machine previously to do Surface 1.0 development (forgetting that te Surface Simulator doesn’t work in a Virtual Machine, which I remembered the hard way).

So here’s what we need to do:

  1. Make sure you have the Windows SDK installed on the machine you will use to compile Multi-Touch Vista, along with the XNA Framework Redistributable 3.1
  2. Get the latest source for Multi-Touch Vista and unpack the ZIP
  3. Open Multitouch.Framework.sln, switch to Release mode and build the solution (uncheck the Multitouch.Framework.WPF.Tests project in the Configuration Manager if you’re using Visual C# Express)
  4. Open Multitouch.Driver.sln, switch to Release mode and build the solution
  5. Open Multitouch.Service.sln, switch to Release mode, open the Multitouch.Service.Console project Properties and change the Output path on the Build tab to ..\Output\ and build the solution
  6. Open Multitouch.InputProviders.sln, switch to Release mode, make sure the SurfaceInputProvider project is checked and the TouchLibProvider project is unchecked and build the solution
  7. Open Multitouch.Configuration.sln, switch to Release mode and build the solution
  8. Now that we’ve built all the projects, ZIP up the Output and Multitouch.Driver\Multitouch.Driver\x32 folders and extract on your Windows 8.1 installation on the Surface 1.0 unit
  9. Open up a command prompt as an Administrator, navigate to the driver directory and run Install driver.cmd
  10. Run the Multitouch.Service.Console.exe executable from the Output folder and open up the Multitouch.Configuration.WPF.exe application
  11. Select Microsoft Surface under Available devices and click on the blue arrow in the middle of the screen to activate the Surface Input Provider

Now, to test everything, run the Multitouch.Driver.Console.exe executable (making sure Multitouch.Service.Console.exe is still running) and if everything went well you can now control Windows 8.1 with touch (make sure Surface Input is running, of course). YAY!

The finshing touches

If you’re lazy like me, you don’t want to run Surface Input, Multitouch.Service.Console.exe and Multitouch.Driver.Console.exe every time you boot up Windows 8.1 on your Surface 1.0 unit. Luckily, Multi-Touch Vista comes with a way to install itself as a service, allowing for automatic startup when Windows boots. To do so, open up a command prompt as an Administrator and navigate to the C:\Windows\Microsoft.NET\Framework\v4.0.30319 folder. From that folder, execute the following command:

InstallUtil C:\YOUR_MULTITOUCH_VISTA_PATH\Multitouch.Service.exe

To run the service automatically, open up services.msc, find the service and change the startup type to Automatic. Also, as the service allows you to control Windows 8.1 through touch, make sure the Allow service to interact with desktop checkbox is checked on the Log On tab.

If you want to go full lazy-mode, follow these steps to automatically login the user account you have been using so far, making it so booting up the Surface 1.0 unit in Windows 8.1 results in a full automatic login. For me specifically, this seems perfectly acceptable, as there’s little chance someone will break into my house to do unwanted things on the Surface 1.0 unit.

That’s it! You can now use Windows 8.1 on Microsoft Surface 1.0 with touch, so start downloading some great apps and games to have some fun! As usual, let me know if you have any questions, comments or general feedback in the comments section below or via Twitter!

32 thoughts on “Modernizing the original Microsoft Surface

  1. Pingback: Modernizing the original Microsoft Surface - Rajen's Technical Tidbits - Site Home - MSDN Blogs

  2. Interesting, curious to know how well the touch input works with normal WIndows 8.1 applications. I have a Surface 2 (SUR40) and the infrared sensor is just too sensitive for a normal touch enabled application, as it has terrible palm rejection. That isn’t as much of a problem for applications designed to use the Surface SDK, as they can tell the difference, but there isn’t any obvious way to filter non-fingertip input for normal OS and applications. Actually, my impression of the SUR40 was that it was a lot more finicky than the original Surface (which I don’t have, but used at TechEd and PDC events in the past). In any case, I’ve got a 55″ Perceptive Pixel device now, and the touch response is so much better than the SUR40 (latency, accuracy, wrist rejection, environment sensitivity) that I can live without the tag recognition.

    Another interesting subject is duplicating the Surface SDK features in a WinRT application. I have not seen anything like the ScatterView, nor have I seen any controls libraries that handle multiple users on any platform other than the Surface SDK.

    • Hey Robert,

      Touch input works well enough to be usable, but it’s not 100% perfect, naturally. Sometimes you have to tap something twice and holding the tap just a bit longer seems to help increase accuracy. I’ve had the opportunity to do the “7-year old” test over the weekend, and games and some painting apps were no problem. There’s no palm rejection, obviously, but that doesn’t seem to be a big issue for me so far.

      You’re right that there’s no ScatterView control for Store apps, but it seems people have started replicating its behavior (check out the Photo Kiosk app for example). The Surface is a very specific device, so creating multi-user controls in the WinRT libraries doesn’t seem to make much sense to me (especially when there’s still so much other cool stuff to be worked on).

      • The multi-user controls would work on any large device that supports enough inputs, like my Perceptive Pixel 55″. Because the touch input latency is so much lower, my Surface SDK applications actually work much better on it than they do on the real SUR40. Of course, I can’t get tags or finger orientation.

        I feel that large form factor devices are going to explode in the next few years. Since Microsoft bought Perceptive Pixel, the 55″ unit is down to $5K-$6K US, which is bringing it in reach of small businesses. I fully expect to see active surface tables replacing “dumb” conference room tables in the near future. Thus, it seems like a natural evolution to move the multi-user controls developed for Surface SDK to WinRT, as then we have a modern development platform and simple distribution via the Store. I love WPF, but it has significant performance limitations. I love XNA, but it is a dead end now. Smart tables powered by Windows 8.1 would rock… and be a product area not covered by iOS or Android.

  3. Pingback: Quora

  4. Hello Rajen,

    After receiving 2 of these units as donations, I found your blog here while searching for a way to get the “touch” part of the device working with Windows 8.1 . Seem I may be a bit over my head as it turns out the screen is not a true touch screen, but uses 5 IR cameras to “See” where your placing your hands instead. I easily installed the Windows 8.1 32 bit on an SSD for the device, and also keeped the original HDD as support for the drivers and keeped its original Vista and recovery partitions intact. I seem to get stuck on:

    “Getting the Surface Shell and applications up and running again”

    Practically getting “SurfaceRuntime.exe”. I can’t seem to find it anywhere on the original HDD. instead in the folder “D:\SurfaceInstallers” the only .exe I have is “SurfaceSDK.exe”.

    Do I just need to change the names in the command:

    “C:\SurfaceInstallers>SurfaceRuntime.exe /extract C:\SurfaceInstallers\SurfaceRuntime”

    to the name SurfaceSDK instead? I may end up going the route, but wanted to ask here first to see if I am just way off, or if I have something odd going on with my version of Vista.

    Or, if possible, just doing a factory restore on the device and calling it a day, as this device from 08′ will end up being a toy for the boss’s kids to paly mini games on and not to much else. But that’s a “last ditch effort” if I can’t get this device to work with the 8.1 fully.

    If I can just get the touch to work correctly, I could also call it a day as that would allow the kids to play there games.

    • Hi Cody,

      It sounds like someone may have changed the original files, as the SurfaceRuntime.exe is only distributed with the device itself. SurfaceSDK is not sufficient here, as it does not contain all the necessary files to run everything correctly on the machine itself. You may want to try a factory restore to see if that restores the SurfaceRuntime, otherwise I think you may have to stick with Vista, as support has ended as well.

      • Hello again, I tried to do a factory as explained in:

        http://msdn.microsoft.com/en-us/library/ee692045(v=surface.10).aspx

        But get stuck on the accessing D: part, there is not a D: to access, when going into the computer, i see the recover partition is a 20GB area on the drive itself, only its in an odd file format (EISA), and right clicking it in Disk Manager comes up with no options. Would you know what this partition is? Any Idea where I can get a copy of the recovery if thats not it and just reregister the table?

        Also, as this is looking bleak, do you know of any links that can show me how to work the surface shell? Look as if it is full of apps that were meant to be used as a demonstration, then an workable table. This one doesn’t even have the chest demo like the other 2 i repaired and resold. I do have a 4th one that came in, ill put that out and see what it had installed on it.

        • Hi Cody, is there a recovery folder anywhere to be found? Otherwise it may have been wiped as well, perhaps you can get it off the other units. Not really sure what the exact steps would be here, it’s been quite some years since I’ve last done that.

          Also, the shell by default has no applications in it. You can install the SDK samples or get the demo applications here: http://technet.microsoft.com/en-us/library/ee692039(Surface.10).aspx

      • It should be noted, that there are *2* versions of the surface 1.0 tables. There is the consumer and developer. The developer edition comes with a special version of surfaceSDK which does include the hydra card drivers and it does not come with ‘surfaceruntime.exe’. You can substitute the extraction commands, use orca with it, and install it. We have 2 at my work. IIRC, the cases are different color. balck = standard and silver = developer.

  5. Hi Rajen,
    I’ve followed your instructions carefully and so far I have gotten win8.1 32-bit installed (very difficult – warning to others – do NOT purchase a windows 8.1 download as it will force you to install 64-bit. You must get a 32-bit Windows 8.0 ISO and install that, then perform the free web upgrade to 8.1) then I ran into my first difficulty – XNA 3.1 refused to install until after I had enabled .NET 3.5, and then the SurfaceRuntime installer still refused to install, saying that it needed XNA 2.0, not 3.1. I got that from Microsoft by googling it. Then the SurfaceRuntime installer ran fine.

    After starting the touch input and the Surface Shell, I found that it runs intolerably slowly on Windows 8.1, for whatever reason. There’s no obvious complaints from the Shell at the console, so I’m baffled. Touch works in the Shell but I get maybe .75fps (yes, less than 1 frame per second) which is interesting insofar as I can see the shape of my hand propagate slowly out if I lay my entire outspread hand on the screen…

    Now I’m attempting to install the touch support. First warning to others: the Multitouch-Vista zip package contains pre-compiled drivers and console apps. These will not work. Don’t waste your time. I’m going to see what steps are really required. I’m hoping Rajen’s directions for compiling work. :-)

  6. The next hurdle seems to be getting a working development environment going in order to compile Multitouch Vista. Some things not to try: First, don’t install the Windows SDK. Second, don’t install XNA 3.1, since Surface runs on 2.0 and Multitouch Vista runs on 4.0. Third, don’t install Visual Studio Express 2013. Do install Visual Studio Express 2010, which will actually install on Vista. Unfortunately it comes in ISO format, so install Virtual Clonedrive so you can mount the ISO and run the installer without adding optical media to your computing environmental disaster ;-) So far I am guessing but I think you want the Visual C++ Express install option.

    With any luck I will get to try actually compiling things tomorrow.

    • Hi William,

      I must say I didn’t experience the issues you mentioned, following the steps I laid out in the article. Performance of touch in both the Surface Shell and Windows 8.1 is very responsive, so not sure what the issue there is. There are several people who have followed my blog and got it to work, so I’m pretty confident in the steps I described.

      • It turns out that Multitouch Vista won’t open in Microsoft Visual C++ Express 2010, and purchasing a full copy of Visual C is beyond the scope of the work I can do for my employer getting this working on Windows 8.1, so we’ll probably uninstall Windows 8.1 and stick with Vista, unless you can think of another way I can either build or acquire a working build of the software…?

        The errors reported when loading the solution:
        “Solution Folders are not supported in this version of the application”
        “… project type (.csproj) is not supported by this version of the application” x 5

          • Then it might be helpful for the rest of the people who come here if you let them know in advance that they can’t follow your directions without a full copy of Visual Studio 2008 with the C# development environment installed, so they don’t waste their time. Not everyone automatically knows what you do. ;-)

            For my own situation, this office is a Mac-only environment. Apart from a VAIO touch unit which is on display so customers can surf the web. The Pixelsense is in the staffroom as a toy for the staff to play with. Nobody here has any interest in doing professional Windows development so we won’t be buying Visual Studio. It’s really a shame that Windows 8 doesn’t come with drivers for hardware sold and marketed by Microsoft. It’s nice that there’s a community driver, but equally a shame that it can’t be built with an open toolchain.

          • I think you have a fair point in needing to specify the actual version of Visual Studio needed to compile this. The instructions over at http://multitouchvista.codeplex.com/wikipage?title=How%20to%20compile&referringTitle=Home state it should work with Express (Visual C# 2008 Express Edition to be exact), so that should work as well.

            I understand your point in not having the right licenses in place to do this, but you do have to realize that this device was released in 2008 and there was never official support for OS upgrades, not for Windows 7, not for Windows 8 and not for Windows 8.1. I thus disagree with your expectation that drivers should be included in Windows 8/8.1 for this very specific hardware, that is not present in any other product aside from this commercial unit.

            I would suggest you try following the instructions again with Visual C# 2008 Express Edition, as that’s a free version and should probably work, although I have not tried it myself.

  7. a friend updated my surface 1.0 to windows 7 and the calibration data was no where to be found so i cant use the touch feature and dont have a calibration board :(.. any idea where i could purchase the calibration board or even rent one or could you send me your calibration data so i could get the unit running at least.

    thanks

    ralph

  8. Rajen, Any chance you can post or E-mail a copy of the compiled Multi touch software for the surface table? I cant seem to get it to compile properly. I’m getting errors that I cant get past when I try to compile the driver portion,

  9. Rajen, your blog on this was super helpful to bad I started going to windows 8 before I read all this. I have a problem I am missing my calibration data, and I do not have that fancy calibration board. Would you be willing to send me a copy of your calibration data? Or perhaps tell me how I can get my hands on a board?

    • Hi Tom, glad it was helpful! Unfortunately, like I told Joe, I don’t have easy access to the files at the moment, so I can’t help you there. You can try contacting the Surface Business Desk to see if you can still get a calibration board.

  10. We are picking one of these up for our office. I have no experience with them, but it looks like they use a standard hard drive, so we were hoping to be able to pull that, image it and replace it with a SSD in a 3.5″ adapter. Do you see any issues with trying to do this? We figured it will give it a nice speed boost since it’s an older device.

    • Hi Tony, as there’s no more warranty, this won’t be an issue I guess. The only thing that might pose an issue is that everything is built into a “PC module”, which holds all the hardware. Assuming you’re going to take it apart, it should be fairly straightforward swapping out the parts. I never tried it myself, so I’m not sure how upgradable it actually is.

      As it’s a machine from ~2008, I’m pretty sure that the HDD isn’t going to be the bottleneck (CPU and RAM being the larger influencers here). To be fair, everything on Windows 8.1 runs fairly smooth, even with an external screen at 1080p hooked up in extended mode. Just make sure you create a good back-up of the original files, as they’re needed to keep everything in working order.

  11. Hi to All. I just nabbed a table that is lacking a HDD. I can enter BIOS and I can boot from an external device without any trouble. Sooooo…. Anyone have a handy image I can use to get this beauty up to running as original?

  12. Hello Surface Enthusiasts! I may have a lead on a number of Surface Tables, in the Toronto area. If there is interested picking up one for an upgrade to 8.1 or other develop, would welcome a contact email…

Leave a Reply