我也出现此问题,希望早点修复
KB5120998 (26100.9278) 安装后登录不加载自定义鼠标指针方案,SPI_SETCURSORS 失败
alva cui
40
信誉分
问题描述: 安装 2026-08-27 的累积更新 KB5120998(OS Build 26100.9278)并重启后,用户级自定义鼠标指针方案不再被应用到桌面,屏幕光标回到系统默认。该方案在更新前一直正常。
复现步骤:
- 在 HKCU\Control Panel\Cursors 设置自定义指针方案(值指向 C:\Windows\Cursors<方案文件夹>\ 内的第三方 .cur/.ani,Scheme Source=1)
- 安装 KB5120998 并重启
- 登录后鼠标指针显示为系统默认样式
技术观察:
- 注册表值、主题文件、文件 ACL 全部完好;以同一账户 LoadCursorFromFile() 加载相同文件返回有效句柄
- 在交互会话中调用 SystemParametersInfo(SPI_SETCURSORS, 0, NULL, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE) 返回 FALSE 且 GetLastError()=0,光标不刷新
- GetCursorInfo 显示当前箭头句柄为系统共享句柄 0x00010003(即 LoadCursor(NULL, IDC_ARROW)),而非从 .cur 文件加载的私有句柄,说明方案加载环节被跳过
- SetSystemCursor() 正常可用,可手动恢复方案;但注销/重启后再次失效
- 辅助功能设置 CursorType=0(自定义)未被改动;C:\Windows\Cursors 的 ACL 正常(Users:(RX))
预期结果:登录时按 HKCU\Control Panel\Cursors 加载指针方案 实际结果:登录后为默认光标,且 SPI_SETCURSORS 重载通道失败
系统信息:
- 版本:Windows 11 24H2 内核(Windows 10 IoT Enterprise LTSC 2024,Build 26100.9278)
- 相关更新:KB5120998(LCU)、KB5120997(SSU)、KB5122385,2026-08-28 安装
Windows 商业版 | 适用于 IoT 的 Windows
-
Steve Hsu 0 信誉分
2026-08-28T12:32:57.5933333+00:00 根据技术观察,用LLM辅助写了一个临时缓解措施脚本,注销/重启后失效。
建立一个新 powershell 脚本(*.ps1),把以下内容复制进去,保存,然后以管理员身份运行。
已在本地测试,有效。
# 鼠标指针临时修复脚本 # 用法:以管理员身份运行 PowerShell,执行此脚本 # 注意:注销或重启后需再次运行 Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; public class CursorFix { [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern IntPtr LoadImageW( IntPtr hInstance, string lpFileName, uint uType, int cxDesired, int cyDesired, uint fuLoad ); [DllImport("user32.dll", SetLastError = true)] public static extern bool SetSystemCursor( IntPtr hcur, uint id ); } "@ # Windows SDK winuser.h $cursorMap = @{ "Arrow" = 32512 # IDC_ARROW "IBeam" = 32513 # IDC_IBEAM "Wait" = 32514 # IDC_WAIT "Crosshair" = 32515 # IDC_CROSS "UpArrow" = 32516 # IDC_UPARROW "SizeNWSE" = 32642 # IDC_SIZENWSE "SizeNESW" = 32643 # IDC_SIZENESW "SizeWE" = 32644 # IDC_SIZEWE "SizeNS" = 32645 # IDC_SIZENS "SizeAll" = 32646 # IDC_SIZEALL "No" = 32648 # IDC_NO "Hand" = 32649 # IDC_HAND "AppStarting" = 32650 # IDC_APPSTARTING "Help" = 32651 # IDC_HELP "Pin" = 32671 # IDC_PIN "Person" = 32672 # IDC_PERSON } # 从注册表读取当前光标方案路径 $regPath = "HKCU:\Control Panel\Cursors" $schemes = Get-ItemProperty -Path $regPath Write-Host "Loading custom cursor file path from registry..." -ForegroundColor Cyan $loadedCount = 0 $failedList = @() foreach ($valueName in $cursorMap.Keys) { $cursorPath = $schemes.$valueName if ($cursorPath -and (Test-Path $cursorPath)) { # 获取该注册表值对应的正确系统ID $systemId = $cursorMap[$valueName] try { # 加载光标文件 # IMAGE_CURSOR = 2, LR_LOADFROMFILE = 0x0010 $hCursor = [CursorFix]::LoadImageW([IntPtr]::Zero, $cursorPath, 2, 0, 0, 0x0010) if ($hCursor -ne [IntPtr]::Zero) { # 应用光标 $result = [CursorFix]::SetSystemCursor($hCursor, $systemId) if ($result) { $loadedCount++ Write-Host " APPLIED: $valueName (ID:$systemId) -> $cursorPath" -ForegroundColor Green } else { $failedList += $valueName Write-Host " FAILED: $valueName (ID:$systemId, ErrCode: $([System.Runtime.InteropServices.Marshal]::GetLastWin32Error()))" -ForegroundColor Red } } else { $failedList += $valueName Write-Host " FAILED TO LOAD: $valueName" -ForegroundColor Red } } catch { $failedList += $valueName Write-Host " EXCEPTION: $valueName - $_" -ForegroundColor Red } } else { # 如果注册表里没有这个值(某些方案可能缺失),跳过 Write-Host " - SKIPPING: $valueName (undefined in registry)" -ForegroundColor Gray } } Write-Host "`nCOMPLETE. $loadedCount / $($cursorMap.Count) cursors applied." -ForegroundColor Cyan if ($failedList.Count -gt 0) { Write-Host "WARNING:Failed to apply: $($failedList -join ', ')" -ForegroundColor Yellow } Write-Host "NOTICE:This is just a temporary mitigation and will be lost after logout or restart." -ForegroundColor Yellow