HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Windows Update Windows UpdateWUA APIMicrosoft UpdateWSUSWindows Update for BusinessPowerShellTroubleshootingEndpoint Management

Which Update Service Is This Device Actually Registered Against? Enumerate the Service IDs Before You Debug Anything Else

IA
Imran Awan
23 August 2026

Every Windows Update investigation I have ever been handed started in the wrong place. Somebody says a device is not getting the August cumulative update, and within thirty seconds someone else is stopping wuauserv and renaming SoftwareDistribution. Nobody has yet established the one fact that determines whether the device could ever have received that update: which update service it is actually talking to.

That fact takes two seconds to obtain, and it comes from the agent itself rather than by inference from group policy. The Windows Update Agent (WUA) COM API names every registered service, says which one Automatic Updates treats as default, and says which are even willing to offer Windows updates. On the 25H2 machine I ran it on, the answer was not the one the documentation predicts.

The short version

Create Microsoft.Update.ServiceManager and read its Services collection. You get every registered update service by name and GUID, plus the decisive field Microsoft's own troubleshooting table omits: IsDefaultAUService. On a real Windows 11 25H2 device this returned four services, with Microsoft Update as the default AU service rather than Windows Update, and a service named "Windows Store (Prod)" where the documentation says "Windows Store (DCat Prod)". A script that string-matches the documented name finds nothing. Enumerate first, then read the policy, then decode the log. Never the other way round.

The problem: debugging the wrong update service

The symptom is almost never "no updates". It is "the wrong updates", and it is maddening precisely because everything looks healthy. The services are running, the component store is clean, the device reports to Intune, and the update history has entries in it. Something is arriving. It is just not the thing you deployed.

Three variants of this show up constantly. A device that should be on WSUS quietly pulls straight from Windows Update. A device that should be WUfB-managed sits waiting for approvals on a WSUS server nobody remembers building. Or a device receives .NET Framework and Office updates that were never in scope, because at some point it was opted in to Microsoft Update.

All three are the same failure: the device is registered against a different update service than the one your policy targets. And none of the three is visible from the places engineers habitually look. The Windows Update settings page does not name the service. The update history does not name it. Most importantly, and I measured this, the event log does not name it either.

Here is the census from the live 25H2 device. Four hundred events from the Windows Update client channel, and not one of them carries a service identifier.

Event log census - Windows 11 25H2, build 26200.9168
# Last 400 events from Microsoft-Windows-WindowsUpdateClient/Operational Id 25 x1 Windows Update failed to check for updates with error 0x80240438. Id 26 x344 Windows Update successfully found 0 updates. Id 41 x55 An update was downloaded. # Now search the same 400 messages for any of the four registered service GUIDs matches: 0

Three hundred and forty-four "found 0 updates" events, and no way to tell which service was asked. The operational channel records that the agent ran and what it found, never who it talked to.

So before you form a hypothesis about approvals, deferrals, deadlines or rings, establish the registration. It is the cheapest fact to obtain and it invalidates the largest number of wrong theories.

Watch out: the two most common opening moves both destroy the evidence you need here. Stopping wuauserv and clearing SoftwareDistribution discards the datastore that holds the service registrations' cached state. And Get-WindowsUpdateLog -ForceFlush, measured on this device, stops both the Update Orchestrator and Windows Update services in order to flush the trace buffers. Never make either one your first command. Enumerate, record, then intervene.

Why it happens: registration, default AU service and scan source are three different things

Practitioners collapse these into one idea called "the update source". They are three independent layers, and a device can be misconfigured at any one while the other two look correct.

Layer one is registration. A service is registered with WUA. Microsoft's reference describes IUpdateServiceManager as the interface that "adds or removes the registration of the update service with Windows Update Agent or Automatic Updates", and its Services property as returning "an IUpdateServiceCollection of the services that are registered with WUA". Registration means available, not active. On my device four services were registered and only one was being used for background scans.

Layer two is the default Automatic Updates service. Exactly one registered service holds this role. It is exposed as IsDefaultAUService, which Microsoft documents on IUpdateService2 - not on IUpdateService - as indicating "whether the service is registered with Automatic Updates and whether the service is currently used by Automatic Updates as the default service". This is the field that actually answers "where do my background updates come from".

Layer three is the scan source policy. Since the September 1, 2021 update KB5005101, Windows 10 version 2004 and later and Windows 11 decide per update class whether to scan WSUS or Windows Update, through the SetPolicyDrivenUpdateSourceFor family. This layer can override the intuition you formed from layers one and two.

How a device ends up somewhere unexpected

Registration is not something only your management platform does. Microsoft's own opt-in guidance shows a two-line script that any admin-context caller can run, setting a ClientApplicationID of its choosing and calling AddService2 with the Microsoft Update GUID. The documentation is explicit that the alternative route is simply a user visiting Microsoft Update.

That is how you get a fleet where some devices offer .NET Framework and Office updates and others do not, with nothing in your policy set to explain the split. An installer did it. A remediation script did it. A technician clicked the box in 2019.

A legacy seeding mechanism explains stale state on long-lived images. Microsoft documents that writing ClientApplicationID and RegisterWithAU under a PendingServiceRegistration key causes the opt-in to occur on the next WUA search, and notes the key "is respected once only when WUA is updated from a version that is earlier than version 7.0.6000". On my device it was absent.

Offline scanning creates a service too. AddScanPackageService registers a wsusscn2.cab scan package as a service, and the resulting object reports IsScanPackageService as true. If a vulnerability scanner has ever run an offline scan here, that is where a fifth entry in your enumeration comes from.

Context: the four services on a stock Windows 11 device are not four choices somebody made. Microsoft Update, the DCat flighting endpoint and the Store endpoint arrive with the operating system. What differs between a healthy and an unhealthy device is not the list - it is which entry holds IsDefaultAUService, and whether the scan source policy agrees with it.

The scan source policy family

This is the layer most likely to make an otherwise correct configuration behave wrongly, because its defaults are counter-intuitive and its preconditions are easy to miss. All four policies live under one key.

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
ValueMeaningWhat to look for
SetPolicyDrivenUpdateSourceForFeatureUpdates0 = detect, download and deploy feature updates from Windows Update; 1 = from WSUS. Documented default is 1.Absent on my device. If present and set to 1 while no WSUS server is configured, feature updates have nowhere to come from.
SetPolicyDrivenUpdateSourceForQualityUpdatesSame 0/1 semantics for quality updates. Documented default is 1.The classic split-brain case: quality from WSUS, features from Windows Update, neither intended.
SetPolicyDrivenUpdateSourceForDriverUpdatesSame 0/1 semantics for driver and firmware updates.Often the first class moved to the cloud during a WSUS exit. Check it even when drivers are not your complaint.
SetPolicyDrivenUpdateSourceForOtherUpdatesSame 0/1 semantics for updates to other Microsoft products.Interacts directly with Microsoft Update registration. Set one without the other and results get strange.
UseUpdateClassPolicySourceThe gate that makes the four values above take effect when they are written to the registry directly.Absent on my device. Microsoft states that without it "the scan source won't be altered" - so registry-only configurations silently do nothing.
WUServer / WUStatusServerThe intranet update service location and its reporting endpoint.Both absent on my device. Microsoft notes the scan source policies "have no effect" if the service URL is not correctly pointed at your WSUS server.
TargetReleaseVersion / TargetReleaseVersionInfoFeature update version pin. Not a scan-source control, but it lives in the same key and is routinely blamed for scan-source symptoms.On my device these were the only two values present: 1 and 24H2, on a machine actually running 25H2. The pin had been overtaken.

That last row is the trap. My test device had exactly two policy values, both about version pinning, and nothing at all about scan source. Anyone reasoning from group policy alone would have concluded "WUfB-managed, pinned to 24H2" and been wrong on the second half.

Gotcha: the documented default for all four scan-source policies is 1 (WSUS), not Windows Update. That sounds alarming until you read the precondition: if UpdateServiceUrl does not correctly point at a WSUS server, the policy has no effect, and Microsoft's default-behaviour list confirms that with no policies configured "all of your updates come from Windows Update". The danger is the half-configured middle: a WSUS URL still present from a decommissioned server, plus these defaults, equals a device pointed at nothing.

One more interaction to retire. The old dual-scan policy, "Do not allow update deferral policies to cause scans against Windows Update", is documented as no longer supported on Windows 11, and on Windows 10 as replaced by the scan source policy. Microsoft's warning is blunt: configure both on Windows 10 and "you won't get updates from Windows Update." If you find that policy in a GPO, it is a finding.

How to verify: enumerate the service IDs before anything else

Two lines. Microsoft's own troubleshooting article gives them, under the heading about updates not downloading from the intranet endpoint. Create the service manager, read the collection.

Real output - Windows 11 25H2, build 26200.9168, WUA 1509.2607.1012.0
$MUSM = New-Object -ComObject "Microsoft.Update.ServiceManager" $MUSM.Services # --- Service #1 --- Name : Microsoft Update ServiceID : 7971f918-a847-4430-9279-4a52d1efe18d IsManaged : False IsRegisteredWithAU : True IsDefaultAUService : True <-- this is the one that matters IsScanPackageService : False CanRegisterWithAU : True OffersWindowsUpdates : True ServiceUrl : https://fe2cr.update.microsoft.com/v6/ # --- Service #2 --- Name : DCat Flighting Prod ServiceID : 8b24b027-1dee-babb-9a95-3517dfb9c552 IsRegisteredWithAU : False IsDefaultAUService : False CanRegisterWithAU : False OffersWindowsUpdates : True ServiceUrl : https://fe3cr.delivery.mp.microsoft.com/ # --- Service #3 --- Name : Windows Store (Prod) <-- docs say "Windows Store (DCat Prod)" ServiceID : 855e8a7c-ecb4-4ca3-b045-1dfa50104289 IsRegisteredWithAU : False IsDefaultAUService : False CanRegisterWithAU : True OffersWindowsUpdates : False ServiceUrl : https://tas01.cwsapp.update.microsoft.com/ # --- Service #4 --- Name : Windows Update ServiceID : 9482f4b4-e343-43b6-b170-9a65bc822c77 IsRegisteredWithAU : False IsDefaultAUService : False CanRegisterWithAU : True OffersWindowsUpdates : True ServiceUrl : https://fe2cr.update.microsoft.com/v6/ TOTAL SERVICES: 4 # IsManaged=False and IsScanPackageService=False on all four. # IssueDate returned 01/01/1601 00:00:00 on all four - an unset FILETIME, not a real date. # RedirectUrls.Count = 0 and SetupPrefix empty on all four.

Read that output from the bottom up. The service named "Windows Update" is registered, is willing to offer Windows updates, and is not the default AU service. Microsoft Update is. That single line explains why this device received KB5120708, a .NET Framework 3.5 and 4.8.1 cumulative update, alongside its August Windows patches. Nothing in the policy set said "give me other Microsoft products". The registration said it.

Where the device and the docs disagree

Now the part that breaks compliance scripts. Microsoft's troubleshooting article publishes a table of expected Name values. Compare it to what the device returned.

Microsoft documentation saysThis 25H2 device reportsConsequence
Name: Microsoft Update, OffersWindowsUpdates: TrueExact match. GUID 7971f918-a847-4430-9279-4a52d1efe18d also matches the GUID in the opt-in reference.Safe to match on either name or GUID.
Name: DCat Flighting Prod, OffersWindowsUpdates: TrueName matches. GUID observed as 8b24b027-1dee-babb-9a95-3517dfb9c552, which appears in no Microsoft document I could find.Match on name. Do not hard-code this GUID from a blog - read it off the device.
Name: Windows Store (DCat Prod), OffersWindowsUpdates: FalseName mismatch. Device reports Windows Store (Prod) - no "DCat" - with GUID 855e8a7c-ecb4-4ca3-b045-1dfa50104289.Any script doing an exact string match on the documented name silently finds nothing.
Name: Windows Server Update Service, OffersWindowsUpdates: TrueNot present. This device has no WSUS registration, consistent with WUServer being absent.Absence here is a positive finding, not a gap in the data.
Name: Windows Update, OffersWindowsUpdates: TrueName matches. GUID observed as 9482f4b4-e343-43b6-b170-9a65bc822c77.Match on name.

There is a second, subtler discrepancy, and it is worth stating carefully: it involves two Microsoft pages disagreeing with each other rather than with me.

The Intune support article on feature updates never being offered attributes GUID 855E8A7C-ECB4-4CA3-B045-1DFA50104289 to "the DCAT Flighting service", and shows it redirecting to fe3.delivery.mp.microsoft.com. On my device that GUID belongs to the service named "Windows Store (Prod)", pointing at tas01.cwsapp.update.microsoft.com, with OffersWindowsUpdates false. The service actually pointing at the fe3cr.delivery.mp.microsoft.com family is the separately-registered "DCat Flighting Prod", under a different GUID entirely.

I am not going to declare Microsoft wrong. That article is scoped to Windows 10 version 1709 and later and may well describe accurate behaviour for its era. But the mapping does not hold on 25H2, and meanwhile the equivalent Windows client troubleshooting page has replaced the real GUID in the same log excerpt with the placeholder aaaabbbb-0000-cccc-1111-dddd2222eeee. There is currently no first-party table of these GUIDs to trust.

Tip: that is the whole argument for enumerating rather than looking up. Match on Name when you must match on something, treat every GUID in every blog post - including this one - as a hint to be confirmed against the device, and always record IsDefaultAUService. Microsoft's interpretation table does not include that field, and it is the only one that answers the actual question. The same page also asks you to check "OffersWindowsUPdates", with a stray capital P; the real property name is OffersWindowsUpdates.

The registry side of the same truth

The API reads from a registry store, and cross-checking the two is how you catch a device whose COM layer is broken. Every registered service has a subkey named for its GUID under one parent.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services
Real registry store - same device, same moment, read-only
# Values on the parent key DefaultService : 7971f918-a847-4430-9279-4a52d1efe18d <-- matches IsDefaultAUService # Subkeys, one per registered service plus two housekeeping keys 7971F918-A847-4430-9279-4A52D1EFE18D 855E8A7C-ECB4-4CA3-B045-1DFA50104289 8B24B027-1DEE-BABB-9A95-3517DFB9C552 9482F4B4-E343-43B6-B170-9A65BC822C77 LoadShedding Pending # Contents of each service subkey --- 7971F918-A847-4430-9279-4A52D1EFE18D --- Microsoft Update RegisteredWithAU [DWord] = 1 --- 855E8A7C-ECB4-4CA3-B045-1DFA50104289 --- "Windows Store (Prod)" on this device CountryCode [String] = GB RegisteredWithAU [DWord] = 0 --- 8B24B027-1DEE-BABB-9A95-3517DFB9C552 --- DCat Flighting Prod CountryCode [String] = GB RegisteredWithAU [DWord] = 0 --- 9482F4B4-E343-43B6-B170-9A65BC822C77 --- Windows Update ValueCount=0 SubKeyCount=0 <-- registered, but no AU value at all --- Pending --- ValueCount=0 SubKeyCount=0 --- LoadShedding --- ValueCount=0 SubKeyCount=0 # And the documented legacy opt-in seed key, one level up: HKLM\...\WindowsUpdate\PendingServiceRegistration Test-Path = False
ValueMeaningWhat to look for
DefaultService (REG_SZ, on the parent key)The GUID of the service Automatic Updates is currently using. The registry counterpart of IsDefaultAUService.On my device: 7971f918-a847-4430-9279-4a52d1efe18d. It agreed with the API exactly. Disagreement between the two is a real finding.
Per-GUID subkeysOne subkey per registered service, named with the uppercase GUID.Four present on my device, matching the four the API returned. A GUID here that the API does not return is a stale or failed registration.
RegisteredWithAU (REG_DWORD, in a service subkey)Whether that specific service is registered with Automatic Updates.1 under the Microsoft Update GUID, 0 under the Store and DCat GUIDs. The Windows Update GUID subkey had zero values at all.
CountryCode (REG_SZ, in a service subkey)Region stamp recorded against a service registration.GB under both the Store and DCat subkeys on this UK device, absent under the other two.
Pending subkeyPresent and empty on my device, alongside a LoadShedding subkey.Populated content here would be worth investigating as a queued registration. I found none and will not assert what a populated one means.
PendingServiceRegistration (sibling key, one level up)The documented legacy seed for a Microsoft Update opt-in on next scan.Absent on my device. Its presence on a modern build means somebody scripted an opt-in the old way.
Watch out: this key is not documented by Microsoft, and Microsoft's own scan-source guidance says plainly that "editing the registry to change the behavior of update policies isn't recommended." Read it for diagnosis. Do not write to it. Registrations are created and removed through the API and through policy, and hand-editing this store gives you a device whose registry and datastore disagree - a much harder problem than the one you started with.

The decision path

Follow these in order. Each step either produces a root cause or narrows the next one.

  1. Enumerate and record. Run the two lines above and save the output before you change anything. Capture Name, ServiceID, IsDefaultAUService, IsRegisteredWithAU, OffersWindowsUpdates, IsManaged, IsScanPackageService and ServiceUrl for every entry.
  2. Find the default. Exactly one service should report IsDefaultAUService as true. If that service is not the one your management model assumes, stop - you have found the root cause and the rest of the investigation is moot.
  3. Check for a scan-package service. Any entry with IsScanPackageService true came from an offline wsusscn2.cab scan. Note it and exclude it from your reasoning about live scans.
  4. Check for a managed service. IsManaged true, or a service named "Windows Server Update Service", means WSUS is in play regardless of what anyone told you.
  5. Cross-check the registry. Confirm DefaultService matches the API's default and that the per-GUID subkeys match the enumerated list. Mismatch means a broken or partial registration.
  6. Read the scan source policy. Only now. Check all four SetPolicyDrivenUpdateSourceFor values, UseUpdateClassPolicySource, and whether WUServer actually resolves. A policy naming WSUS while no WSUS registration exists is your answer.
  7. Decode the log last. Generate the readable log and confirm the GUID the agent used at scan time is the one you expect.

The fix: correct the policy, not the registration

The instinct after finding an unexpected registration is to remove it. Resist that, in most cases. There is a supported control surface for "where do my updates come from", and it is not service surgery.

For the WSUS-versus-Windows-Update question, the fix is the scan source policy plus a correct service URL. Microsoft's guidance reduces the whole thing to two knobs: "The only two relevant policies for where your updates come from are the specify scan source policy and whether or not you have configured a WSUS server." Configure the group policy "Specify source service for specific classes of Windows Updates" under Computer Configuration > Administrative Templates > Windows Components > Windows Update > Manage updates offered from Windows Server Update Service, or set all four CSP policies. The documentation is explicit that you should configure all of them if you go the CSP route.

For the Microsoft Update question - the one that explains stray .NET and Office updates - the API is the right tool, because that is what created the state in the first place. Microsoft's documented opt-in is a single call.

Microsoft's documented Microsoft Update opt-in (and what the 7 means)
$ServiceManager = New-Object -ComObject Microsoft.Update.ServiceManager $ServiceManager.ClientApplicationID = "My App" # Add the Microsoft Update Service, GUID $NewUpdateService = $ServiceManager.AddService2("7971f918-a847-4430-9279-4a52d1efe18d", 7, "") # The flags parameter is a bitwise OR of AddServiceFlag values: # asfAllowPendingRegistration = 0x1 - register later, on the next online scan # asfAllowOnlineRegistration = 0x2 - register now if the network is available # asfRegisterServiceWithAU = 0x4 - make it the Automatic Updates service # 7 = all three. That third bit is what changed IsDefaultAUService on my device.

That is worth staring at. My test machine has Microsoft Update as its default AU service because somebody, at some point, passed a flags value with 0x4 set. The documentation for AddService2 spells out the consequence: with asfRegisterServiceWithAU, "the change to the default Automatic Updates service doesn't occur (and isn't reflected in the Windows Update user interface) until the service registration succeeds."

To reverse it, the narrowly-scoped operation is UnregisterServiceWithAU, documented as unregistering a service with Automatic Updates. That drops the AU role without tearing out the registration. RemoveService removes the registration from WUA entirely and is the heavier hammer. Both are on IUpdateServiceManager; there is also a SetOption method documented as controlling "whether a warning is displayed when you change the registration of Automatic Updates".

Sequence the change like a change, not like a fix. Record the enumeration. Make one modification. Re-enumerate. Only then trigger a scan. Change registration and policy in the same window and you will not know which moved the needle.

Gotcha: AddService2 is documented to return S_OK when you pass asfAllowPendingRegistration even though nothing has been registered yet - it means only that the agent will try later, and Microsoft states this "doesn't guarantee that the registration will eventually succeed." A success return from your remediation script is therefore not proof of a registration. Re-enumerate and check the list. Other documented returns worth handling: WU_E_DS_SERVICEEXPIRED for an expired authorization cabinet and WU_E_DS_INVALIDOPERATION when the Automatic Updates state could not be changed.

One special case deserves its own handling. If your enumeration turned up an entry with IsScanPackageService true, that is a leftover offline-scan service. Microsoft's offline scanning guidance shows how they are created - AddScanPackageService("Offline Sync Service", "c:\wsusscn2.cab"), then a searcher with ServerSelection set to 3 for ssOthers and ServiceID set to the returned service. It is a transient construct for a specific scan, not a source you should leave lying around.

Proof it worked: API, registry and decoded log agree

Three independent sources have to tell the same story. If they disagree, that disagreement is the next thing to investigate.

The first two are covered above: the API's IsDefaultAUService and the registry's DefaultService. The third is the decoded trace - the only place recording which GUID the agent actually used during a given scan.

Remember what you are working with. The file at C:\Windows\WindowsUpdate.log is a 276-byte stub on this device; it is not the log. Real traces are ETW .etl files - 99 of them, 42.5 MB, in C:\Windows\Logs\WindowsUpdate - and you convert them with Get-WindowsUpdateLog. Do that after your enumeration, never before, for the reason in the first callout.

Decoded log line shapes that carry a service ID (from Microsoft's published excerpts)
# A scan announcing which service it is about to use: Agent * START * Finding updates CallerId = Update;taskhostw Id = 25 Agent ServiceID = {855E8A7C-ECB4-4CA3-B045-1DFA50104289} Third party service Misc Got 855E8A7C-ECB4-4CA3-B045-1DFA50104289 redir Client/Server URL: <https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx> # A WSUS-bound sync, naming the WSUS service ID and the server it resolved to: PT +++++++++++ PT : Synchronizing server updates +++++++++++ PT + ServiceId = {3DA21691-E39D-4DA6-8A4B-B43877BCB1B7}, Server URL = https://<wsusserver>/ClientWebService/client.asmx # The one that means "no service was specified" - a null GUID: Agent * ServiceID = {00000000-0000-0000-0000-000000000000} Third party service Agent * Criteria = "IsHidden = 0 AND DeploymentAction=*" # Grep pattern: search the decoded log for ServiceID and match against your enumeration Select-String -Path .\WindowsUpdate.log -Pattern 'ServiceI[dD] *= *.\{?[0-9a-fA-F-]{36}'

Match every GUID you find there against your enumerated list. A GUID in the log that is not in your enumeration means a registration was removed after the scan. A scan against the null GUID, in Microsoft's own worked example, accompanies a criteria string of DeploymentAction=* - which the documentation explains means "there is nothing specified from the server", so the scan runs and returns results with no instruction to download or install.

Then confirm through the event channel. It will not name the service, but it does confirm the scan completed and what it found.

Log channel: Microsoft-Windows-WindowsUpdateClient/Operational
Event IDMessage (as observed on this device)What it tells you
26Windows Update successfully found 0 updates.A scan completed against some service. Seen 344 times in 400 events. On its own it cannot distinguish a fully-patched device from one excluded by a stale pin or scanning the wrong service - which is exactly why you enumerate.
41An update was downloaded.Content actually moved. Seen 55 times. Pair it with the KB in the update history to confirm the content came from the service you intended.
25Windows Update failed to check for updates with error 0x80240438.A scan failed. Seen once. Note honestly: this code is not enumerated in Microsoft's published Windows Update error list, so I will not assert a meaning for it - treat it as "scan failed, cause not documented" and go to the decoded trace.

Finally, know which binaries you are exercising, because "the WUA API is broken" is a real diagnosis with a file-level shape. All of these were version 1509.2607.1012.0 - the agent is versioned separately from the 26200.9168 OS build.

FileLocation and descriptionRole in this investigation
wuapi.dllC:\Windows\System32, "Windows Update Client API"The COM server itself. Microsoft's reference lists it as the DLL for IUpdateServiceManager, and on the device the Microsoft.Update.ServiceManager ProgID resolves to CLSID {F8D253D9-89A4-4daa-87B6-1168369F0B21} whose InProcServer32 is this file. If your enumeration throws a COM error, this is the binary to check.
wuaueng.dllC:\Windows\System32, "Windows Update Agent"The agent engine, loaded as the ServiceDll for wuauserv. Does the scanning that the registration determines the target of.
wups.dll / wups2.dllC:\Windows\System32, "Windows Update client proxy stub" and "... proxy stub 2"The per-service proxy stubs. Their presence is the plumbing behind a service registration being usable at all.
wuauclt.exeC:\Windows\System32, "Windows Update"Still shipping, still the binary in Microsoft's own /resetauthorization /detectnow WSUS-client reset guidance.
wuwebv.dllNot present on this build.A negative worth recording: older scripts and forum posts that reference it will fail on a current build. Verify a binary exists before you depend on it.

The agent also reports its own version through Microsoft.Update.AgentInfo. On this device: ProductVersionString 1509.2607.1012.0, ApiMajorVersion 8, ApiMinorVersion 0. Record those alongside an enumeration.

The habit to take away is small and cheap. Put the two-line enumeration at the top of every Windows Update runbook you own, before the service checks, before the log collection, before anything. Most of the time it confirms what you expected in two seconds. The rest of the time it saves you an afternoon.

References

Lab notes: every device measurement here was captured read-only on 2026-08-23 from a corporate Windows 11 Enterprise 25H2 machine, build 26200.9168, WUA 1509.2607.1012.0. No registration was added, removed or modified. The console blocks are CSS-simulated renderings of that captured output and of Microsoft's published log excerpts, labelled in each title bar.

Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Windows Update
A WSUS device installed something WSUS never approved:…
A device pointed at WSUS pulls updates straight from Microsoft, and nothing errors. Here…
Windows Update
One read-only PowerShell collector for Windows patching failures…
Test-Path and value checks return confidently wrong patching verdicts on real devices.…
Windows Update
Event 26 said "found 0 updates" 1,815 times: proving what the…
Windows Update reporting zero missing updates is not evidence of compliance. Microsoft's…