| Previous | Next |
| TPM_E_AUDITFAIL_UNSUCCESSFUL | TPM_E_NOTRESETABLE |
TPM_E_AUDITFAIL_SUCCESSFUL
Where the failure is raised
TPM_E_AUDITFAIL_SUCCESSFUL (0x80280031) belongs to TPM 1.2 command processing. The base What Is page already shows the short Windows message; the additional diagnostic value is that this result marks the TPM 1.2 command completed its requested operation but the device could not build the required audit record.
Evidence that changes the diagnosis
| Question | Evidence for this HRESULT |
|---|---|
| What exact state was rejected? | the TPM 1.2 command completed its requested operation but the device could not build the required audit record |
| Which layer owns the result? | The TPM 1.2 command decoder and state machine. |
| What must be correlated? | the successful command output, audit digest and counter before and after, audit selection, transport state, and the first audit-specific event |
| What is the controlled comparison? | verify the operation result independently, then issue a simple audited capability command to isolate the audit subsystem |
Separate caller data from platform state. The result caller data includes the command, structures, lengths, handles and flags; platform state includes TPM generation, provisioning, locality, lockout, resource inventory, firmware and the TBS service lifecycle. This result is actionable only after the rejected side is identified.
A controlled verification
Use the following verification sequence:
- Capture the unmodified failing input and
0x80280031. - Verify the operation result independently, then issue a simple audited capability command to isolate the audit subsystem.
- Compare the first result divergent field or state transition.
- Repeat this result only after restoring the same baseline, with a bounded retry policy where the specification permits retry.
Related TPM and TBS results
| Other code | Why a different remedy follows |
|---|---|
TPM_E_NOTRESETABLE | Attempt to reset a PCR register that does not have the resettable attribute — a separate checkpoint when compared with this result. |
TPM_E_AUDITFAIL_UNSUCCESSFUL | TPM audit construction failed and the underlying command was returning a failure code also — a separate checkpoint when compared with it. |
TPM_E_NOTLOCAL | Attempt to reset a PCR register that requires locality and locality modifier not part of command transport — a separate checkpoint when compared with it. |
TPM_E_AUDITFAIL_UNSUCCESSFUL combines audit failure with an underlying command failure. The result difference determines whether to change serialization, authorization, resource lifetime, firmware/PPI state, command policy or only retry timing.
Correction and proof
Correct the original boundary by choosing this direction: treat the requested operation and audit compliance separately; repair audit state before accepting the action as policy-compliant. Do not clear ownership, delete keys or reset PCR-related state merely to see whether the message disappears; those actions can destroy the evidence and protected material while leaving serialization or command-order defects unchanged.
A successful it outcome preserves the intended hardware trust boundary, passes the original request, and produces verifiable output. Masking it, swallowing this HRESULT or switching silently to a software provider is not remediation.
References used for this checkpoint
- TCG: TPM 1.2 Main Specification — source for the checkpoint.
- TCG: TPM 1.2 Part 2 — Structures — source for the checkpoint.
- TCG: TPM 1.2 Part 3 — Commands — source for the checkpoint.
- Microsoft: TPM Base Services portal — source for the checkpoint.
Looking for a different code? Search another status or error code.
