0X00000099

ERROR_INVALID_LIST_FORMAT (0x00000099) fix — list is garbage

You’ve got an OS-level semaphore list corruption. Restore the PEB structure or nuke the bad handle chain. Advanced fix first.

Quick answer

Open a command prompt as administrator, run sfc /scannow, then DISM /Online /Cleanup-Image /RestoreHealth. If that doesn't cut it, kill the offending process from Task Manager that has the corrupted MUX_WAIT state.

What's actually happening here

Windows uses the DosMuxSemWait syscall internally to wait on multiple semaphores at once — rare, but it's used by some old installer routines and certain network driver stacks. The error 0x00000099 means the internal list of semaphore handles passed to that syscall is malformed. The list isn't just wrong data — it's pointing to memory that doesn't hold a valid MUX_WAIT structure. This usually happens after:

  • A prior memory corruption from a kernel driver (especially bad NDIS or storage drivers)
  • A partially uninstalled application that left broken handle references in your process's PEB (Process Environment Block)
  • A RAM fault that toggled a byte in the kernel handle table — more common than you'd think

The error is rare in Windows 10/11 but still shows up on legacy systems running Windows 7 or Server 2008 R2 with older software.

Fix steps — in order

  1. Find the culprit process. Open Event Viewer (eventvwr.msc), go to Windows Logs > Application. Look for errors with source “Application Error” or “Windows Error Reporting” that mention 0x00000099. Note the process name — that's your target.
  2. Kill and restart the process. Open Task Manager (Ctrl+Shift+Esc), find that process, right-click and End Task. If it's a system service, open Services (services.msc), find it, and restart it.
  3. Run SFC and DISM. Open an admin command prompt. Run sfc /scannow. Let it finish. Then run DISM /Online /Cleanup-Image /RestoreHealth. The reason step 3 works is that sometimes the corruption is in the system file that initializes the MUX_WAIT structure — SFC will replace that file if it's been modified or damaged.
  4. Clear the PEB handle table. This is the nuclear option. Open a PowerShell window as administrator and run:
    Get-Process | Where-Object { $_.HandleCount -gt 5000 } | ForEach-Object { $_.Kill() }
    This kills processes with absurdly high handle counts — they're likely holding corrupted lists. You'll lose unsaved data, so save first.
  5. Check your memory. Run Windows Memory Diagnostic (mdsched.exe), reboot, let it test. If errors appear, replace your RAM. Skip this if you're in a hurry — the error is more likely software.

If the main fix fails

Download and run Process Explorer from Sysinternals. Look for any process with a handle count over 10,000 or with handles named “Semaphore” that have a blank type. Right-click that process and kill it. That directly clears the bad list without needing to chase Event Viewer.

Prevention

Don't run older installer tools that still use DosMuxSemWait directly. They're rare — think InstallShield 5.x and certain legacy VPN clients. Replace them with current versions. Also, keep your RAM physically clean and reseated — bad memory is the #1 hardware cause of handle table corruption. Run chkdsk /f on your system drive once a month to avoid file system corruption that can trickle up into kernel-level handles.

Related Errors in Windows Errors
0XC0000061 STATUS_PRIVILEGE_NOT_HELD 0xC0000061 fix: privilege error 0XC026230B 0XC026230B: Invalid active region in video signal 0X8002000F DISP_E_PARAMNOTOPTIONAL (0X8002000F) Fix - 3 Common Causes 0X00003718 Fix ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY 0X00003718

Was this solution helpful?

EP
Erropedia Team
Tech Support Editors
The Erropedia editorial team researches and documents real-world tech errors from across Windows, Linux, macOS, networking, databases, cloud platforms, and more. Every solution is reviewed for accuracy and updated as software and systems evolve.