What does Windows error code 805 (ERROR_INVALID_ACE_CONDITION) mean?

 
Previous Next
ERROR_NO_ACE_CONDITION ERROR_FILE_HANDLE_REVOKED

ERROR_INVALID_ACE_CONDITION

the condition stored in an access-control entry is invalid.

ERROR_INVALID_ACE_CONDITION means that this condition A conditional ACE is present, but its expression, encoding, token stream, operand types, or overall structure cannot be parsed or evaluated according to the Windows authorization grammar.

Where the result appears

  • SetNamedSecurityInfo or policy deployment using conditional SDDL.
  • dynamic access control rules with user, device, or resource claims.
  • security descriptor import from another tool or OS version.
  • authorization code validating callback ACE contents.

What the result tells you

The value identifies a specific Windows state, but it does not by itself identify the component that introduced that state. Preserve the original this result value, the API or subsystem that produced it, and the object being operated on. A wrapper that replaces it with a generic exception or Boolean failure removes the distinction needed to choose the correct recovery path.

Diagnostic evidence to collect

  • the exact SDDL or binary conditional expression before conversion.
  • ACE type, length, alignment, and surrounding ACL revision.
  • claim names, value types, operators, and quoting used in the expression.
  • the API stage that rejected the condition and the target OS version.

Correlate the result evidence on one timeline. The first event that changes the state associated with this result is usually more valuable than later retries returning the same code. Record process and thread identity, session, timestamp, API parameters, and the immediately preceding successful operation.

Handling and recovery

Reject the malformed descriptor without applying a partial ACL. Rebuild the condition using documented SDDL syntax or a trusted policy editor, validate it on the target Windows version, and retain the original expression in diagnostics with sensitive claim values redacted.

Retry after this result only when the evidence shows that an external condition can change. When it is caused by malformed input, revoked authority, unsupported state, hardware damage, or an offline maintenance requirement, an unchanged retry adds noise and can overwrite the earliest useful diagnostics.

Common misinterpretation

Changing file permissions around the object will not repair malformed conditional syntax inside the ACE.

Guidance for developers

Keep it in its Win32/LRESULT domain in structured telemetry. When converting it to an HRESULT, exception, RPC response, or JSON field, retain the source domain and numeric value alongside the human-readable text. Do not branch on the localized message string for this Win32 error.

A test should construct the specific state, assert the exact result, and verify that partial resources are released. The recovery test for this Win32 error should prove that the operation is either deferred until a measurable state change or fails without an uncontrolled retry loop.

References


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