0X00000099

ERROR_INVALID_LIST_FORMAT (0x00000099) fix — list is garbage

Windows Errors Intermediate 👁 0 views 📅 May 27, 2026

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.

Was this solution helpful?