Skip to content

Commit 474a956

Browse files
committed
AB#7669: USB-connected devices glitching
New P1 article for [CI 7669](https://dev.azure.com/KMOps/ContentExperience/_queries/edit/7669)
1 parent 5d62f84 commit 474a956

1 file changed

Lines changed: 201 additions & 0 deletions

File tree

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
---
2+
title: USB-connected Audio or Video Devices Experience Glitches when Connected to Specific Intel-based Devices
3+
description: Apply a registry fix to resolve USB audio/video issues on Intel 500/600/700 PCH systems with discrete TPM.
4+
ms.service: windows-client
5+
ms.topic: troubleshooting-general
6+
ms.date: 10/02/2025
7+
ms.custom:
8+
- sap:Windows Device and Driver Management\Issues with drivers or updates for peripheral devices
9+
- pcy:WinComm Devices Deploy
10+
appliesto: <a href=https://learn.microsoft.com/windows/release-health/supported-versions-windows-client target=_blank>Supported versions of Windows Client</a>
11+
---
12+
13+
# USB-connected audio or video devices experience glitches when connected to specific Intel-based devices
14+
15+
This article describes workarounds and fixes for an issue that affects specific Intel-based devices. When attached to the affected devices, USB audio or video devices might not function correctly. These audio or video devices include cameras, speakers, microphones, and headsets.
16+
17+
## Symptoms
18+
19+
You might observer one or more of the following symptoms:
20+
21+
- Occasional glitches or unexpected noise (such as clicking or popping) in the audio stream.
22+
- Momentary visible glitches in a video stream.
23+
- A USB audio or video device stops working.
24+
25+
## Affected devices
26+
27+
This issue affects Intel-based system using a 500, 600, or 700 series Platform Controller Hubs that have discrete TPM chips (dTPMs). Computers that use firmware TPM technology aren't affected.
28+
29+
## Workarounds
30+
31+
The following steps might resolve the issue. This relief might be temporary.
32+
33+
1. Unplug the device, and then reattach it to the computer.
34+
2. If the previous step doesn't work, restart the computer.
35+
36+
## Cause
37+
38+
This problem occurs because of delays that occur on an internal hardware bus when Windows communicates with the discrete TPM. These delays in turn delay communication with the USB controller, generating Split Transaction errors on the USB bus. As a result, time-sensitive USB traffic (such as audio and video streaming) might experience glitches and/or errors.
39+
40+
## Resolution
41+
42+
[!INCLUDE [Registry important alert](../../../includes/registry-important-alert.md)]
43+
44+
The October 2025 update for Windows 24H2 introduces a fix for this hardware issue. To use this fix, follow these steps:
45+
46+
1. On the affected device, install the October 2025 update. Restart the device if needed.
47+
48+
1. Confirm that the device uses a dTPM instead of an fTPM. To find this information, you might have to check the device's BIOS settings or contact the device manufacturer.
49+
50+
1. Run the diagnostic script that's provided in the [More information](#more-information) section of this article.
51+
52+
This script checks whether the fix applies to your device.
53+
54+
1. Create the following registry value:
55+
56+
- Subkey: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Tpm`
57+
- Type: **REG_DWORD**
58+
- Name: **TPMDriverReadAfterWriteCount**
59+
- Value: **0x1 (1)**
60+
61+
For example, you can open an administrative Command Prompt window, and then run the following command:
62+
63+
```console
64+
reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Tpm /v TPMDriverReadAfterWriteCount /t REG_DWORD /d 1
65+
```
66+
67+
## More information
68+
69+
You can use the following Windows PowerShell script to determine whether your PC has one of the controllers that might be affected. To run this script, create a file that uses a name such as **Check-USBSplitTransactionVulnerability.ps1**. Then paste the following text into the file, From a PowerShell command prompt, run the script.
70+
71+
> [!NOTE]
72+
> In Device Manager, the device in question appears under **System Devices**. It has a name that resembles "Intel(R) LPC Controller/eSPI Controller."
73+
74+
```powershell
75+
# USB Split Transaction Vulnerability Detection Script
76+
# This script checks if a device is vulnerable to USB split transaction issues
77+
# by examining the Windows registry for specific Intel PCH device IDs
78+
79+
# Define the vulnerable PCH device IDs from the CPP code
80+
$VulnerablePchDeviceIds = @(
81+
"VEN_8086&DEV_4380", "VEN_8086&DEV_4381", "VEN_8086&DEV_4382", "VEN_8086&DEV_4383",
82+
"VEN_8086&DEV_4384", "VEN_8086&DEV_4385", "VEN_8086&DEV_4386", "VEN_8086&DEV_4387",
83+
"VEN_8086&DEV_4388", "VEN_8086&DEV_4389", "VEN_8086&DEV_438A", "VEN_8086&DEV_438B",
84+
"VEN_8086&DEV_438C", "VEN_8086&DEV_438D", "VEN_8086&DEV_438E", "VEN_8086&DEV_438F",
85+
"VEN_8086&DEV_4390", "VEN_8086&DEV_4391", "VEN_8086&DEV_4392", "VEN_8086&DEV_4393",
86+
"VEN_8086&DEV_4394", "VEN_8086&DEV_4395", "VEN_8086&DEV_4396", "VEN_8086&DEV_4397",
87+
"VEN_8086&DEV_4398", "VEN_8086&DEV_4399", "VEN_8086&DEV_439A", "VEN_8086&DEV_439B",
88+
"VEN_8086&DEV_439C", "VEN_8086&DEV_439D", "VEN_8086&DEV_439E", "VEN_8086&DEV_439F",
89+
"VEN_8086&DEV_7A80", "VEN_8086&DEV_7A81", "VEN_8086&DEV_7A82", "VEN_8086&DEV_7A83",
90+
"VEN_8086&DEV_7A84", "VEN_8086&DEV_7A85", "VEN_8086&DEV_7A86", "VEN_8086&DEV_7A87",
91+
"VEN_8086&DEV_7A88", "VEN_8086&DEV_7A89", "VEN_8086&DEV_7A8A", "VEN_8086&DEV_7A8B",
92+
"VEN_8086&DEV_7A8C", "VEN_8086&DEV_7A8D", "VEN_8086&DEV_7A8E", "VEN_8086&DEV_7A8F",
93+
"VEN_8086&DEV_7A90", "VEN_8086&DEV_7A91", "VEN_8086&DEV_7A92", "VEN_8086&DEV_7A93",
94+
"VEN_8086&DEV_7A94", "VEN_8086&DEV_7A95", "VEN_8086&DEV_7A96", "VEN_8086&DEV_7A97",
95+
"VEN_8086&DEV_7A98", "VEN_8086&DEV_7A99", "VEN_8086&DEV_7A9A", "VEN_8086&DEV_7A9B",
96+
"VEN_8086&DEV_7A9C", "VEN_8086&DEV_7A9D", "VEN_8086&DEV_7A9E", "VEN_8086&DEV_7A9F",
97+
"VEN_8086&DEV_7A00", "VEN_8086&DEV_7A01", "VEN_8086&DEV_7A03", "VEN_8086&DEV_7A03",
98+
"VEN_8086&DEV_7A04", "VEN_8086&DEV_7A05", "VEN_8086&DEV_7A06", "VEN_8086&DEV_7A07",
99+
"VEN_8086&DEV_7A08", "VEN_8086&DEV_7A09", "VEN_8086&DEV_7A0A", "VEN_8086&DEV_7A0B",
100+
"VEN_8086&DEV_7A0C", "VEN_8086&DEV_7A0D", "VEN_8086&DEV_7A0E", "VEN_8086&DEV_7A0F",
101+
"VEN_8086&DEV_7A10", "VEN_8086&DEV_7A11", "VEN_8086&DEV_7A12", "VEN_8086&DEV_7A13",
102+
"VEN_8086&DEV_7A14", "VEN_8086&DEV_7A15", "VEN_8086&DEV_7A16", "VEN_8086&DEV_7A17",
103+
"VEN_8086&DEV_7A18", "VEN_8086&DEV_7A19", "VEN_8086&DEV_7A1A", "VEN_8086&DEV_7A1B",
104+
"VEN_8086&DEV_7A1C", "VEN_8086&DEV_7A1D", "VEN_8086&DEV_7A1E", "VEN_8086&DEV_7A1F",
105+
"VEN_8086&DEV_A080", "VEN_8086&DEV_A081", "VEN_8086&DEV_A082", "VEN_8086&DEV_A083",
106+
"VEN_8086&DEV_A084", "VEN_8086&DEV_A085", "VEN_8086&DEV_A086", "VEN_8086&DEV_A087",
107+
"VEN_8086&DEV_A088", "VEN_8086&DEV_A089", "VEN_8086&DEV_A08A", "VEN_8086&DEV_A08B",
108+
"VEN_8086&DEV_A08C", "VEN_8086&DEV_A08D", "VEN_8086&DEV_A08E", "VEN_8086&DEV_A08F",
109+
"VEN_8086&DEV_A090", "VEN_8086&DEV_A091", "VEN_8086&DEV_A092", "VEN_8086&DEV_A093",
110+
"VEN_8086&DEV_A094", "VEN_8086&DEV_A095", "VEN_8086&DEV_A096", "VEN_8086&DEV_A097",
111+
"VEN_8086&DEV_A098", "VEN_8086&DEV_A099", "VEN_8086&DEV_A09A", "VEN_8086&DEV_A09B",
112+
"VEN_8086&DEV_A09C", "VEN_8086&DEV_A09D", "VEN_8086&DEV_A09E", "VEN_8086&DEV_A09F",
113+
"VEN_8086&DEV_5180", "VEN_8086&DEV_5181", "VEN_8086&DEV_5182", "VEN_8086&DEV_5183",
114+
"VEN_8086&DEV_5184", "VEN_8086&DEV_5185", "VEN_8086&DEV_5186", "VEN_8086&DEV_5187",
115+
"VEN_8086&DEV_5188", "VEN_8086&DEV_5189", "VEN_8086&DEV_518A", "VEN_8086&DEV_518B",
116+
"VEN_8086&DEV_518C", "VEN_8086&DEV_518D", "VEN_8086&DEV_518E", "VEN_8086&DEV_518F",
117+
"VEN_8086&DEV_5190", "VEN_8086&DEV_5191", "VEN_8086&DEV_5192", "VEN_8086&DEV_5193",
118+
"VEN_8086&DEV_5194", "VEN_8086&DEV_5195", "VEN_8086&DEV_5196", "VEN_8086&DEV_5197",
119+
"VEN_8086&DEV_5198", "VEN_8086&DEV_5199", "VEN_8086&DEV_519A", "VEN_8086&DEV_519B",
120+
"VEN_8086&DEV_519C", "VEN_8086&DEV_519D", "VEN_8086&DEV_519E", "VEN_8086&DEV_519F",
121+
"VEN_8086&DEV_5480", "VEN_8086&DEV_5481", "VEN_8086&DEV_5482", "VEN_8086&DEV_5483",
122+
"VEN_8086&DEV_5484", "VEN_8086&DEV_5485", "VEN_8086&DEV_5486", "VEN_8086&DEV_5487",
123+
"VEN_8086&DEV_5488", "VEN_8086&DEV_5489", "VEN_8086&DEV_548A", "VEN_8086&DEV_548B",
124+
"VEN_8086&DEV_548C", "VEN_8086&DEV_548D", "VEN_8086&DEV_548E", "VEN_8086&DEV_548F",
125+
"VEN_8086&DEV_5490", "VEN_8086&DEV_5491", "VEN_8086&DEV_5492", "VEN_8086&DEV_5493",
126+
"VEN_8086&DEV_5494", "VEN_8086&DEV_5495", "VEN_8086&DEV_5496", "VEN_8086&DEV_5497",
127+
"VEN_8086&DEV_5498", "VEN_8086&DEV_5499", "VEN_8086&DEV_549A", "VEN_8086&DEV_549B",
128+
"VEN_8086&DEV_549C", "VEN_8086&DEV_549D", "VEN_8086&DEV_549E", "VEN_8086&DEV_549F"
129+
)
130+
131+
function Test-USBSplitTransactionVulnerability {
132+
<#
133+
.SYNOPSIS
134+
Checks if the current device is vulnerable to USB split transaction issues.
135+
136+
.DESCRIPTION
137+
This function examines the Windows registry under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI
138+
to detect if any of the known vulnerable Intel PCH device IDs are present on the system.
139+
140+
.OUTPUTS
141+
Boolean indicating whether the device needs the registry workaround.
142+
#>
143+
144+
try {
145+
# Define the registry path for PCI devices
146+
$RegistryPath = "HKLM:\SYSTEM\CurrentControlSet\Enum\PCI"
147+
148+
# Check if the registry path exists
149+
if (-not (Test-Path $RegistryPath)) {
150+
Write-Warning "Registry path $RegistryPath not found. Unable to perform vulnerability check."
151+
return $false
152+
}
153+
154+
# Get all first-level subkeys under the PCI registry path
155+
$PciDevices = Get-ChildItem -Path $RegistryPath -ErrorAction SilentlyContinue
156+
157+
if (-not $PciDevices) {
158+
Write-Warning "No PCI devices found in registry."
159+
return $false
160+
}
161+
162+
# Check each PCI device against the vulnerable device IDs
163+
foreach ($Device in $PciDevices) {
164+
$DeviceName = $Device.PSChildName
165+
166+
# Check if the device name contains any of the vulnerable device IDs
167+
foreach ($VulnerableId in $VulnerablePchDeviceIds) {
168+
if ($DeviceName -like "*$VulnerableId*") {
169+
Write-Verbose "Found vulnerable device: $DeviceName"
170+
return $true
171+
}
172+
}
173+
}
174+
175+
return $false
176+
}
177+
catch {
178+
Write-Error "An error occurred while checking for USB split transaction vulnerability: $_"
179+
return $false
180+
}
181+
}
182+
183+
# Main execution
184+
try {
185+
Write-Host "Checking for USB split transaction vulnerability..." -ForegroundColor Yellow
186+
187+
# Run the vulnerability check
188+
$IsVulnerable = Test-USBSplitTransactionVulnerability
189+
190+
# Output the result based on the evaluation
191+
if ($IsVulnerable) {
192+
Write-Host "This device is expected to need the registry workaround" -ForegroundColor Red
193+
} else {
194+
Write-Host "This device is not expected to need the registry workaround" -ForegroundColor Green
195+
}
196+
}
197+
catch {
198+
Write-Error "Script execution failed: $_"
199+
exit 1
200+
}
201+
```

0 commit comments

Comments
 (0)