| Previous | Next |
| TPMAPI_E_POLICY_DENIES_OPERATION | TBSIMP_E_CLEANUP_FAILED |
TBSIMP_E_BUFFER_TOO_SMALL
Meaning beyond the built-in message
TBSIMP_E_BUFFER_TOO_SMALL (0x80290200) 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 an internal TBS component received a work buffer that cannot hold the virtualized command, resource record or response.
Decode the relevant state
| Question | Evidence for this HRESULT |
|---|---|
| What exact state was rejected? | an internal TBS component received a work buffer that cannot hold the virtualized command, resource record or response |
| Which layer owns the result? | The TBS client library, local RPC service and command scheduler before or around device execution. |
| What must be correlated? | the first public API result, internal TBS event, command and response sizes, service version, and any preceding allocation or marshal failure |
| What is the controlled comparison? | reproduce with the smallest command that enters the same internal path and compare after a clean service/process restart |
A useful this result trace links three code-specific timelines: the application call, the local TBS/provider or firmware event, and the raw command/response exchange. The result timestamps should describe one attempt; combining data from separate retries is particularly misleading for authorization sessions, context counters, DAA stages and lockout state.
One-variable test
The one-variable check is to reproduce with the smallest command that enters the same internal path and compare after a clean service/process restart. Record the before/after state that the result command is allowed to change. If the operation can have side effects, use a disposable key, session, counter or NV index rather than production material.
- Capture this result and
0x80290200at the first code-specific return boundary. - Decode the result state: TBS function, context, pointer and buffer contract, service state, command size and nested status.
- Run the result controlled comparison once and preserve both binary transcripts.
- Verify the expected this result output or state transition instead of relying on absence of a UI message.
Differential diagnosis
| Comparison code | Built-in distinction |
|---|---|
TBSIMP_E_CLEANUP_FAILED | The context could not be cleaned up — a separate checkpoint when compared with it. |
TBS_E_ACCESS_DENIED | The caller does not have the appropriate rights to perform the requested operation — a separate checkpoint when compared with it. |
TBSIMP_E_TPM_ERROR | An error occurred while communicating with the TPM — a separate checkpoint when compared with it. |
It specifically answers whether an internal TBS component received a work buffer that cannot hold the virtualized command, resource record or response. In contrast, TBS_E_INSUFFICIENT_BUFFER is the documented caller-facing capacity result.
Supported corrective direction
To remediate it, preserve TBS logs and update the OS component if reproducible; application code should still verify its public buffer lengths. 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.
After correcting it, start with a fresh caller context where the protocol requires one, replay the original intended operation, and confirm that hardware-backed policy remains enforced.
Authoritative 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.
