Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

IT Support & Help Desk Fundamentals  Module 5 – Windows client administration

Windows apps, drivers and Device Manager

Install apps with the Store, WinGet and installers, explain Arm64 and x86 emulation, read Device Manager problem codes and fix a stuck device.

  • Intermediate
  • 20 minutes
  • Examples run with Python 3.14.8 and Pyodide 314.0.7
  • By MySmartCoPilot
Free lesson, Pro answers: 20 minutes
Free: the whole lesson. With a pass: the model answers to its 2 interview questions.

What you will learn

  • Install, update and remove apps with the Store, WinGet and installers
  • Explain 32-bit, 64-bit and Arm64 compatibility and emulation
  • Read Device Manager problem codes and fix a bad driver
  • Test an unknown installer in Windows Sandbox before it reaches a user

Before you start

What you’ll learn · Before you start

What you will learn

  • Install, update and remove apps with the Store, WinGet and installers
  • Explain 32-bit, 64-bit and Arm64 compatibility and emulation
  • Read Device Manager problem codes and fix a bad driver
  • Test an unknown installer in Windows Sandbox before it reaches a user

Before you start

On this page

A user needs an app, a laptop has lost its Wi-Fi after an update, and a stranger has emailed a setup file marked urgent. Three everyday tickets, and each one turns on the same three skills: where software comes from, how Windows runs it, and what to do when a device stops working. A wrong choice is expensive here: an x64 driver copied to a new Arm laptop will not load at all, and one unchecked installer can reach every PC behind the first.

The sections below walk that path in order. You will pick an install source on purpose, see why a 64-bit app can run on an Arm laptop while its driver cannot, turn a Device Manager problem code into a plan, work the driver fix ladder from its safest step, and test an unknown installer in a throwaway desktop before it touches a real PC.

Install sources, and why the managed one wins

A user asks for a PDF editor. You can put it on their PC from four places, and the place decides who keeps it updated and whether you can remove it cleanly later. The Microsoft Store and your organisation’s company portal are managed sources: the Store updates its apps on its own, and the portal lets an administrator push, update and remove an app across every PC at once. winget: The Windows Package Manager command-line tool. Running winget upgrade lists installed apps that have a newer version, and winget upgrade --all installs them. More in “Updates, patches and drivers without surprises” is the command line for the same job on one PC or, in a script, across many: winget search finds an app, winget install adds it, winget list shows what is installed and whether an upgrade is available, winget upgrade updates it and winget uninstall removes it. A vendor installer — an MSI, an MSIX package: A modern Windows app package format that installs and uninstalls cleanly and can update through a store or a managed source, unlike a plain setup EXE. package or a plain setup .exe you download — leaves every update and removal to you.

Prefer a managed source when you have the choice. An app that arrived through the Store, the portal or WinGet can be updated and removed the same way later; an app from a setup .exe is known only to the PC it landed on, so it drifts out of date and has to be hunted down by hand when the user leaves. The question below turns four sources into one decision from three facts about the ticket.

Interactive · answer and compare Where should this app come from? Answer three questions about the ticket; each answer rules sources out or adds a caveat, with the reason.
Is the PC centrally managed by your organisation?
Is the app in the Store or your company portal?
Must updates arrive without anyone touching the PC?

Answer the questions above: the table then marks what fits your case and says why the rest does not.

Four install sources against four things that decide the choice
Install source Keeps updating Removes cleanly Fits a managed PC You pick the version
Microsoft Store What you use: the Store app or winget Good The Store updates its apps on its own in the background Good Uninstall from Settings removes it cleanly Mixed An admin may limit the Store to allowed apps only Poor You get the Store's current version, not one you pin
Company portal What you use: the organisation's app portal Good The organisation pushes updates and can require them Good An admin can remove it from the PC remotely Good Built for managed PCs; shows only allowed apps Good The admin pins the version everyone receives
WinGet What you use: the winget command line Good winget upgrade updates it, and the command scripts across PCs Good winget uninstall removes it by the same package id Mixed Allowed when your source and policy permit it Good Pin a version, or take the latest on purpose
Vendor installer What you use: an MSI, MSIX or setup .exe Poor Each app updates itself, or nobody does Mixed Removal depends on the installer the vendor wrote Poor Nothing central knows the app is on the PC Good You install the exact build you downloaded
How the answers decide
  • “Is the PC centrally managed by your organisation?” Yes, it is managed and “Is the app in the Store or your company portal?” Yes, it is listed there: rules out Vendor installer. A managed PC should take the app from the source the admin controls, so updates and removal stay central.
  • “Is the app in the Store or your company portal?” No, it is not: rules out Microsoft Store and Company portal and adds a caveat to Vendor installer. If the app is in neither the Store nor the portal, WinGet is the scriptable choice; a vendor installer only when it lives nowhere else.
  • “Must updates arrive without anyone touching the PC?” Yes, updates must be automatic: rules out Vendor installer. A vendor installer leaves each app to update itself; the managed sources and the Store keep updating on their own.

In short: a managed PC takes the app from the portal or the Store so the organisation keeps control; WinGet is the quick, scriptable choice when an app is not in either; and a vendor installer is the last resort, for software that lives nowhere else.

Key idea

Choose the most managed source the app is available from, so that updates and clean removal stay possible long after you install it.

Checkpoint

Check: Choosing an install source

  1. One question A managed laptop needs an app that is in the company portal. Why take it from the portal rather than a setup .exe from the vendor's site?

    Choose one answer.

    A hint

    Think about who updates and removes the app six months from now.

    Show the answer: One question

    Answer: The portal keeps the app updated and lets an admin remove it later; a setup .exe leaves both to whoever installed it

    A managed source such as the company portal keeps updates and removal in the organisation's hands long after the install. A vendor .exe is known only to the PC it landed on, so it drifts out of date and must be hunted down by hand.

What runs on x64, and what Arm64 must emulate

A desk now hands out two kinds of laptop: the familiar Intel and AMD machines, whose processors use the The processor family of Intel and AMD chips, built in 32-bit (x86) and 64-bit (x64) forms. Software built only for it needs translation to run on Arm chips. instruction set, and newer Windows on Arm laptops, whose processors use Arm64: The 64-bit Arm processor family of Apple silicon Macs, Windows on Arm laptops, phones and many servers. Software built only for x86-64 needs translation to run on it. More in “Inside a computer: CPU, RAM, board and GPU”. The same app behaves differently on each, and the rules are worth knowing exactly.

On a 64-bit x64 PC, 64-bit apps run as they are, and 32-bit x86 apps run through WOW64 is the subsystem Microsoft describes as the x86 emulator that lets 32-bit Windows applications run on 64-bit Windows, kept apart from 64-bit code., which Microsoft calls “the x86 emulator that allows 32-bit Windows-based applications to run seamlessly on 64-bit Windows”. On a Windows on Arm PC, Arm64 apps run natively, and both x86 and x64 apps run under Prism: The emulator in Windows 11, version 24H2 that runs x86 and x64 apps on Windows on Arm by translating their instructions to Arm64 as they run., the emulator introduced in Windows 11, version 24H2, which translates their instructions to Arm64 as they run. The catch sits in one sentence of Microsoft’s page: emulation “only supports user mode code and doesn’t support drivers”, and “any kernel mode components must be compiled as Arm64”. A device driver: The software that lets Windows talk to a piece of hardware. Kernel-mode drivers run inside the operating system, so a faulty one can stop the device or the whole PC. runs in kernel mode: The privileged processor state the operating system core and device drivers run in, with direct access to hardware; a fault here can crash the whole PC., not user mode: The restricted processor state that ordinary applications run in, kept away from hardware and the operating system core; emulation on Windows on Arm covers only this code., so an x64 driver that works perfectly on an x64 laptop will not load on an Arm64 one. Step through where each thing lands:

Interactive · step by step What runs on an x64 PC and on an Arm64 PC Step through five pieces of software and see where each one runs natively, is emulated, or does not run at all.
What runs on an x64 PC and on an Arm64 PC, step 5 of 5. Showing On an x64 PC, On an Arm64 PC, x86 app (runs via WOW64), x86 app (emulated (x86)), x64 app (runs natively), x64 app (Prism emulation), Arm64 app (does not run), Arm64 app (runs natively), x64 driver (loads natively), x64 driver (does not load). In focus: x64 driver, x64 driver.On an x64 PCOn an Arm64 PCx86 appruns via WOW64x86 appemulated (x86)x64 appruns nativelyx64 appPrism emulationArm64 appdoes not runArm64 appruns nativelyx64 driverloads nativelyx64 driverdoes not loadmust be built for Arm64

The drawing shows the whole scene; its 5 steps are listed below.

Every step as text
  1. Two kinds of PC. The left column is a 64-bit x64 PC (Intel or AMD); the right is a Windows on Arm PC. The same software can land differently on each.
  2. A 32-bit x86 app. A 32-bit x86 app runs on both: on the x64 PC through WOW64, and on the Arm PC through emulation, which uses the same WOW64 x86 layer.
  3. A 64-bit x64 app. A 64-bit x64 app runs natively on the x64 PC. On the Arm PC it runs under Prism, the Windows 11 24H2 emulator, which translates it as it runs.
  4. An Arm64 app. An Arm64 app runs natively on the Arm PC. The x64 PC has no Arm emulation, so the Arm64 app does not run there at all.
  5. A kernel-mode driver. A driver runs in kernel mode, which emulation does not cover. The x64 driver loads on the x64 PC but not on the Arm PC, where a driver must be built for Arm64.

The sample below places five pieces of software — three apps and two drivers — on an x64 PC and on an Arm64 PC, and prints the rule behind each verdict. It is a small decision engine, not a capture from a machine.

Where each app and driver runs Python · arch_check.py
r"""Decide where sample apps and drivers run on an x64 PC and on an Arm64 PC.

The rules are exactly as Microsoft's pages state them:
- "WOW64 is the x86 emulator that allows 32-bit Windows-based applications to
  run seamlessly on 64-bit Windows" ("Running 32-bit Applications").
- Windows 11 on Arm runs Arm64 apps natively and emulates x86 and x64 apps;
  the 24H2 emulator is named Prism. "Emulation only supports user mode code
  and doesn't support drivers. Any kernel mode components must be compiled as
  Arm64" ("How emulation works on Arm").
Each verdict prints the rule it used, so nothing is a bare label.
"""

# (name, built-for architecture, kind): the sample software to place.
SAMPLES = [
    ("Spreadsheet app", "x86", "app"),
    ("Video editor", "x64", "app"),
    ("Arm-native browser", "arm64", "app"),
    ("Printer driver", "x64", "driver"),
    ("Touchpad driver", "arm64", "driver"),
]


def on_x64(arch, kind):
    """Verdict on x64 (Intel or AMD) Windows."""
    if arch == "x64":
        verb = "Runs natively" if kind == "app" else "Loads natively"
        return verb, "x64 Windows runs 64-bit x64 code natively"
    if arch == "x86":
        if kind == "app":
            return "Runs through WOW64", "x64 Windows runs 32-bit x86 apps through WOW64"
        return "Does not load", "a kernel-mode driver on x64 Windows must be 64-bit"
    verb = "Does not run" if kind == "app" else "Does not load"
    return verb, "x64 Windows has no Arm emulation"


def on_arm64(arch, kind):
    """Verdict on Windows 11 on Arm, version 24H2 (Prism)."""
    if arch == "arm64":
        verb = "Runs natively" if kind == "app" else "Loads natively"
        return verb, "Windows on Arm runs Arm64 code natively"
    if kind == "driver":
        return "Does not load", "emulation is user-mode only, so a driver must be Arm64"
    if arch == "x86":
        return "Runs under emulation", "Windows on Arm emulates x86 apps (the WOW64 x86 layer)"
    return "Runs under Prism emulation", "Windows 11 24H2 emulates x64 apps with Prism"


def main():
    for name, arch, kind in SAMPLES:
        print(f"{name} ({arch} {kind})")
        for label, decide in (("x64 PC  ", on_x64), ("Arm64 PC", on_arm64)):
            verdict, rule = decide(arch, kind)
            print(f"  {label}: {verdict}")
            print(f"            rule: {rule}")
        print()


if __name__ == "__main__":
    main()

Output

Spreadsheet app (x86 app)
  x64 PC  : Runs through WOW64
            rule: x64 Windows runs 32-bit x86 apps through WOW64
  Arm64 PC: Runs under emulation
            rule: Windows on Arm emulates x86 apps (the WOW64 x86 layer)

Video editor (x64 app)
  x64 PC  : Runs natively
            rule: x64 Windows runs 64-bit x64 code natively
  Arm64 PC: Runs under Prism emulation
            rule: Windows 11 24H2 emulates x64 apps with Prism

Arm-native browser (arm64 app)
  x64 PC  : Does not run
            rule: x64 Windows has no Arm emulation
  Arm64 PC: Runs natively
            rule: Windows on Arm runs Arm64 code natively

Printer driver (x64 driver)
  x64 PC  : Loads natively
            rule: x64 Windows runs 64-bit x64 code natively
  Arm64 PC: Does not load
            rule: emulation is user-mode only, so a driver must be Arm64

Touchpad driver (arm64 driver)
  x64 PC  : Does not load
            rule: x64 Windows has no Arm emulation
  Arm64 PC: Loads natively
            rule: Windows on Arm runs Arm64 code natively

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 arch_check.py

The x64 app runs natively on the x64 PC and under Prism emulation on the Arm64 one; the x64 printer driver loads on the x64 PC but not on the Arm64 PC, where it reports “Does not load” because a driver must be built for Arm64. Change the SAMPLES list and run it again to test a case from your own fleet.

Assuming a working driver is portable

An x64 printer or dock driver that is fine on every Intel laptop will not load on a Windows on Arm machine. Apps are emulated; drivers are not. Look for an Arm64 driver from the maker before you promise the hardware will work.

Checkpoint

Check: x64, Arm64 and emulation

  1. Question 1 of 2 On a 64-bit x64 PC, a 32-bit x86 app runs through what?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: WOW64

    On x64 Windows, 64-bit apps run as they are and 32-bit x86 apps run through WOW64, the x86 subsystem built into the operating system.

  2. Question 2 of 2 A dock's driver is published only as a 64-bit x64 build. Does it load on a Windows on Arm laptop?

    Choose one answer.

    A hint

    Emulation on Arm covers one kind of code and not the other.

    Show the answer: Question 2 of 2

    Answer: No; emulation covers user-mode code only, so a driver must be built for Arm64

    Emulation on Windows on Arm runs user-mode apps, so an x64 app works under Prism. A driver runs in kernel mode, which emulation does not cover, so an x64 driver does not load and the maker must supply an Arm64 build.

Device Manager shows a code for every stuck device

When Windows cannot use a device, Device Manager marks it with a yellow exclamation point and, in the device’s Properties, shows a short message with a problem code: The number Device Manager shows for a device it cannot use, such as Code 28, each mapped to a message and a cause in Microsoft's documentation.. The code is the fastest way to tell a dead device from a disabled or undriven one. Four codes cover most tickets, and Microsoft gives each an exact message:

Code Message Windows shows What it usually means
10 This device cannot start. (Code 10) The driver loaded but the device would not start; often a driver or firmware fault
22 This device is disabled. (Code 22) Someone, or a policy, turned the device off; enable it
28 The drivers for this device are not installed. (Code 28) No working driver is present; install or update it
43 Windows has stopped this device because it has reported problems. (Code 43) The device told Windows it had failed; reseat, repower or replace it

You do not always have the screen in front of you. Over a remote session, pnputil /enum-devices /problem lists every device with a problem from the command line, and pnputil /enum-devices /problem 28 lists only those with a chosen code. PnPUtil is in every Windows install and needs an administrator prompt. The sample below is written as Label: value lines with the fields a technician reads: Instance ID, Device Description, Status and the problem code. Microsoft’s PnPUtil page documents the command and its filters but shows no sample of this output, so the program reads only the labels it knows and ignores the rest. It reads three devices and prints each code’s message:

Problem codes to Windows' own messages Python · devices.py
r"""Map Device Manager problem codes to the messages Windows shows.

The SAMPLE below is written in the key: value layout that
`pnputil /enum-devices /problem` prints, using the field names Microsoft
documents (Instance ID, Device Description, Status) with the problem code the
/problem filter adds. It is a sample written in that layout, not a capture
from any PC.
"""

# The message each problem code shows, quoted from Microsoft's
# "Error codes in Device Manager in Windows".
MESSAGES = {
    10: "This device cannot start. (Code 10)",
    22: "This device is disabled. (Code 22)",
    28: "The drivers for this device are not installed. (Code 28)",
    43: "Windows has stopped this device because it has reported problems. (Code 43)",
}

SAMPLE = r"""
Instance ID:        USB\VID_045E&PID_00DB\5&2B3F1A09&0&2
Device Description: USB Audio Device
Class Name:         MEDIA
Status:             Disabled
Problem Code:       22

Instance ID:        PCI\VEN_8086&DEV_1502\3&11583659&0&C8
Device Description: Ethernet Controller
Class Name:         Net
Status:             Error
Problem Code:       28

Instance ID:        USB\VID_0781&PID_5581\0401A1B2C3D4
Device Description: USB Mass Storage Device
Class Name:         USBSTOR
Status:             Error
Problem Code:       43
"""


def records(text):
    """Split the listing into devices (blank-line separated), each a dict of fields."""
    for block in text.strip().split("\n\n"):
        fields = {}
        for line in block.splitlines():
            if ":" in line:
                key, value = line.split(":", 1)
                fields[key.strip()] = value.strip()
        if fields:
            yield fields


def main():
    for dev in records(SAMPLE):
        code = int(dev["Problem Code"])
        meaning = MESSAGES.get(code, f"Problem code {code}")
        print(f'{dev["Device Description"]}  [{dev["Status"]}]')
        print(f'  {dev["Instance ID"]}')
        print(f"  Code {code}: {meaning}")
        print()


if __name__ == "__main__":
    main()

Output

USB Audio Device  [Disabled]
  USB\VID_045E&PID_00DB\5&2B3F1A09&0&2
  Code 22: This device is disabled. (Code 22)

Ethernet Controller  [Error]
  PCI\VEN_8086&DEV_1502\3&11583659&0&C8
  Code 28: The drivers for this device are not installed. (Code 28)

USB Mass Storage Device  [Error]
  USB\VID_0781&PID_5581\0401A1B2C3D4
  Code 43: Windows has stopped this device because it has reported problems. (Code 43)

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 devices.py

The run shows a disabled audio device (Code 22), a network adapter with no driver (Code 28) and a mass-storage device Windows stopped (Code 43) — exactly the three a technician would triage first. Each line carries the instance id you would hand to pnputil or to a driver tool.

Checkpoint

Check: Device Manager problem codes

  1. Question 1 of 2 Device Manager shows a device with Code 28. What does that mean?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: The drivers for this device are not installed

    Code 28 is "The drivers for this device are not installed": the hardware is detected but has no driver, so the first move is to install or update one.

  2. Question 2 of 2 You are on a remote session with no screen sharing. Which command lists every device that has a problem code?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: pnputil /enum-devices /problem

    pnputil /enum-devices /problem lists devices with a problem from the command line, and pnputil /enum-devices /problem 28 narrows the list to one code, which is handy over a remote session.

A driver is fixed from the safest rung up

Once a code points at a driver, fix it from the safest rung up, undoing as little as possible. If the trouble began right after a driver update, a driver rollback: Replacing a device's current driver with the version installed just before it, from the device's Properties in Device Manager, to undo a bad driver update. is first: the device’s Properties in Device Manager keep the previous driver and can put it back in one step, with nothing downloaded. If there was no recent update, or rollback is greyed out, update the driver from Windows Update or the maker’s own tool. If updating does not help, uninstall the device and scan for hardware changes so Windows detects it fresh and reinstalls its driver. Only when the device still shows a code after all three — a sign of failed hardware or a deeper fault — do you escalate, with the code and every step attached.

Interactive · stage by stage The driver fix ladder Step through the fixes from the safest up, re-checking the device's code after each change.
The driver fix ladder, step 5 of 5. Showing Device shows a code, Roll back the driver, Update the driver, Uninstall and rescan, Escalate with notes. In focus: Escalate with notes.check againDevice shows a codein Device ManagerRoll back the driverif an update broke itUpdate the drivervia Windows UpdateUninstall and rescanlet Windows redetectEscalate with notescode plus every step

The drawing shows the whole scene; its 5 steps are listed below.

Every step as text
  1. Start from the code. A device shows a problem code. Note it and the device, then fix from the least disruptive step: you want to undo as little as possible.
  2. Roll back first. If the trouble began right after a driver update, roll back: the previous driver is kept in the device Properties and goes back in one step, with nothing downloaded.
  3. Then update. If there was no recent update, or rollback is greyed out, update the driver from Windows Update or the maker's own tool to get a newer, correct one.
  4. Then uninstall and rescan. If updating does not help, uninstall the device and scan for hardware changes, so Windows detects it fresh and reinstalls its driver.
  5. Re-check, then escalate. Re-check the code after each change. Only when it remains after all three — a sign of failed hardware or a deeper fault — do you escalate, with the code and every step attached.

Each rung is more disruptive than the one before, which is why the order matters: a rollback touches one driver, while an uninstall-and-rescan briefly removes the device. Work one change at a time and re-check the code after each, so you know which step fixed it.

Key idea

Fix a driver from the least disruptive step up — roll back, then update, then uninstall and rescan — and re-check the code after each change.

The one order to resist is the tempting shortcut of removing a device the instant it misbehaves.

Reinstalling before rolling back

Uninstalling a device the moment a code appears throws away the one driver that was working. If a recent update caused it, roll back first: it is faster and it keeps the known-good driver on the PC.

Checkpoint

Check: The driver fix ladder

  1. One question A monitor broke right after a graphics driver update. Which step do you try first on the fix ladder?

    Choose one answer.

    A hint

    Which step undoes the least and downloads nothing?

    Show the answer: One question

    Answer: Roll back the driver to the version from just before the update

    When the trouble began right after a driver update, rollback is first: it undoes exactly that change, keeps the previous driver and needs no download. Update and uninstall-and-rescan come only if it does not help.

Check an unknown installer before it runs

A user forwards a setup file “from the vendor”, or a download that a browser flagged. Before it runs anywhere near a real PC, confirm two things in order: that it is really from the publisher it claims, and that it is the exact file the vendor published. Right-click the file, open Properties and read the Digital Signatures tab: an unsigned installer, or one whose listed publisher you do not recognise, is reason enough to stop. Then compare its hash. Get-FileHash computes a file’s hash and, as Microsoft’s documentation states, “uses the SHA256 algorithm” by default; a single changed byte changes the whole value, so a hash that matches the vendor’s published SHA-256 proves the file arrived intact.

Even a signed file with a matching hash can misbehave on first run. That is what Windows Sandbox: A disposable, isolated Windows desktop on the Pro, Enterprise and Education editions; everything inside it is discarded when it closes, so an unknown installer leaves no trace. is for: a disposable desktop on Windows Pro, Enterprise and Education that, in Microsoft’s words, is “as clean as a brand-new installation of Windows” and discards “everything” when it closes. Install the app there, watch what it does, and nothing reaches the host. It needs virtualization enabled in the BIOS and modest resources — Microsoft lists at least 4 GB of RAM, 1 GB of spare disk space and two CPU cores.

Interactive · stage by stage Check an unknown installer before it runs Step through the checks in order; a failed check sends you back to discard the file, not forward.
Check an unknown installer before it runs, step 5 of 5. Showing Get the installer, Check the signature, Match the SHA-256, Run in the Sandbox, Install for the user. In focus: Run in the Sandbox, Install for the user.mismatch: discardGet the installerfrom the vendor onlyCheck the signaturepublisher trusted?Match the SHA-256with Get-FileHashRun in the Sandboxa throwaway desktopInstall for the useronce it checks out

The drawing shows the whole scene; its 5 steps are listed below.

Every step as text
  1. Get it from the vendor. Download the installer from the vendor's own site, not a link in an email. A file "from the vendor" that arrived another way is exactly what needs checking.
  2. Check the signature. Open Properties and read the Digital Signatures tab. An unsigned file, or one whose listed publisher you do not recognise, is reason enough to stop.
  3. Match the hash. Run Get-FileHash, which uses SHA-256 by default, and compare the value with the one the vendor published. A single changed byte changes the whole hash.
  4. Wrong? Discard it. If the signature is missing or the hash does not match, the file is not safe to install. Discard it and confirm with the real vendor through a known contact.
  5. Test, then install. A signed file with a matching hash still runs first in Windows Sandbox, a disposable desktop that discards everything on close. If it behaves, install it for the user.

MySmartCoPilot’s hash generator computes a file’s SHA-256 so you can compare it with the vendor’s value, and the file safety inspector reads what a file declares about itself. Both check the file; only the Sandbox shows how it behaves.

Stop and ask, never 'Run anyway'

When a signature is missing or a hash does not match, the file is not safe to install, however urgent the message sounds. Report it and confirm with the real vendor through a known contact. Testing in the Sandbox is for software you have reason to trust, not a way to run something you do not.

Checkpoint

Check: Checking an unknown installer

  1. Question 1 of 2 You run Get-FileHash on an installer and it matches the vendor's published SHA-256. What has that proved, and what has it not?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: It proves the file arrived intact and unaltered; it does not prove the app is safe to run

    Get-FileHash uses SHA-256 by default, and one changed byte changes the whole value, so a match proves the file is the one the vendor published. It still says nothing about how the app behaves, which is what the Sandbox is for.

  2. Question 2 of 2 What happens to everything you install inside Windows Sandbox when you close it?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: It is all discarded; the next launch is a clean Windows again

    Windows Sandbox is a disposable desktop: close it and everything inside is discarded, so an unknown installer leaves no trace on the real PC.

Practise: list the stuck devices

Every driver ticket starts the same way: read a pnputil /enum-devices /problem report and pull out the devices that need attention. Write problem_devices(pnputil_text) so that it returns each problem device as a tuple of its instance id, description, code and Windows’ message, skipping the healthy ones. The sample tests cover the four common codes, a healthy device that must be left out, and an unknown code. Then check yourself on the whole lesson.

Exercise · Medium · Python

List the stuck devices in a pnputil report

Write problem_devices(pnputil_text) so that it turns a pnputil /enum-devices /problem report into a short list a technician can act on.

The report lists devices one after another, separated by a blank line. Each device is a set of Label: value lines, for example Instance ID, Device Description, Class Name, Status and, when the device is in trouble, a Problem Code. Return a list of tuples, in the order the devices appear, one tuple per device that has a problem:

(instance_id, description, code, meaning)

  • A device has a problem when its Status is Disabled or Error, or when it has a Problem Code line. A device whose Status is Started and that has no Problem Code is healthy: leave it out.
  • code is the problem code as an integer; meaning is the message Windows shows for that code:
    • 10 → This device cannot start. (Code 10)
    • 22 → This device is disabled. (Code 22)
    • 28 → The drivers for this device are not installed. (Code 28)
    • 43 → Windows has stopped this device because it has reported problems. (Code 43)
    • any other code → Unknown problem code (Code <n>) with the number in place of <n>.
  • Values can carry extra spaces after the colon; trim them. Ignore blank lines between devices.

For example, a report with a Started keyboard, a Disabled audio device (code 22) and an Error network adapter (code 28) returns two tuples: the audio device, then the network adapter.

Starter code · problem_devices.py

def problem_devices(pnputil_text):
    """Return (instance_id, description, code, meaning) for each device with a problem.

    Devices appear one after another, separated by a blank line, as
    `Label: value` lines. Keep the order they appear in.
    """
    return []
The sample tests · test_problem_devices.py
from problem_devices import problem_devices

THREE = r"""
Instance ID:        HID\VID_413C&PID_2113\6&1A2B3C4D&0&0000
Device Description: HID Keyboard Device
Class Name:         Keyboard
Status:             Started

Instance ID:        USB\VID_045E&PID_00DB\5&2B3F1A09&0&2
Device Description: USB Audio Device
Class Name:         MEDIA
Status:             Disabled
Problem Code:       22

Instance ID:        PCI\VEN_8086&DEV_1502\3&11583659&0&C8
Device Description: Ethernet Controller
Class Name:         Net
Status:             Error
Problem Code:       28
"""


def test_skips_healthy_device():
    """a Started device with no problem code is left out"""
    result = problem_devices(THREE)
    assert len(result) == 2
    assert all(descr != "HID Keyboard Device" for _, descr, _, _ in result)


def test_keeps_report_order():
    """the devices come back in the order they appear"""
    result = problem_devices(THREE)
    assert result[0][1] == "USB Audio Device"
    assert result[1][1] == "Ethernet Controller"


def test_maps_each_message():
    """every documented code maps to Windows' own message"""
    text = (
        "Instance ID:        A1\n"
        "Device Description: Graphics\n"
        "Status:             Error\n"
        "Problem Code:       10\n\n"
        "Instance ID:        A2\n"
        "Device Description: Sound\n"
        "Status:             Disabled\n"
        "Problem Code:       22\n\n"
        "Instance ID:        A3\n"
        "Device Description: Wi-Fi\n"
        "Status:             Error\n"
        "Problem Code:       28\n\n"
        "Instance ID:        A4\n"
        "Device Description: Storage\n"
        "Status:             Error\n"
        "Problem Code:       43\n"
    )
    result = problem_devices(text)
    meanings = {code: meaning for _, _, code, meaning in result}
    assert meanings[10] == "This device cannot start. (Code 10)"
    assert meanings[22] == "This device is disabled. (Code 22)"
    assert meanings[28] == "The drivers for this device are not installed. (Code 28)"
    assert meanings[43] == "Windows has stopped this device because it has reported problems. (Code 43)"


def test_code_is_an_integer_and_fields_trimmed():
    """the code is an int and the trailing spaces after the colon are gone"""
    text = (
        "Instance ID:        SWD\\X\n"
        "Device Description: Smart Card\n"
        "Status:             Error\n"
        "Problem Code:       43\n"
    )
    instance_id, description, code, meaning = problem_devices(text)[0]
    assert instance_id == "SWD\\X"
    assert description == "Smart Card"
    assert code == 43
    assert isinstance(code, int)


def test_unknown_code_gets_a_fallback():
    """a code without a documented message still names its number"""
    text = (
        "Instance ID:        B1\n"
        "Device Description: Card Reader\n"
        "Status:             Error\n"
        "Problem Code:       31\n"
    )
    result = problem_devices(text)
    assert result == [("B1", "Card Reader", 31, "Unknown problem code (Code 31)")]


def test_empty_report_is_empty():
    """no devices means no tuples"""
    assert problem_devices("") == []
    assert problem_devices("\n\n") == []


def test_problem_code_line_alone_marks_a_device():
    """a Problem Code line is enough, whatever word the Status line uses"""
    text = (
        "Instance ID:        C1\n"
        "Device Description: USB Camera\n"
        "Status:             Problem\n"
        "Problem Code:       43\n"
    )
    assert problem_devices(text) == [
        ("C1", "USB Camera", 43, "Windows has stopped this device because it has reported problems. (Code 43)")
    ]
A hint

Split the report into devices on the blank lines (text.strip().split("\n\n")), then split each device into Label: value lines on the first colon and strip the value. Decide whether the device has a problem from its Status and whether it has a Problem Code, then look the code up in a dictionary of the four documented messages, falling back to f"Unknown problem code (Code {code})".

The sample tests run on this device, in your browser (Pyodide): nothing is sent to mysmartcopilot.com. The first run downloads Python (about 13.5 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.

Practice that adapts to you

Practise this lesson

11 questions about 5 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.

  1. Question 1 of 11 A standalone home PC, not managed by any organisation, needs a tool that is not in the Microsoft Store. Which source fits best?

    Choose one answer.

    Show the answer: Question 1 of 11

    Answer: WinGet, so install, upgrade and removal all run from one command

    With no portal and the app missing from the Store, WinGet is the maintainable choice: winget install adds it and winget upgrade and winget uninstall manage it later, all by package id.

  2. Question 2 of 11 Which WinGet command shows the apps already installed and whether an upgrade is available?

    Choose one answer.

    Show the answer: Question 2 of 11

    Answer: winget list

    winget list shows what is installed, from any source, and marks the ones with an upgrade available, which you then apply with winget upgrade.

  3. Question 3 of 11 True or false: a 64-bit x64 app needs WOW64 to run on a 64-bit x64 PC.

    Choose one answer.

    Show the answer: Question 3 of 11

    Answer: False: a 64-bit app runs natively; WOW64 is for 32-bit x86 apps on 64-bit Windows

    A 64-bit x64 app runs natively on a 64-bit x64 PC. WOW64 is the subsystem that lets 32-bit x86 apps run on 64-bit Windows.

  4. Question 4 of 11 A 64-bit x64 design app must run on a new Windows on Arm laptop (version 24H2). Does it run, and how?

    Choose one answer.

    Show the answer: Question 4 of 11

    Answer: Yes, under Prism, which emulates x64 apps by translating them to Arm64 as they run

    Windows 11, version 24H2 on Arm emulates both x86 and x64 user-mode apps with Prism, so the x64 design app runs, translated to Arm64 as it runs, though a native Arm64 build would be faster.

  5. Question 5 of 11 An Arm64 laptop runs an x64 accounting app perfectly, but its USB label printer does nothing. The printer's driver is an x64 build. What is the most likely cause?

    Choose one answer.

    Show the answer: Question 5 of 11

    Answer: The x64 driver cannot load on Arm; the printer needs an Arm64 driver

    The emulated x64 app runs because apps are emulated. The driver is not: an x64 kernel-mode driver will not load on Arm, so the printer needs an Arm64 driver from its maker.

  6. Question 6 of 11 A USB drive shows Code 43 in Device Manager. Which action fits the meaning of that code best?

    Choose one answer.

    Show the answer: Question 6 of 11

    Answer: Reseat or repower the device, since it reported a fault to Windows

    Code 43 is "Windows has stopped this device because it has reported problems": the device itself signalled a fault, so reseat, repower or replace it and test on another port or PC.

  7. Question 7 of 11 Which problem code means a device was turned off by someone or a policy, and simply needs enabling?

    Choose one answer.

    Show the answer: Question 7 of 11

    Answer: Code 22

    Code 22, "This device is disabled", means the device was turned off, so enabling it is the fix, unlike a missing driver (28) or a reported fault (43).

  8. Question 8 of 11 Order these driver fixes from the one you try first to the one you try last: uninstall and rescan; roll back; escalate; update.

    Choose one answer.

    Show the answer: Question 8 of 11

    Answer: Roll back, update, uninstall and rescan, escalate

    The ladder goes from least to most disruptive: roll back a bad update, then update the driver, then uninstall and rescan, and escalate only when the code survives all three.

  9. Question 9 of 11 When is Driver Rollback the right first step?

    Choose one answer.

    Show the answer: Question 9 of 11

    Answer: When a device broke right after its driver was updated

    Rollback puts back the driver from just before the last update, so it is the right first step precisely when a recent update is what broke the device.

  10. Question 10 of 11 Why compare an installer's SHA-256 with the vendor's published value before running it?

    Choose one answer.

    Show the answer: Question 10 of 11

    Answer: A match shows the file is the exact one the vendor published, not altered or corrupted in transit

    Get-FileHash computes the file's SHA-256, and because one changed byte changes the whole value, a match with the vendor's published hash proves the download is intact and unaltered.

  11. Question 11 of 11 On which Windows editions is Windows Sandbox available?

    Choose one answer.

    Show the answer: Question 11 of 11

    Answer: Pro, Enterprise and Education

    Windows Sandbox ships with Windows Pro, Enterprise and Education. It also needs virtualization enabled and modest resources: at least 4 GB of RAM, 1 GB of spare disk space and two CPU cores.

Interview questions

Warm-up (fresher): a device shows Code 28 in Device Manager — what does that tell you, and what is your first move?

Code 28 is Windows’ message “The drivers for this device are not installed”: the hardware is present and detected, but no working driver is loaded for it, so the device does nothing. It is not a dead device and not a disabled one, so you do not reseat or enable it first. Your first move is to get it a driver: let Windows Update search for one, or install the maker’s driver package for that exact model, then scan for hardware changes. If a driver was there before and vanished, check whether a recent update or a cleanup removed it. Note the device’s instance id from Device Manager or pnputil /enum-devices /problem so you install the driver for the right hardware, especially when several similar devices are listed.

Two harder questions follow, on cases the plain rules do not settle. For each, decide your very first action, then compare it with the first step shown under the question:

Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.

  1. Mid to senior

    A label printer works on every Intel laptop in the office but does nothing on a new Windows on Arm laptop, where a colleague's x64 apps run fine. How would you work out why, and what would you do about it?

    Model answer, Pro. Model answers open with any pass; prices are in the notice on this page. First step and follow-ups

  2. Mid to senior

    An overnight "winget upgrade --all" on 40 PCs updated a line-of-business app to a version that crashes on launch. Staff start work in two hours. What do you do, and how do you stop it happening again?

    Model answer, Pro. First step and follow-ups

Flashcards · 6 cards

Recall it, then check

Say the answer to yourself before you look: recalling it is what makes it stick.

  1. In what order are the sources for installing an app preferred?

    The company portal, then the Store, then WinGet, so that updates and clean removal stay possible. A vendor MSI, MSIX or .exe is the last resort.

  2. How does a Windows on Arm PC run x64 apps, and what can it never emulate?

    Prism, from version 24H2, emulates x86 and x64 apps. Emulation covers user-mode code only, so a driver must be built for Arm64.

  3. What do Device Manager codes 10, 22, 28 and 43 mean?

    10, the device cannot start; 22, it is disabled; 28, no driver is installed; 43, Windows stopped it. pnputil /enum-devices /problem lists every stuck device.

  4. A device shows Code 28. What is your first move?

    Get it a driver. The hardware is present and detected but has no working driver, so let Windows Update search or install the maker's driver pack; reseating or enabling it will not help.

  5. In what order is a driver problem fixed?

    Roll back a bad update, then update the driver, then uninstall and rescan, reading the code again after each step. Escalate only if the code stays.

  6. How do you check an unknown installer before it runs?

    Confirm its publisher signature, match its SHA-256 with Get-FileHash, then try it in Windows Sandbox, which throws everything away when it closes.

Key takeaways

  • Choose the most managed install source an app offers — the company portal, the Store, then WinGet — so updates and clean removal stay possible; a vendor MSI, MSIX or .exe is the last resort.
  • An x64 PC runs 64-bit apps natively and 32-bit x86 apps through WOW64; a Windows on Arm PC runs Arm64 apps natively and emulates x86 and x64 apps with Prism from version 24H2.
  • Emulation covers user-mode code only, so a driver must be built for Arm64: an x64 driver that works on an Intel laptop will not load on a Windows on Arm one.
  • Device Manager shows a problem code for a stuck device — 10 cannot start, 22 disabled, 28 no driver, 43 Windows stopped it — and pnputil /enum-devices /problem lists them from the command line.
  • Fix a driver from the safest step up: roll back a bad update, then update the driver, then uninstall and rescan, and escalate only if the code remains.
  • Before an unknown installer runs, confirm its publisher signature and match its SHA-256 with Get-FileHash, then try it in Windows Sandbox, which discards everything when it closes.

Terms in this lesson

device driver
The software that lets Windows talk to a piece of hardware. Kernel-mode drivers run inside the operating system, so a faulty one can stop the device or the whole PC.
driver rollback
Replacing a device's current driver with the version installed just before it, from the device's Properties in Device Manager, to undo a bad driver update.
kernel mode
The privileged processor state the operating system core and device drivers run in, with direct access to hardware; a fault here can crash the whole PC.
MSIX package
A modern Windows app package format that installs and uninstalls cleanly and can update through a store or a managed source, unlike a plain setup EXE.
Prism
The emulator in Windows 11, version 24H2 that runs x86 and x64 apps on Windows on Arm by translating their instructions to Arm64 as they run.
problem code
The number Device Manager shows for a device it cannot use, such as Code 28, each mapped to a message and a cause in Microsoft's documentation.
user mode
The restricted processor state that ordinary applications run in, kept away from hardware and the operating system core; emulation on Windows on Arm covers only this code.
Windows Sandbox
A disposable, isolated Windows desktop on the Pro, Enterprise and Education editions; everything inside it is discarded when it closes, so an unknown installer leaves no trace.

References

Related tools

Report a problem with this lesson

Quick answers and tool search

Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.