What does Windows error code 559 (ERROR_BAD_FUNCTION_TABLE) mean?

 
Previous Next
ERROR_UNEXPECTED_MM_EXTEND_ERR ERROR_NO_GUID_TRANSLATION

ERROR_BAD_FUNCTION_TABLE

What this result means

ERROR_BAD_FUNCTION_TABLE is a Windows system result. The exception unwinder found malformed or inconsistent function-table metadata. On 64-bit Windows this metadata describes nonleaf stack frames and is essential for exceptions, stack walking, and debugging.

Why it can appear

  • a module or JIT registered incorrect runtime-function entries
  • executable memory was freed or modified while unwind metadata remained registered
  • binary corruption or unsupported patching damaged.pdata or unwind information
  • the wrong architecture or image layout was used when interpreting addresses

Diagnostic workflow

  1. capture the failing instruction, module base, runtime-function entry, and unwind record bytes
  2. verify digital signatures and image integrity
  3. inspect JIT calls to RtlAddFunctionTable or RtlInstallFunctionTableCallback
  4. check that executable ranges and metadata lifetimes match exactly

Correct recovery and handling

Repair or update the module that owns the function table. JITs must unregister tables before releasing code and must publish fully initialized metadata before execution. Avoid continuing after unwind metadata corruption.

Administrator and support checklist

  • confirm whether the condition is isolated to one machine, one user, one file, or one application build.
  • Compare the host reporting this result with a known-good system using the same Windows edition and policy.
  • Review updates, drivers, security-policy changes, restores, and infrastructure incidents that preceded this result.
  • Preserve logs and dumps associated with this result before rebooting when the failure may be intermittent or destructive.
  • Use vendor-supported repair or rollback steps for it instead of copying system files or disabling protections ad hoc.

Developer guidance

When handling it, log the API or subsystem that returned it, the first lower-level failure, relevant object identifiers, process and thread context, and safe operation parameters. Preserve the original numeric Value rather than converting it to an unrelated HRESULT or NTSTATUS. Retry it only when the evidence shows a transient dependency; deterministic it cases involving policy, format, compatibility, or integrity should fail fast.

What to record in telemetry

  • Windows build, architecture, and component version for the result event
  • the first result timestamp and the operation then in progress
  • process, thread, session, and target object associated with it
  • warnings or lower-layer status values immediately preceding it
  • whether retry, restart, rollback, or repair changed the result outcome

Example investigation pattern

Investigate it by reproducing the operation once with detailed logging, then correlate that timestamp with Windows events and lower-layer traces. Compare the affected object or process with a known-good one, change one variable at a time, and stop retrying When it is deterministic. That method keeps the first relevant failure from being hidden by secondary cleanup messages.

Related and easily confused conditions

A bad function table can make an otherwise recoverable exception fatal because Windows cannot safely locate caller frames or cleanup handlers.

Operational note

Do not diagnose it from its text alone. The result can cross subsystem boundaries and may summarize an earlier, more specific event. The first failure in time is normally more useful than the last message printed during cleanup.

References


Looking for a different code? Search another status or error code.