<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-AU" xmlns:media="http://search.yahoo.com/mrss/">
  <id>https://david.gardiner.net.au/tags/Windows%2011.xml</id>
  <title type="html">David Gardiner - Windows 11</title>
  <updated>2026-04-15T00:26:29.741Z</updated>
  <subtitle>Blog posts tagged with &apos;Windows 11&apos; - A blog of software development, .NET and other interesting things</subtitle>
  <rights>Copyright 2026 David Gardiner</rights>
  <icon>https://www.gravatar.com/avatar/37edf2567185071646d62ba28b868fab?s=64</icon>
  <logo>https://www.gravatar.com/avatar/37edf2567185071646d62ba28b868fab?s=256</logo>
  <generator uri="https://github.com/flcdrg/astrojs-atom" version="3">astrojs-atom</generator>
  <author>
    <name>David Gardiner</name>
  </author>
  <link href="https://david.gardiner.net.au/tags/Windows%2011.xml" rel="self" type="application/atom+xml"/>
  <link href="https://david.gardiner.net.au/tags/Windows%2011" rel="alternate" type="text/html" hreflang="en-AU"/>
  <category term="Windows 11"/>
  <category term="Software Development"/>
  <entry>
    <id>https://david.gardiner.net.au/2026/03/mystery-files-app</id>
    <updated>2026-03-16T11:00:00.000+10:30</updated>
    <title>Where did this new Files app come from?</title>
    <link href="https://david.gardiner.net.au/2026/03/mystery-files-app" rel="alternate" type="text/html" title="Where did this new Files app come from?"/>
    <category term="Windows 11"/>
    <published>2026-03-16T11:00:00.000+10:30</published>
    <summary type="html">What is this new &apos;Files&apos; app that suddenly appeared on my Windows taskbar, and how
do you make it go away?</summary>
    <content type="html">&lt;p&gt;Recently when starting Windows 11 I noticed that a new icon had appeared on the taskbar. It wasn&apos;t too long after I&apos;d upgraded to 25H2 so my first assumption was it was part of that. The annoying thing was there wasn&apos;t an obvious way to make it go away.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/microsoft-365-companion-files-app.B5t6HI9k_Z1CqVRG.webp&quot; alt=&quot;Screenshot of Windows 11 taskbar with Files application running&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Right-clicking on the icon just gave an option to close the application, but it wasn&apos;t permanent. The next time I signed into Windows then there it was again. Kind of annoying.&lt;/p&gt;
&lt;p&gt;On my computer, I searched in &lt;strong&gt;Windows Settings&lt;/strong&gt; | &lt;strong&gt;Apps&lt;/strong&gt;, but no &apos;Files&apos; application was listed - very odd.&lt;/p&gt;
&lt;p&gt;Searching online for &quot;Windows 11 Files app&quot; brings up heaps of results, but none matched the icon that I was seeing. So I decided to to a bit of detective work to see if I could figure out what this thing was and where it came from. I looked in Task Manager, and sure enough there&apos;s a &lt;code&gt;Files.exe&lt;/code&gt; process running:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/microsoft-365-companion-task-manager.SCkv-gVC_ZAdpUx.webp&quot; alt=&quot;Screenshot of Windows Task Manager showing &apos;Files.exe&apos; process running&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ah interesting - there&apos;s &quot;M365Companions&quot; in the path. Maybe adding that to my online search keywords might help? Yes, that made all the difference!&lt;/p&gt;
&lt;p&gt;I turned up this &lt;a href=&quot;https://learn.microsoft.com/en-us/microsoft-365-apps/companions/overview?WT.mc_id=DOP-MVP-5001655&quot;&gt;Overview of Microsoft 365 companion apps documentation&lt;/a&gt;. That&apos;s more of an IT admin page, but it links to a more end-user friendly &lt;a href=&quot;https://support.microsoft.com/en-au/office/get-started-with-microsoft-365-companions-a27df74a-cc41-4e74-8216-51091dc30194&quot;&gt;Getting started with Microsoft 365 companions page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That second page does say &quot;You can unpin or remove the apps from your taskbar at any time.&quot; which is obviously not correct. Not sure if that&apos;a bug in the software or the documentation.&lt;/p&gt;
&lt;p&gt;So it turns out there&apos;s 3 of these &apos;companion&apos; apps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;People companion&lt;/strong&gt;: Find people in the organization (and others they have communicated with), pin close collaborators to accelerate workflows, and quickly learn about people in current meetings without disrupting workflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Files companion&lt;/strong&gt;: Find your Microsoft 365 files, preview file contents, share files with colleagues, and access recently used documents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calendar companion&lt;/strong&gt;: Access Microsoft 365 calendar, view upcoming events, join meetings, and search appointments directly from the taskbar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;m sure someone will find them useful, but for now I just wanted them to go away.&lt;/p&gt;
&lt;p&gt;Armed with that extra information I went back to &lt;strong&gt;Windows Settings&lt;/strong&gt; | &lt;strong&gt;Apps&lt;/strong&gt; and this time searched for &apos;companion&apos;. Sure enough there is a &quot;Microsoft 365 companion apps&quot; app listed.&lt;/p&gt;
&lt;p&gt;Clicking on the &quot;...&quot; menu gives an option to &lt;strong&gt;Uninstall&lt;/strong&gt;, or if you click on &lt;strong&gt;Advanced options&lt;/strong&gt; you see something similar to this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/microsoft-365-companion-advanced.DQfOLick_1aDgez.webp&quot; alt=&quot;Screenshot of Advanced options page for &apos;Microsoft 365 companion apps&apos; app showing &apos;Files&apos; enabled for starting when user logs in&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For now I toggled &lt;strong&gt;Files&lt;/strong&gt; off, so it won&apos;t start automatically the next time I sign in.&lt;/p&gt;
&lt;p&gt;Maybe in the future I might want to make use of these apps, but for now that will do.&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/microsoft-365-companion-files-app.B5t6HI9k.png" width="215" height="350"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/microsoft-365-companion-files-app.B5t6HI9k.png" width="215" height="350"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2025/04/touchpad-settings</id>
    <updated>2025-04-13T19:00:00.000+09:30</updated>
    <title>Changing the Windows touchpad settings programmatically</title>
    <link href="https://david.gardiner.net.au/2025/04/touchpad-settings" rel="alternate" type="text/html" title="Changing the Windows touchpad settings programmatically"/>
    <category term=".NET"/>
    <category term="PowerShell"/>
    <category term="Windows 11"/>
    <published>2025-04-13T19:00:00.000+09:30</published>
    <summary type="html">Now that I&apos;ve got a reliable process for reinstalling Windows, I do have a list of things that I&apos;d like to automate to get it configured &quot;just right&quot;. As such, I&apos;ve created a new repository on GitHub and added issues to track each one of these. While my Boxstarter scripts will remain for now as GitHub Gists, I think it&apos;s going to be easier to manage all of these things together in the one Git repository.</summary>
    <content type="html">&lt;p&gt;Now that I&apos;ve got &lt;a href=&quot;/2025/04/reinstalling-laptop&quot;&gt;a reliable process for reinstalling Windows&lt;/a&gt;, I do have a list of things that I&apos;d like to automate to get it configured &quot;just right&quot;. As such, I&apos;ve created a new repository on GitHub and &lt;a href=&quot;https://github.com/flcdrg/reinstall-windows/issues&quot;&gt;added issues to track each one of these&lt;/a&gt;. While my &lt;a href=&quot;https://gist.github.com/flcdrg/87802af4c92527eb8a30&quot;&gt;Boxstarter scripts&lt;/a&gt; will remain for now as GitHub Gists, I think it&apos;s going to be easier to manage all of these things together in the one &lt;a href=&quot;https://github.com/flcdrg/reinstall-windows&quot;&gt;Git repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One customisation I like to make to Windows is to disable the &apos;Tap with a single finger to single-click&apos; for the touchpad. I find I&apos;m less likely to accidentally click on something when I was just tapping the touch pad to move the cursor if I turn this off.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/touchpad-settings.QcmMTYok_1np360.webp&quot; alt=&quot;Screenshot of Windows Settings, showing Touchpad configuration, with &apos;Tap for a single finger to single-click&apos; unchecked&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I found some &lt;a href=&quot;https://learn.microsoft.com/answers/questions/1258054/how-to-turn-off-touch-gestures-in-windows-10-11-%28d?WT.mc_id=DOP-MVP-5001655&quot;&gt;online articles&lt;/a&gt; that suggested this was managed by the Registry setting &lt;code&gt;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\PrecisionTouchPad&lt;/code&gt;. Experimenting with this seems to be partly true. I can see the Registry value &lt;code&gt;TapsEnabled&lt;/code&gt; is updated when I enable or disable the checkbox in Windows Settings. But the reverse did not seem to be true - if I modified the Registry key, Windows Settings doesn&apos;t change, nor does the touchpad behaviour.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/registry-editor.DJW3oChB_AQFGB.webp&quot; alt=&quot;Windows Registry Editor showing keys for PrecisionTouchPad&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Further searching lead me to the &lt;a href=&quot;https://learn.microsoft.com/windows-hardware/design/component-guidelines/touchpad-tuning-guidelines?WT.mc_id=DOP-MVP-5001655&quot;&gt;Tuning Guidelines&lt;/a&gt; page of the Windows Hardware Precision Touchpad Implementation Guide. I&apos;m no hardware manufacturer, but this does document the &lt;a href=&quot;https://learn.microsoft.com/windows-hardware/design/component-guidelines/touchpad-tuning-guidelines?WT.mc_id=DOP-MVP-5001655#tap-with-a-single-finger-to-single-click&quot;&gt;&lt;code&gt;TapsEnabled&lt;/code&gt;&lt;/a&gt; setting. Interestinly, down the bottom of that page it does also mention:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As of Windows 11, build 26027, the user&apos;s touchpad settings can be queried and modified dynamically via the SystemParametersInfo API&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&apos;m running Windows 11 24H2, which is build 26100, so that &lt;a href=&quot;https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-systemparametersinfoa?WT.mc_id=DOP-MVP-5001655&quot;&gt;&apos;SystemParametersInfo&apos;&lt;/a&gt; API should be available to me. Let&apos;s see if calling that does the trick.&lt;/p&gt;
&lt;p&gt;My C/C++ is pretty rusty, whereas I&apos;m quite at home in C# or PowerShell. My preference would be to use &lt;a href=&quot;https://learn.microsoft.com/dotnet/standard/native-interop/pinvoke?WT.mc_id=DOP-MVP-5001655&quot;&gt;.NET P/Invoke&lt;/a&gt; to call the Windows API.&lt;/p&gt;
&lt;p&gt;As I&apos;ve learned from previous times using P/Invoke, The trick to getting it working properly is to make sure you have the method signature(s) and data structures correct.&lt;/p&gt;
&lt;p&gt;While my final goal is to call this from a PowerShell script, prototyping in a simple .NET console application should allow me to quickly test my definitions, plus get C# syntax highlighting and code completion within my IDE.&lt;/p&gt;
&lt;p&gt;Let&apos;s try and find an existing definition of &lt;code&gt;SystemParametersInfo&lt;/code&gt;. I searched for &quot;.NET PInvoke&quot; and noticed &lt;a href=&quot;https://github.com/dotnet/pinvoke&quot;&gt;https://github.com/dotnet/pinvoke&lt;/a&gt;, but that repository is archived and you are instead pointed to &lt;a href=&quot;https://github.com/microsoft/CsWin32&quot;&gt;https://github.com/microsoft/CsWin32&lt;/a&gt;. This project provides a .NET source generator that will create Win32 P/Invoke methods for you, based off of the latest metadata from the Windows team. That sounds perfect!&lt;/p&gt;
&lt;p&gt;As per &lt;a href=&quot;https://microsoft.github.io/CsWin32/docs/getting-started.html&quot;&gt;the documentation&lt;/a&gt;, I added a package reference&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dotnet add package Microsoft.Windows.CsWin32
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then created a &lt;code&gt;NativeMethods.txt&lt;/code&gt; file and added &lt;code&gt;SystemParametersInfo&lt;/code&gt; to it.&lt;/p&gt;
&lt;p&gt;I then edited &lt;code&gt;Program.cs&lt;/code&gt; and tried to use my new method:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/visual-studio-missing-enum.B4AvDanC_2jLSIq.webp&quot; alt=&quot;Screenshot of editing Program.cs in Visual Studio&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Except &lt;code&gt;SPI_GETTOUCHPADPARAMETERS&lt;/code&gt; isn&apos;t available!&lt;/p&gt;
&lt;p&gt;The documentation suggested you can get newer metadata for the source generator to use by adding a reference to the latest prerelease &lt;code&gt;Microsoft.Windows.SDK.Win32Metadata&lt;/code&gt; package. I tried that, but still no joy. I&apos;ve &lt;a href=&quot;https://github.com/microsoft/win32metadata/issues/2079&quot;&gt;raised an issue&lt;/a&gt; in the &lt;a href=&quot;https://github.com/microsoft/win32metadata&quot;&gt;microsoft/win32metadata&lt;/a&gt; repo, but for now it looks like I&apos;ll need to hand-roll a few of the types myself.&lt;/p&gt;
&lt;p&gt;The docs for SPI_GETTOUCHPADPARAMETERS say the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;pvParam&lt;/code&gt; parameter must point to a &lt;code&gt;TOUCHPAD_PARAMETERS&lt;/code&gt; structure.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;uiParam&lt;/code&gt; parameter must specify the size of the structure.&lt;/li&gt;
&lt;li&gt;The value of the &lt;code&gt;versionNumber&lt;/code&gt; field in the &lt;code&gt;TOUCHPAD_PARAMETERS&lt;/code&gt; structure must be set to the appropriate value for the version of the structure being used.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://learn.microsoft.com/windows/win32/api/winuser/ns-winuser-touchpad_parameters?WT.mc_id=DOP-MVP-5001655&quot;&gt;TOUCHPAD_PARAMETERS structure&lt;/a&gt; is documented using C++. I asked GitHub Copilot if it could translate that into equivalent C# for me. It came up with this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// DO NOT USE THIS - IT IS INCORRECT!!
[StructLayout(LayoutKind.Sequential)]
public struct TOUCHPAD_PARAMETERS
{
    public uint VersionNumber;
    public uint MaxSupportedContacts;
    public LEGACY_TOUCHPAD_FEATURES LegacyTouchpadFeatures;

    // Bit fields are represented as individual boolean fields in C#
    public bool TouchpadPresent;
    public bool LegacyTouchpadPresent;
    public bool ExternalMousePresent;
    public bool TouchpadEnabled;
    public bool TouchpadActive;
    public bool FeedbackSupported;
    public bool ClickForceSupported;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 25)]
    public bool[] Reserved1;

    public bool AllowActiveWhenMousePresent;
    public bool FeedbackEnabled;
    public bool TapEnabled;
    public bool TapAndDragEnabled;
    public bool TwoFingerTapEnabled;
    public bool RightClickZoneEnabled;
    public bool MouseAccelSettingHonored;
    public bool PanEnabled;
    public bool ZoomEnabled;
    public bool ScrollDirectionReversed;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 22)]
    public bool[] Reserved2;

    public TOUCHPAD_SENSITIVITY_LEVEL SensitivityLevel;
    public uint CursorSpeed;
    public uint FeedbackIntensity;
    public uint ClickForceSensitivity;
    public uint RightClickZoneWidth;
    public uint RightClickZoneHeight;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And likewise for the two enums &lt;a href=&quot;https://learn.microsoft.com/windows/win32/api/winuser/ne-winuser-legacy_touchpad_features?WT.mc_id=DOP-MVP-5001655&quot;&gt;LEGACY_TOUCHPAD_FEATURES enumeration&lt;/a&gt; and &lt;a href=&quot;https://learn.microsoft.com/windows/win32/api/winuser/ne-winuser-touchpad_sensitivity_level?WT.mc_id=DOP-MVP-5001655&quot;&gt;TOUCHPAD_SENSITIVITY_LEVEL enumeration&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One thing you need to do is set the &lt;code&gt;VersionNumber&lt;/code&gt; property to &lt;code&gt;TOUCHPAD_PARAMETERS_LATEST_VERSION&lt;/code&gt;. Except I searched to find out what the value of that is, and no results. I ended up resorting to installing the Windows 11 SDK so I could locate WinUser.h and then I found this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#define TOUCHPAD_PARAMETERS_LATEST_VERSION 1
#define TOUCHPAD_PARAMETERS_VERSION_1 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But then trying to call SystemParametersInfo was not working. That lead me down a bit of a rabbit hole to finally conclude that something is still wrong with the mapping in &lt;code&gt;TOUCHPAD_PARAMETERS&lt;/code&gt;. The original structure in C++ is this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;typedef struct TOUCHPAD_PARAMETERS {
  UINT                       versionNumber;
  UINT                       maxSupportedContacts;
  LEGACY_TOUCHPAD_FEATURES   legacyTouchpadFeatures;
  BOOL                       touchpadPresent : 1;
  BOOL                       legacyTouchpadPresent : 1;
  BOOL                       externalMousePresent : 1;
  BOOL                       touchpadEnabled : 1;
  BOOL                       touchpadActive : 1;
  BOOL                       feedbackSupported : 1;
  BOOL                       clickForceSupported : 1;
  BOOL                       Reserved1 : 25;
  BOOL                       allowActiveWhenMousePresent : 1;
  BOOL                       feedbackEnabled : 1;
  BOOL                       tapEnabled : 1;
  BOOL                       tapAndDragEnabled : 1;
  BOOL                       twoFingerTapEnabled : 1;
  BOOL                       rightClickZoneEnabled : 1;
  BOOL                       mouseAccelSettingHonored : 1;
  BOOL                       panEnabled : 1;
  BOOL                       zoomEnabled : 1;
  BOOL                       scrollDirectionReversed : 1;
  BOOL                       Reserved2 : 22;
  TOUCHPAD_SENSITIVITY_LEVEL sensitivityLevel;
  UINT                       cursorSpeed;
  UINT                       feedbackIntensity;
  UINT                       clickForceSensitivity;
  UINT                       rightClickZoneWidth;
  UINT                       rightClickZoneHeight;
} TOUCHPAD_PARAMETERS, *PTOUCH_PAD_PARAMETERS, TOUCHPAD_PARAMETERS_V1, *PTOUCHPAD_PARAMETERS_V1;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice all those numbers after many of the fields? Those indicate it is a &lt;a href=&quot;https://learn.microsoft.com/cpp/c-language/c-bit-fields?view=msvc-170&amp;amp;WT.mc_id=DOP-MVP-5001655&quot;&gt;C bit field&lt;/a&gt;. And guess what feature &lt;a href=&quot;https://github.com/dotnet/csharplang/discussions/465&quot;&gt;C# doesn&apos;t currently support&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;In that discussion though &lt;a href=&quot;https://github.com/dotnet/csharplang/discussions/465#discussioncomment-8399377&quot;&gt;there is a suggestion&lt;/a&gt; that you can use &lt;a href=&quot;https://learn.microsoft.com/dotnet/api/system.collections.specialized.bitvector32?view=net-9.0&amp;amp;WT.mc_id=DOP-MVP-5001655&quot;&gt;&lt;code&gt;BitVector32&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://learn.microsoft.com/dotnet/api/system.collections.bitarray?view=net-9.0&amp;amp;WT.mc_id=DOP-MVP-5001655&quot;&gt;&lt;code&gt;BitArray&lt;/code&gt;&lt;/a&gt; as a workaround. For usability, we can add properties in to expose access to the individual bits in the &lt;code&gt;BitVector32&lt;/code&gt; field. Also note that the values passed in via the &lt;code&gt;[]&lt;/code&gt; is a bitmask, not an array index. (Yes, that tricked me the first time too!)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[StructLayout(LayoutKind.Sequential)]
public struct TOUCHPAD_PARAMETERS
{
    public uint VersionNumber;
    public uint MaxSupportedContacts;
    public LEGACY_TOUCHPAD_FEATURES LegacyTouchpadFeatures;

    private BitVector32 First;

    public bool TouchpadPresent
    {
        get =&amp;gt; First[1];
        set =&amp;gt; First[1] = value;
    }

    public bool LegacyTouchpadPresent
    {
        get =&amp;gt; First[2];
        set =&amp;gt; First[2] = value;
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With that done, we can now call &lt;code&gt;SystemParametersInfo&lt;/code&gt; like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const uint SPI_GETTOUCHPADPARAMETERS = 0x00AE;

unsafe
{
    TOUCHPAD_PARAMETERS param;
    param.VersionNumber = 1;

    var size = (uint)Marshal.SizeOf&amp;lt;TOUCHPAD_PARAMETERS&amp;gt;();
    var result = PInvoke.SystemParametersInfo((SYSTEM_PARAMETERS_INFO_ACTION)SPI_GETTOUCHPADPARAMETERS,
        size, &amp;amp;param, 0);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And it works! Now curiously, the Windows Settings page doesn&apos;t update in real time, but if you go to a different page and then navigate back to the Touchpad page, the setting has updated!&lt;/p&gt;
&lt;p&gt;We can refactor the code slightly to put it into a helper static class, so it&apos;s easier to call from PowerShell. To make this easier I created a second Console application, but this time I didn&apos;t add any source generators, so I would be forced to ensure that all required code was available You can &lt;a href=&quot;https://github.com/flcdrg/reinstall-windows/blob/main/StandaloneApp/Program.cs&quot;&gt;view the source code here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I could then copy the C# into a PowerShell script and use the &lt;code&gt;Add-Type&lt;/code&gt; command to include it in the current PowerShell session. Note the use of &lt;code&gt;-CompilerOptions &quot;/unsafe&quot;&lt;/code&gt;, which we need to specify as we&apos;re using the &lt;code&gt;unsafe&lt;/code&gt; keyword in our C# code.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$source=@&apos;
using System;
using System.Collections.Specialized;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;

public static class SystemParametersInfoHelper
{
    [DllImport(&quot;USER32.dll&quot;, ExactSpelling = true, EntryPoint = &quot;SystemParametersInfoW&quot;, SetLastError = true), DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
    [SupportedOSPlatform(&quot;windows5.0&quot;)]
    internal static extern unsafe bool SystemParametersInfo(uint uiAction, uint uiParam, [Optional] void* pvParam, uint fWinIni);

    public static void DisableSingleTap()
    {
        const uint SPI_GETTOUCHPADPARAMETERS = 0x00AE;
        const uint SPI_SETTOUCHPADPARAMETERS = 0x00AF;

        unsafe
        {
            // Use a fixed buffer to handle the managed type issue  
            TOUCHPAD_PARAMETERS param;
            param.VersionNumber = 1;

            var size = (uint)Marshal.SizeOf&amp;lt;TOUCHPAD_PARAMETERS&amp;gt;();
            var result = SystemParametersInfo(SPI_GETTOUCHPADPARAMETERS, size, &amp;amp;param, 0);

            if (param.TapEnabled)
            {
                param.TapEnabled = false;

                result = SystemParametersInfo(SPI_SETTOUCHPADPARAMETERS, size, &amp;amp;param, 3);
            }
        }
    }
}

[StructLayout(LayoutKind.Sequential)]
public struct TOUCHPAD_PARAMETERS
{
    ...
&apos;@

Add-Type -TypeDefinition $source -Language CSharp -PassThru -CompilerOptions &quot;/unsafe&quot; | Out-Null
[SystemParametersInfoHelper]::DisableSingleTap()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The complete version of the script is &lt;a href=&quot;https://github.com/flcdrg/reinstall-windows/blob/main/Set-Touchpad.ps1&quot;&gt;available here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/touchpad-settings-demo.iszIrUx__MTfLT.webp&quot; alt=&quot;Demo of script disabling touchpad&apos;s &apos;tap with single finger to single-click&apos;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s one problem solved. Just a few more to go!&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/touchpad-settings.QcmMTYok.png" width="499" height="472"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/touchpad-settings.QcmMTYok.png" width="499" height="472"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2025/04/reinstalling-laptop</id>
    <updated>2025-04-08T20:30:00.000+09:30</updated>
    <title>Customising and optimising Windows 11 installation</title>
    <link href="https://david.gardiner.net.au/2025/04/reinstalling-laptop" rel="alternate" type="text/html" title="Customising and optimising Windows 11 installation"/>
    <category term="Hardware"/>
    <category term="PowerShell"/>
    <category term="Windows 11"/>
    <published>2025-04-08T20:30:00.000+09:30</published>
    <summary type="html">In theory, I&apos;d like to reinstall my laptop regularly - say every couple of months? In practise, it&apos;s easy to keep putting it off. One of the detractions was not just the time to re-install Windows, but also to then install all the various device drivers. So time goes by and next you realise it&apos;s been a year or longer.</summary>
    <content type="html">&lt;p&gt;In theory, I&apos;d like to reinstall my laptop regularly - say every couple of months? In practise, it&apos;s easy to keep putting it off. One of the detractions was not just the time to re-install Windows, but also to then install all the various device drivers. So time goes by and next you realise it&apos;s been a year or longer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/Windows-11-Logo-1000x404.B7euyBZy_Z1gQFiY.webp&quot; alt=&quot;Windows 11 logo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you use the built in &lt;a href=&quot;https://support.microsoft.com/en-au/windows/reset-your-pc-0ef73740-b927-549b-b7c9-e6f2b48d275e&quot;&gt;Windows Reset feature&lt;/a&gt;, then it&apos;s been my observation that this seems to preserve not only any OEM drivers, but also any OEM bloatware too. I was interested in the idea of installing a &apos;vanilla&apos; Windows OS, with just the OEM drivers, but no bloat. And while I&apos;m at it, can I automate a few of the other installation steps?&lt;/p&gt;
&lt;h2&gt;Step 0. Partition your disk&lt;/h2&gt;
&lt;p&gt;If you want to make this whole process easier, having a separate partition (or second physical drive) for all your data/documents/files will mean you can completely blow away your C: drive where Windows is installed, and all those files in the other partition will be untouched.&lt;/p&gt;
&lt;p&gt;In my case, I partitioned my SSD to have D: as my &lt;a href=&quot;https://learn.microsoft.com/windows/dev-drive/?WT.mc_id=DOP-MVP-5001655&quot;&gt;Dev Drive&lt;/a&gt; (which uses the newer &lt;a href=&quot;https://learn.microsoft.com/windows-server/storage/refs/refs-overview?WT.mc_id=DOP-MVP-5001655&quot;&gt;ReFS file system&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Having a full system backup is another great idea. Knowing that if something goes wrong and you have a way to restore your system back to how it was before you started it process is reassuring. I take advantage of &lt;a href=&quot;https://www.synology.com/en-global/dsm/feature/active-backup-business/pc&quot;&gt;Synology Active Backup for Business&lt;/a&gt; to take full backups of my machines, as well as taking using OneDrive for storing other important files and documents.&lt;/p&gt;
&lt;h2&gt;Step 1. Create a bootable Windows USB drive&lt;/h2&gt;
&lt;p&gt;Head over to &lt;a href=&quot;https://www.microsoft.com/en-au/software-download/windows11&quot;&gt;https://www.microsoft.com/en-au/software-download/windows11&lt;/a&gt; and follow the steps to download the Windows 11 ISO image.&lt;/p&gt;
&lt;p&gt;Next, get &lt;a href=&quot;https://rufus.ie/en/&quot;&gt;Rufus&lt;/a&gt; and use that to create a bootable USB drive. You probably want to select NTFS for the format, as you will likely need to store more data than can fit in FAT32.&lt;/p&gt;
&lt;p&gt;Why do this instead of using Microsoft&apos;s Media Creator Tool? The results are similar, but the tool creates a &lt;code&gt;sources\install.esd&lt;/code&gt; file. If you create a bootable USB from the ISO, then the file created is &lt;code&gt;sources\install.wim&lt;/code&gt;. Yes, it is possible to convert an &lt;code&gt;.esd&lt;/code&gt; to &lt;code&gt;.wim&lt;/code&gt;, but this way you don&apos;t need to bother, and your USB is formatted in a way it can fit larger files.&lt;/p&gt;
&lt;h2&gt;Step 2. Create a working directory&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;mkdir c:\MachineImaging
cd c:\MachineImaging
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 3. Mount the .WIM file&lt;/h2&gt;
&lt;p&gt;The Windows Image .WIM file is a special file format that can contain one or more Windows images. There&apos;s a tool built in to Windows - &lt;code&gt;DISM.EXE&lt;/code&gt; that is used for working with .WIM files. Conveniently, there&apos;s also a &lt;a href=&quot;https://learn.microsoft.com/powershell/module/dism/?view=windowsserver2025-ps&amp;amp;WT.mc_id=DOP-MVP-5001655&quot;&gt;Dism PowerShell module&lt;/a&gt; with equivalent cmdlets. I find these a bit friendlier to use, as you get parameter completion etc.&lt;/p&gt;
&lt;p&gt;We&apos;re going to copy the .WIM file from the ISO (or bootable USB we just created), but I&apos;m also going to extract out just the particular image index I plan to use. This will make things simpler later on.&lt;/p&gt;
&lt;p&gt;We can list all the images included in a .WIM file like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Get-WindowsImage -ImagePath d:\sources\install.wim
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;ImageIndex       : 1
ImageName        : Windows 11 Home
ImageDescription : Windows 11 Home
ImageSize        : 18,727,965,088 bytes

ImageIndex       : 2
ImageName        : Windows 11 Home N
ImageDescription : Windows 11 Home N
ImageSize        : 18,190,503,625 bytes

ImageIndex       : 3
ImageName        : Windows 11 Home Single Language
ImageDescription : Windows 11 Home Single Language
ImageSize        : 18,725,453,549 bytes

ImageIndex       : 4
ImageName        : Windows 11 Education
ImageDescription : Windows 11 Education
ImageSize        : 19,230,378,207 bytes

ImageIndex       : 5
ImageName        : Windows 11 Education N
ImageDescription : Windows 11 Education N
ImageSize        : 18,698,289,981 bytes

ImageIndex       : 6
ImageName        : Windows 11 Pro
ImageDescription : Windows 11 Pro
ImageSize        : 19,250,929,144 bytes

ImageIndex       : 7
ImageName        : Windows 11 Pro N
ImageDescription : Windows 11 Pro N
ImageSize        : 18,700,496,532 bytes

ImageIndex       : 8
ImageName        : Windows 11 Pro Education
ImageDescription : Windows 11 Pro Education
ImageSize        : 19,230,428,845 bytes

ImageIndex       : 9
ImageName        : Windows 11 Pro Education N
ImageDescription : Windows 11 Pro Education N
ImageSize        : 18,698,315,750 bytes

ImageIndex       : 10
ImageName        : Windows 11 Pro for Workstations
ImageDescription : Windows 11 Pro for Workstations
ImageSize        : 19,230,479,483 bytes

ImageIndex       : 11
ImageName        : Windows 11 Pro N for Workstations
ImageDescription : Windows 11 Pro N for Workstations
ImageSize        : 18,698,341,519 bytes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&quot;Windows 11 Pro&quot; has ImageIndex 6. That&apos;s the one I&apos;m interested in.&lt;/p&gt;
&lt;p&gt;Now we can export just that image:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Export-WindowsImage -SourceImagePath d:\sources\install.wim -SourceIndex 6 -DestinationImagePath install.wim -CompressionType max
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For good measure, we&apos;ll keep a &apos;known good version&apos; copy, so that if we discover our install has problems, we can roll back to the previous known good.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Copy-Item install.wim knowngood.wim
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 4. Add drivers&lt;/h2&gt;
&lt;p&gt;I should point out that I originally was following the instructions outlined in &lt;a href=&quot;https://web.archive.org/web/20250423213648/https://www.tenforums.com/tutorials/95008-dism-add-remove-drivers-offline-image.html&quot;&gt;this post&lt;/a&gt;. Those instructions cover how to capture the currently installed drivers on a machine, exporting them out, and then adding them to an install image. I tried this but my install hung. I&apos;m not really sure why - probably one of the drivers wasn&apos;t happy tring to install at OS install time? I&apos;m not sure - it should work in theory.&lt;/p&gt;
&lt;p&gt;So instead I remembered that most OEM manufacturers not only make the latest device drivers available for their hardware, but often they also provide a &apos;bundle&apos; download with all the current drivers in one .zip, intended for just this scenario.&lt;/p&gt;
&lt;p&gt;My current laptop is a Dell XPS 9530, and their Windows 11 Driver Pack is listed &lt;a href=&quot;https://www.dell.com/support/kbdoc/en-au/000214839/xps-15-9530-windows-11-driver-pack&quot;&gt;here&lt;/a&gt; with a download link. It 2.8GB!&lt;/p&gt;
&lt;p&gt;Unzip that into a subdirectory (c:\MachineImaging\DeployDriverPack)&lt;/p&gt;
&lt;p&gt;Now we can add all the drivers in one go using this command&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Add-WindowsDriver -Recurse -Path mount -Driver .\DeployDriverPack
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you&apos;re more conservative, you could add a single driver (by removing the &lt;code&gt;-Recurse&lt;/code&gt; parameter and changing the path) or just the audio drivers, and test out the image before adding more.&lt;/p&gt;
&lt;h2&gt;Step 5. Enable or disable Windows optional features&lt;/h2&gt;
&lt;p&gt;You also have the ability to select which Windows features are enabled or disabled by default.&lt;/p&gt;
&lt;p&gt;You can query what features are available and their current status using:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Get-WindowsOptionalFeature -Path mount | Sort-Object -Property FeatureName
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To enable a feature, do this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Enable-WindowsOptionalFeature -Path mount -FeatureName VirtualMachinePlatform
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(The &lt;code&gt;VirtualMachinePlatform&lt;/code&gt; feature is used by WSL, so by ensuring it is enabled that should mean that WSL installs quicker later on)&lt;/p&gt;
&lt;p&gt;I also enabled &lt;code&gt;Telnet&lt;/code&gt; and &lt;code&gt;NetFx4Extended-ASPNET45&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Likewise you can disable features that you don&apos;t anticipate needing using &lt;code&gt;Disable-WindowsOptionalFeature&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Step 6. Copy the updated WIM back to your USB&lt;/h2&gt;
&lt;p&gt;First we need to unmount the image:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Dismount-WindowsImage -Path mount -Save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will take a few minutes to complete. When it does, the &lt;code&gt;C:\MachineImaging\install.wim&lt;/code&gt; file will have grown quite a bit.&lt;/p&gt;
&lt;p&gt;Now copy this file back to the USB (assuming your bootable Windows USB drive is &lt;code&gt;E:&lt;/code&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Copy-Item install.wim E:\sources
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 7. Extra automation with an &lt;code&gt;autounattend.xml&lt;/code&gt; file&lt;/h2&gt;
&lt;p&gt;The image we&apos;ve got is a good start, but we&apos;re still going to be asked lots of questions during the install. Wouldn&apos;t it be nice to have most of those pre-answered? The way to do this is to create an &lt;a href=&quot;https://learn.microsoft.com/windows-hardware/manufacture/desktop/automate-windows-setup?view=windows-11&amp;amp;WT.mc_id=DOP-MVP-5001655&quot;&gt;&lt;code&gt;autounattend.xml&lt;/code&gt; file&lt;/a&gt;. There are Microsoft-provided tools to do this, which are included as part of the &lt;a href=&quot;https://learn.microsoft.com/windows-hardware/get-started/adk-install?WT.mc_id=DOP-MVP-5001655&quot;&gt;Windows ADK&lt;/a&gt;, but that&apos;s really intended for folks running large Windows networks.&lt;/p&gt;
&lt;p&gt;An easier alternative is this very nifty &lt;a href=&quot;https://schneegans.de/windows/unattend-generator/&quot;&gt;&lt;code&gt;autounattend.xml&lt;/code&gt; generator website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I set the following settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Language - English (Australian)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Home location - Australia&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Computer name&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Time zone - Adelaide&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use custom diskpart to configure Windows partition. In my case I know that partition 3 of disk 0 is where I want Windows to be installed, and I also want to do a clean format of the partition&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT DISK=0
SELECT PARTITION=3
FORMAT QUICK FS=NTFS LABEL=&quot;Windows&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use generic product key and install &apos;Pro&apos;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Always show file extensions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Show End task command in the taskbar&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure icons in the taskbar to just show Windows Explorer and Windows Terminal (Ideally I&apos;d pin a few other applications but they aren&apos;t installed until after the OS install so you can&apos;t use this for that)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;LayoutModificationTemplate xmlns=&quot;http://schemas.microsoft.com/Start/2014/LayoutModification&quot; xmlns:defaultlayout=&quot;http://schemas.microsoft.com/Start/2014/FullDefaultLayout&quot; xmlns:start=&quot;http://schemas.microsoft.com/Start/2014/StartLayout&quot; xmlns:taskbar=&quot;http://schemas.microsoft.com/Start/2014/TaskbarLayout&quot; Version=&quot;1&quot;&amp;gt;
&amp;lt;CustomTaskbarLayoutCollection PinListPlacement=&quot;Replace&quot;&amp;gt;
    &amp;lt;defaultlayout:TaskbarLayout&amp;gt;
    &amp;lt;taskbar:TaskbarPinList&amp;gt;
        &amp;lt;taskbar:DesktopApp DesktopApplicationID=&quot;Microsoft.Windows.Explorer&quot; /&amp;gt;
        &amp;lt;taskbar:UWA AppUserModelID=&quot;Microsoft.WindowsTerminal_8wekyb3d8bbwe!App&quot; /&amp;gt;        
    &amp;lt;/taskbar:TaskbarPinList&amp;gt;
    &amp;lt;/defaultlayout:TaskbarLayout&amp;gt;
&amp;lt;/CustomTaskbarLayoutCollection&amp;gt;
&amp;lt;/LayoutModificationTemplate&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disable widgets&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don&apos;t show Bing results&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove all pins in the start menu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable long paths&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow execution of PowerShell scripts&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hide Edge first run experience&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Delete empty c:\Windows.old folder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove bloatware&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3D Viewer&lt;/li&gt;
&lt;li&gt;Bing search&lt;/li&gt;
&lt;li&gt;Clock&lt;/li&gt;
&lt;li&gt;Cortana&lt;/li&gt;
&lt;li&gt;Family&lt;/li&gt;
&lt;li&gt;Get Help&lt;/li&gt;
&lt;li&gt;Handwriting&lt;/li&gt;
&lt;li&gt;Mail and Calendar&lt;/li&gt;
&lt;li&gt;Maps&lt;/li&gt;
&lt;li&gt;Math input&lt;/li&gt;
&lt;li&gt;Mixed reality&lt;/li&gt;
&lt;li&gt;Movies and TV&lt;/li&gt;
&lt;li&gt;News&lt;/li&gt;
&lt;li&gt;Office 365&lt;/li&gt;
&lt;li&gt;Paint&lt;/li&gt;
&lt;li&gt;Paint 3D&lt;/li&gt;
&lt;li&gt;People&lt;/li&gt;
&lt;li&gt;Photos&lt;/li&gt;
&lt;li&gt;Power Automate&lt;/li&gt;
&lt;li&gt;PowerShell ISE&lt;/li&gt;
&lt;li&gt;Quick Assist&lt;/li&gt;
&lt;li&gt;Skype&lt;/li&gt;
&lt;li&gt;Solitaire&lt;/li&gt;
&lt;li&gt;Speech&lt;/li&gt;
&lt;li&gt;Sticky notes&lt;/li&gt;
&lt;li&gt;Teams&lt;/li&gt;
&lt;li&gt;Tips&lt;/li&gt;
&lt;li&gt;To do&lt;/li&gt;
&lt;li&gt;Voice recorder&lt;/li&gt;
&lt;li&gt;Wallet&lt;/li&gt;
&lt;li&gt;Weather&lt;/li&gt;
&lt;li&gt;Windows Fax and Scan&lt;/li&gt;
&lt;li&gt;Windows media player&lt;/li&gt;
&lt;li&gt;Wordpad&lt;/li&gt;
&lt;li&gt;XBox apps&lt;/li&gt;
&lt;li&gt;Your Phone&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scripts to run when first user logs in after Windows has been installed (I&apos;m installing &lt;a href=&quot;https://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt;, as I&apos;ll be using that almost immediately once I sign in the first time).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&apos;https://community.chocolatey.org/install.ps1&apos;))
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;choco feature enable -n=allowGlobalConfirmation
choco feature enable -n=useRememberedArgumentsForUpgrades
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then download the file and save it in the root of your bootable USB&lt;/p&gt;
&lt;h2&gt;Step 8. Try it out&lt;/h2&gt;
&lt;p&gt;You will need to restart your target machine and get it to boot off the USB drive. For my laptop, the easiest way to do that is to hit &lt;kbd&gt;F12&lt;/kbd&gt; when the Dell logo appears while powering up. You may also have to go into your BIOS/UEFI settings to disable secure boot mode and enable booting from USB. The Rufus instructions suggest that it may work without disabling secure boot mode, but I did it anyway.&lt;/p&gt;
&lt;p&gt;If all goes well, you&apos;ll see a few different Windows installation screens, but won&apos;t get prompted where to install, which keyboard or location to use.&lt;/p&gt;
&lt;p&gt;You will still get some UI prompts that can&apos;t be avoided (like entering your Microsoft Account details), but at the end after a few reboots you should be greeted by a clean install of Windows, and if you check the Windows Device Manager, there should not be any unknown devices. Likewise, looking in Settings | Apps, should show either no or the bare minimum of applications. No bloatware to be seen!&lt;/p&gt;
&lt;p&gt;You&apos;ll still need to allow the latest Windows cumulative updates to install (adding that to the WIM file is a task for another day), and there may still be some driver updates that Windows discovers that are newer, but not too many.&lt;/p&gt;
&lt;p&gt;I timed it and the entire OS install process (including unavoidable manual steps) took only 15 minutes!&lt;/p&gt;
&lt;p&gt;After that you&apos;re ready to install and run &lt;a href=&quot;https://boxstarter.org/&quot;&gt;Boxstarter&lt;/a&gt; to install all your tools and other applications. You can see my Boxstarter scripts in this &lt;a href=&quot;https://gist.github.com/flcdrg/87802af4c92527eb8a30&quot;&gt;GitHub Gist&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Future plans&lt;/h2&gt;
&lt;p&gt;It&apos;s worth thinking about what else could be include in the custom Windows image or the autounattend.xml file, to further streamline the installation process. For example, the latest cumulative updates?&lt;/p&gt;
&lt;p&gt;The other part that would be great to automate is all the numerous tasks you need to perform to finish setting up application software, signing into things, setting up your web browser, have Git configured correctly, OneDrive(s) and the list goes on. Some of these (especially the signing in/authenticating) ones may always require manual intervention, but the others may be able to be scripted, if not totally then at least partially.&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/Windows-11-Logo-1000x404.B7euyBZy.jpg" width="1000" height="404"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/Windows-11-Logo-1000x404.B7euyBZy.jpg" width="1000" height="404"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2022/07/upgrading-to-windows11</id>
    <updated>2022-07-07T17:00:00.000+09:30</updated>
    <title>Upgrading to Windows 11 22H2 on the Release Preview channel</title>
    <link href="https://david.gardiner.net.au/2022/07/upgrading-to-windows11" rel="alternate" type="text/html" title="Upgrading to Windows 11 22H2 on the Release Preview channel"/>
    <category term="Synology"/>
    <category term="Windows 11"/>
    <published>2022-07-07T17:00:00.000+09:30</published>
    <summary type="html">I&apos;m on leave this week and was listening to episode 835 of the RunAs Radio podcast &quot;Updating Windows with Aria Carley&quot; while out on my morning walk. I&apos;ve been thinking about upgrading my main laptop to Windows 11 for a while now (Windows Update has indicated that it is compatible), but had been putting it off as my impression was that the initial release was possibly rushed out the door just a little bit early. Now that 22H2 is in the Release Preview channel, and scheduled for final release later this year, I figured it might not be too risky to give it a go given it&apos;s had a bit more spit and polish applied. …</summary>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-11.3i9WdB87_Z2e887z.webp&quot; alt=&quot;Windows 11 logo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I&apos;m on leave this week and was listening to episode &lt;a href=&quot;https://runasradio.com/Shows/Show/835&quot;&gt;835 of the RunAs Radio podcast&lt;/a&gt; &quot;Updating Windows with Aria Carley&quot; while out on my morning walk. I&apos;ve been thinking about upgrading my main laptop to Windows 11 for a while now (Windows Update has indicated that it is compatible), but had been putting it off as my impression was that the initial release was possibly rushed out the door just a little bit early. Now that &lt;a href=&quot;https://blogs.windows.com/windows-insider/2022/06/07/releasing-windows-11-version-22h2-to-the-release-preview-channel/&quot;&gt;22H2 is in the Release Preview channel&lt;/a&gt;, and scheduled for final release later this year, I figured it might not be too risky to give it a go given it&apos;s had a bit more spit and polish applied.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/can-run-windows11.BZDRqryV_Z1LRW2Q.webp&quot; alt=&quot;Screenshot from Windows Update - &amp;quot;Great news—your PC meets the minimum system requirements for Windows 11&amp;quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Steps to upgrade from Windows 10 to Windows 11 Release Preview&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If you&apos;re at all cautious, make sure you have a good backup first. I verified that Synology Active Backup for Business had a current backup of this machine, and for good measure, I clicked on the &lt;strong&gt;Version&lt;/strong&gt; button and &lt;em&gt;locked&lt;/em&gt; the latest backup to preserve it in case I wanted to roll back to a known good state in the future.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/synology-active-backup-versions-02.BKTfOj0X_Z1N65KD.webp&quot; alt=&quot;Screenshot of Synology Active Backup for Business &apos;Backup Version Information&apos; dialog&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the Windows menu, launch &lt;strong&gt;Settings&lt;/strong&gt;, then &lt;strong&gt;Windows Update&lt;/strong&gt; and &lt;strong&gt;Windows Insider Programme&lt;/strong&gt; (Yes, I&apos;ve got the Australia/British English language settings). From here you can choose to join the Windows Insider Program. Click on &lt;strong&gt;Get started&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-01.Cx639Vgg_Z1OMiAj.webp&quot; alt=&quot;Screenshot from Windows Update, Windows Insider Programme &amp;quot;Windows Insider Programme. Join the Windows Insider Programme to get preview builds of Windows 10 and provide feedback to help make Windows better.&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on &lt;strong&gt;Link an account&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-02.DkCKZrxP_Zw3Vr.webp&quot; alt=&quot;Screenshot of dialog &amp;quot;Choose an account to get started&amp;quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the account you want to use&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-03.iH1CDmzy_Z2qUDJa.webp&quot; alt=&quot;Screenshot of dialog for choosing an account&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now you get to choose which Insider channel you want to join. I chose &lt;strong&gt;Release Preview&lt;/strong&gt; but you could choose &lt;strong&gt;Dev Channel&lt;/strong&gt; or &lt;strong&gt;Beta Channel&lt;/strong&gt; if you prefer.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-04.D9jfYcFh_2tCdmn.webp&quot; alt=&quot;Screenshot of the dialog &amp;quot;Choose your Insider settings&amp;quot;, with &amp;quot;Release preview&amp;quot; highlighted&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One final chance to confirm (and review the &lt;a href=&quot;https://www.microsoft.com/en-ca/privacy/privacystatement&quot;&gt;privacy statement&lt;/a&gt; and &lt;a href=&quot;https://www.microsoft.com/en-us/windowsinsider/program-agreement&quot;&gt;programme agreement&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-05.C8mcNzcl_Z226rAG.webp&quot; alt=&quot;Screenshot of the final confirmation dialog&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now restart your computer!&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-06.D9T-A27K_sL6Hp.webp&quot; alt=&quot;Screenshot of prompt to restart your computer&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After rebooting, you&apos;re still running Windows 10, but if we go to &lt;strong&gt;Windows Update&lt;/strong&gt; again and click &lt;strong&gt;Check for updates&lt;/strong&gt;, you&apos;ll now see a new section indicating that Windows 11, version 22H2 is available.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-07.BhAoPSYC_1E9zFO.webp&quot; alt=&quot;Screenshot of Windows Update, showing &apos;Windows 11, version 22H2 is ready&apos;&quot; /&gt;&lt;/p&gt;
&lt;p&gt; Because I&apos;d clicked &lt;strong&gt;Check for updates&lt;/strong&gt;, it automatically started to download the Cumulative Update Preview (as you can see in the image above). But clicking on the &lt;strong&gt;Download and install&lt;/strong&gt; button halted that and instead Windows 11 started downloading.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-08.Cn5wrF4l_Z1SnQCf.webp&quot; alt=&quot;Screenshot of Windows Update downloading Windows 11 22H2&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, the download completes and Windows Update is ready to restart to begin installing Windows 11.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-09.BWXjtiiF_Z2mQlti.webp&quot; alt=&quot;Screenshot of Windows Update with the &apos;Restart now&apos; button&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After a few minutes (I grabbed some lunch at this point so I&apos;m not sure exactly how many), you can now sign in to Windows 11. Just to confirm this, I launched &lt;code&gt;winver.exe&lt;/code&gt; to check (if the centred Start menu wasn&apos;t already a clue!) that we are indeed running Windows 11.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-10.TgumgA43_1129K0.webp&quot; alt=&quot;Screenshot of &apos;About Windows&apos; app, showing &amp;quot;Windows 11 Microsoft Windows Version 22H2 (OS Build 22621.169)&amp;quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For good measure, launch the &lt;strong&gt;Microsoft Store&lt;/strong&gt; app, then &lt;strong&gt;Library&lt;/strong&gt; and &lt;strong&gt;Get update&lt;/strong&gt; to bring all your store apps up to date.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/windows-insider-11.JezRcWTe_2usRVO.webp&quot; alt=&quot;Screenshot of Microsoft Store app, showing updates being downloaded&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you use WSL, then run &lt;code&gt;wsl --update&lt;/code&gt; to upgrade to the latest version. Before I did this, the output of &lt;code&gt;wsl --status&lt;/code&gt; was:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Default Distribution: Ubuntu-20.04
Default Version: 2

Windows Subsystem for Linux was last updated on 28/03/2022
WSL automatic updates are on.

Kernel version: 5.10.102.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But after &lt;code&gt;wsl --update&lt;/code&gt; it now displays:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Default Distribution: Ubuntu-20.04
Default Version: 2
WSL version: 0.61.8.0
Kernel version: 5.10.102.1
WSLg version: 1.0.39
MSRDC version: 1.2.3213
Direct3D version: 1.601.0
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22621.169
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And with that, I&apos;m up and running Windows 11 22621.169 (which was the &lt;a href=&quot;https://learn.microsoft.com/windows-insider/flight-hub/?WT.mc_id=DOP-MVP-5001655&quot;&gt;latest version of Windows 11 available to the Release Preview channel&lt;/a&gt; at the time of writing)&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/windows-11.3i9WdB87.png" width="450" height="330"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/windows-11.3i9WdB87.png" width="450" height="330"/>
  </entry>
</feed>
