Share via


Deploying Drivers and Firmware to Surface Pro

Important Update - December 9th 2014 - Please do not use the methods outlined in this post to update touch firmware drivers. To exclude the Touch drivers simply remove them from the package of drivers/firmware.

In the last month the Surface Pro team have started releasing driver and firmware packs that include all on the drivers and firmware required for Surface Pro. This pack is a simple zip file that contains all of the drivers as INF files that can be installed with out requiring an executable, which for those of you that have followed my previous posts will know is the way I like to see drivers provided.

Firmware Deployment

Perhaps the coolest thing about this pack is the fact that it includes firmware that is delivered in the form of a driver package. This is possible due to a UEFI feature called capsule packages. These capsule packages can be installed several ways:

  • Published via Windows Update
  • Injected into an offline Windows image
  • Installed into Windows 8 online

Note - They cannot be installed via Windows Software Update Service (WSUS).

The firmware is exposed to the machine as a device under the firmware node in device manager.

         image 

To update the firmware manually simply install the driver package on the machine then Windows will then seamlessly take care of the update process for you, ensuring that the correct firmware is applied. Once installed a flag is set for the loader and on restart all available firmware updates are applied. During the boot process a dialog will appear that states “installing system updates”. If you are deploying the drivers as part of an OS deployment, perhaps with the Microsoft Deployment Toolkit or System Center Configuration Manager 2012 you simply add these firmware drivers to your existing driver deployment methodology and the Windows will handle handle the update process for you.

Driver Deployment

Deploying these drivers as part of your existing OS deployment process is simple, however what happens if you want to update drivers on a Surface Pro that has already been deployed. This is definitely something you will want to do as the Surface team has already delivered a number of significant performance improvements as driver and firmware updates. One option would be to manually right clicking on the device in device manager, and select the appropriate driver to install. However this is a laborious process. It is possible to automate this process using a PowerShell script that calls the PnPUtil utility.

The following script iterates recursively through the pack and installs all of the drivers that it finds:

$ScriptPath = Split-Path -parent $MyInvocation.MyCommand.Definition

$files = get-childitem -path $Scriptpath -recurse -filter *.inf

foreach ($file in $files)

{

    Write-host "Injecting driver $file"

    pnputil -i -a $file.FullName

}

To use this script extract the driver pack and place the script in top level folder of the extracted zip file. Then execute the script, it will install all drivers (including firmware). This could also be packaged into a System Center Configuration Manager package and deployed to existing machines.

       image

For further details on Surface Pro deployment please refer to the Surface Pro - Enterprise Deployment Quick Start Guide within the Surface Pro firmware and driver pack that I worked with the Surface Team create.

This post was contributed by Ben Hunter, a Solution Architect with Microsoft Consulting Services.

Disclaimer: The information on this site is provided "AS IS" with no warranties, confers no rights, and is not supported by the authors or Microsoft Corporation. Use of included script samples are subject to the terms specified in the Terms of Use .

Comments

  • Anonymous
    January 01, 2003
    You cannot deploy firmware updates through SCUP or from WSUS. Thanks, Ben

    • Anonymous
      July 05, 2017
      Hey Ben. as per this article, WSUS should now deploy firmware updates but as per your statement its not the same case..... Which one is corrent.https://blogs.msdn.microsoft.com/beanexpert/2016/03/25/surface-3pro-4book-updates-available-in-wsus/
  • Anonymous
    January 01, 2003
    Hi Ryan, There was an issue with the pack, this has now been updated and you will find all of the drivers are available from within the pack itself. Thanks, Ben

  • Anonymous
    January 01, 2003
    I am attempting to deploy Windows 8.1 Enterprise 64 bit to a Surface Pro 2.I have tried adding the drivers from both October2013SurfacePro2.zip and Octorber2013SurfaceProWin8.1.zip to SCCM but both sets of drivers fail with error 31 during windows setup. From what I have read error 31 means that setup found an unsigned driver. I checked and both driver packs have unsigned drivers (Display and WLAN). I can deploy the same task sequence to a Lenovo T430 after removing the unsigned drivers but the install still fails on the Surface. I have also set the OSDAllowUnsignedDriver variable to False in my task sequence because it was defaulting to true.Do you have any ideas as to what I can do to get this to work?Thank you.

  • Anonymous
    January 01, 2003
    I am seeing some odd results, I run the script on a SP3 that has not had its firmware updated recently (July firmware & drivers) We deployed it back then. And the drivers are updated, but the firmware is not staged and does not apply. I have a premier case open for this ( REG:114092411833571) If I manually click "update driver software" on each of the four firmware nodes in device manager and point it at the folder containing the extracted driver pack, the firmware is staged and applies on the next reboot. I see no errors when running the script. Any ideas?

  • Anonymous
    January 01, 2003
    @Marty you do not need to disable secure boot, if you have a UEFI pxe image to boot to.MDT (2013) boot images are UEFI enabled. In regards to the usb Ethernet adapter,http://www.microsoftstore.com/store/msusa/en_US/pdp/Surface-Ethernet-Adapter/productID.300192100 is a Gigabit Adapter.

  • Anonymous
    January 01, 2003
    Hi CarthaR,

    When I refer to touch firmware I am not referring to the Touch cover I am referring to the screen touch. It is important that you don't use this process to update the touch drivers however the other drivers and firmware should be able to use this process. To update the touch firmware you will need to use Windows Update.

    Thanks,
    Ben

  • Anonymous
    January 01, 2003
    Great write up Ben!

  • Anonymous
    January 01, 2003
    The comment has been removed

  • Anonymous
    January 01, 2003
    I am looking to upgrade the Surface Pro 3's we have in our corporate environment. After reading your post I noticed that you have posted on 12.9.14 to not update the Touch firmware drivers. We are having issues with our SP3's when redocking. It kills the keyboard and only after detach/reattach multiple times do we finally get the keyboard to work again. The November updates has a bunch of Touch cover FW updates as well as Type cover FW updates. Do I remove all of these? Both Touch and Type? I just want to be sure. Also, have you heard of this issue with the keyboard not responding after dock? Also, what if any are the issues with the Touch FW updates?
    Thanks.

    BC

  • Anonymous
    January 01, 2003
    I would ignore this method, use the MSI installer MS is now providing. It works great.

  • Anonymous
    January 01, 2003
    Any updates on the touch drivers issue posted at the top of the article?
    We've just bought a couple Surface Pro3's to test & I've just imported the whole lot into SCCM & created a driver package (using the March 2015 zipped driver/firmware collection).

    Would like to get clarified if this unexplained issue includes SCCM OSD driver injection, or just the pnputil scripted install? And if this is/will be addressed in future driver/firmware collections.

  • Anonymous
    January 01, 2003
    @ Zebulon 1. Firmware will not downgrade, it will realize newer firmware / drivers are installed and not replace them.
    2. Best bet is to query the "driver" version installed for each piece of firmware.http://blogs.technet.com/b/heyscriptingguy/archive/2006/03/20/how-can-i-get-a-list-of-installed-device-drivers.aspx

    @NoDowt Applying all of the firmware through a normal OSD TS. You can always run the MSI Surface Platform Update to ensure they are installed. (I'm staying with the January firmware in my boot media, plus OSD) And running the latest MSI near the end of the TS. (Since I deploy the msi to machines already in the field.)

  • Anonymous
    May 17, 2013
    I am attempting to install the drivers manually after doing a clean install of Windows 8 Enterprise x64.  I created and ran the PowerShell script.  The only device I can't find a driver for is the 'PCI Simple Communications Controller'.  Any ideas?

  • Anonymous
    May 17, 2013
    Disregard my previous post.  After running through the first set of Windows Updates, the unknown device was installed.

  • Anonymous
    June 21, 2013
    What about importing the Firmware updates through SCUP? Does that work for enterprise?

  • Anonymous
    June 27, 2013
    We are deploying Surface Pro using MDT TS, Will deployment take care of updating firmware if included as drivers in MDT? I have added the drivers in MDT and created selection profile to include the firware update as part of driver. Thanks Rohti

  • Anonymous
    July 15, 2013
    Hi, How can I deploy Firmware through Wise package studio or VB script? is there any way we can perform silent deployment? Thanks, Lakshmi

  • Anonymous
    November 05, 2013
    Nice post, it worked perfectly on a surface pro 2 with a fresh install of enterprise 8.1

  • Anonymous
    December 04, 2013
    I understand you stated that these drivers will not be available through WSUS even though they are delivered to systems by Windows Update (so the technology is there). In our SCCM 2012 R2 environment there is a Windows 8.1 Drivers classification in the WSUS download options. We have this selected but I haven't noticed any drivers showing up in our list of patches. Are there any plans to release these driver and firmware updates for Enterprise Customers?

  • Anonymous
    December 04, 2013
    Hi James, I do not know of any plans around adding the Surface drivers to the WSUS catalog. Thanks, Ben

  • Anonymous
    February 21, 2014
    The comment has been removed

  • Anonymous
    February 27, 2014
    Has anyone figured out a way to add the Surface Pro drivers to WDS? They all fail...

  • Anonymous
    March 24, 2014
    Cormang, no, I'm having the same issue. You cannot install the Surface network drivers in 2008R2 WDS.
    Typical of Microsoft. This product is garbage as is Microsoft's support for it in enterprise.

  • Anonymous
    March 31, 2014
    Thanks, that is a very helpful tool :)

  • Anonymous
    June 26, 2014
    The comment has been removed

  • Anonymous
    July 09, 2014
    Very helpful PowerShell script, much appreciated!

  • Anonymous
    July 29, 2014
    Hi, It's working fine for deployment if you use the Microsoft Ethernet Adapter, add the the proper driver to Winpe x64 and don't forget to turn off secure boot or you won't be able to boot pxe. Now the Big issue is that the Ethernet adapter for the Surface Pro is only 100 mbps and USB 2.0. The OSD takes forever... Pretty disappointed, especially for a 39.99 + tx price.

  • Anonymous
    August 02, 2014
    I am facing Issue while injecting driver it says : Unable to find destination partition drive ,disk or partition no valid network adapter found ...any one have any idea ?

  • Anonymous
    September 03, 2014
    The comment has been removed

  • Anonymous
    September 18, 2014
    When I run the script as a local admin I get a lot of driver failed to install, access denied issues and windows still wants the firmware updates. Am I wrong in thinking that if you download the packages fromhttp://www.microsoft.com/en-us/download/details.aspx?id=38826 and then extract the driver packages and use the script above then we shouldn't need to run the firmware update?

  • Anonymous
    December 13, 2014
    hi, would someone please help me with the process of pushing out the driver/firmware update to already deployed SP3s?
    we use sccm2012r2 for OSD etc but am not sure where to start with the PS script, how to package the whole thing, thanks in advance.

  • Anonymous
    December 15, 2014
    The comment has been removed

  • Anonymous
    December 15, 2014
    The comment has been removed

  • Anonymous
    December 19, 2014
    smoluh, I too am trying to run this as an SCCM package and getting the same results when calling pnputil.exe. I tried switching to start-process instead. I have the following as my for loop:
    foreach($file in $files) {
    $Command = "C:WindowsSystem32PnPutil.exe"
    $Arguments = "-i -a """ + $file.FullName + """"
    Start-Process -FilePath $Command -ArgumentList $Arguments -Wait -NoNewWindow
    }

    If I run the script outside of SCCM it works fine. Running as a package, I get:
    Start-Process : This command cannot be run due to the error: The system cannot find the file specified.
    At ...SurfaceDrivers.ps1:25 char:5
    + Start-Process -FilePath $Command -ArgumentList $Arguments -Wait-NoNewWindow
    +
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

  • Anonymous
    January 04, 2015
    Ben do you happen to know how to get the auto rotation function back after imaging per your Enterprise Deployment guide. I've imaged five surface pro 3's and non of them will auto rotate. It's like it's missing some driver to enabled it. I say this because all the places where you would find the autolock or other features about rotate the icons or settings or check boxes are missing. This is all with and without a cover attached. The sensor diag found a service not started but even after starting it and setting it to auto there is still no auto rotation function available on my surface pro 3's.

    any help would be appreciated.

  • Anonymous
    February 02, 2015
    Voici la suite (Part 3) de la procédure de déploiement de la surface Pro 3
    Les différentes

  • Anonymous
    February 02, 2015
    Hi Ben, Like the others, what is the issue with the touch firmware? We don't allow our workstations to connect to MS Update so that isn't an option. Could you please elaborate on why it's important to not do the touch firmware this way? And what other option you would recommend for this?

  • Anonymous
    February 26, 2015
    The comment has been removed

  • Anonymous
    June 18, 2015
    I used this code to get it to work

    Clear-Host

    $ScriptPath = Split-Path -parent $MyInvocation.MyCommand.Definition
    Foreach ($file in Get-Childitem $ScriptPath -recurse -filter *.inf)
    {

    Write-host "Injecting driver $file"

    pnputil -i -a $file.FullName

    }

  • Anonymous
    March 02, 2016
    The comment has been removed