| 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 means the internal TBS cleanup path could not release or reconcile context and virtual-resource state.
The first producer to identify 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 |
|---|---|
| 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 |
| 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 retry logic for this result 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 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 inputs and the first response, not only the final application dialog.
- Stop after the first changed result; if a later error replaces this HRESULT, this condition 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. |
TBSIMP_E_BUFFER_TOO_SMALL | The specified buffer was too small. |
TBSIMP_E_INVALID_OUTPUT_POINTER | The pointer to the returned handle location was NULL or invalid. |
The key distinction is that TBSIMP_E_NOTHING_TO_UNLOAD means no unload candidate exists, not that cleanup itself failed.
Operational response
To correct this, 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.
Technical references
Looking for a different code? Search another status or error code.