| Previous | Next |
| TBSIMP_E_BUFFER_TOO_SMALL | TBSIMP_E_INVALID_CONTEXT_HANDLE |
TBSIMP_E_CLEANUP_FAILED
What failed and what did not
TBSIMP_E_CLEANUP_FAILED (0x80290201) belongs to the public and internal TPM Base Services path. The base What Is page already shows the short Windows message; the additional diagnostic value is that this result marks the internal TBS cleanup path could not release or reconcile context and virtual-resource state.
The first producer to identify for this HRESULT is the TBS client library, local RPC service and command scheduler before or around device execution. TBS centralizes TPM access through a local RPC service. A failure can therefore occur in the caller contract, RPC/service startup, scheduling, buffer handling or TPM submission, and each layer requires different evidence.
Collect a useful trace
| Question | Evidence for this HRESULT |
|---|---|
| What exact state was rejected? | the internal TBS cleanup path could not release or reconcile context and virtual-resource state |
| Which layer owns the result? | The TBS client library, local RPC service and command scheduler before or around device execution. |
| What must be correlated? | context close or process-exit timeline, outstanding commands, virtual handles, service events, power transition, and the first earlier failure |
| What is the controlled comparison? | close a fresh context with no resources, then repeat with one disposable resource to identify the cleanup trigger |
Record the original command or API call before this result retry logic mutates its nonces, handles, buffers or state. Also retain the full HRESULT as 0x80290201; signed decimal logging can hide the result TPM/TBS facility and make searches less precise.
Narrow experiment
- Establish the result baseline with the same device, Windows build, account and TPM generation.
- Perform one narrow experiment: close a fresh context with no resources, then repeat with one disposable resource to identify the cleanup trigger.
- Compare raw this result inputs and the first response, not only the final application dialog.
- Stop after the first changed the checkpoint; a later error means this boundary was passed even if the whole workflow still fails.
Similar-looking outcomes
| Result | Different diagnostic question |
|---|---|
TBSIMP_E_TPM_ERROR | An error occurred while communicating with the TPM — a separate checkpoint when compared with this result. |
TBSIMP_E_BUFFER_TOO_SMALL | The specified buffer was too small — a separate checkpoint when compared with it. |
TBSIMP_E_INVALID_OUTPUT_POINTER | The pointer to the returned handle location was NULL or invalid — a separate checkpoint when compared with it. |
The decisive distinction for this HRESULT is that TBSIMP_E_NOTHING_TO_UNLOAD means no unload candidate exists, not that cleanup itself failed. The short platform wording — “The context could not be cleaned up.” — does not supply that differential diagnosis by itself.
Operational response
The corrective direction is to fix leaked lifetime sequencing where possible and collect service diagnostics before restarting; do not clear the TPM merely to remove virtual state. Do not restart or disable TBS before capturing its service and event data. Most caller-contract errors are reproducible without touching TPM ownership, firmware state or stored keys.
A verified it repair reproduces the original request with the same intended security policy and passes this checkpoint. Replacing it with a broader wrapper status, silently falling back to software keys, or suppressing verification is not proof of success.
Technical references
- Microsoft: About TPM Base Services — source for the checkpoint.
- Microsoft: TBS return codes — source for the checkpoint.
- Microsoft: Tbsi_Context_Create — source for the checkpoint.
- Microsoft: Tbsip_Submit_Command — source for the checkpoint.
Looking for a different code? Search another status or error code.
