| Previous | Next |
| TPM_E_BAD_ATTRIBUTES | TPM_E_KEY_OWNER_CONTROL |
TPM_E_INVALID_STRUCTURE
Classify the layer correctly
TPM_E_INVALID_STRUCTURE (0x80280043) belongs to TPM 1.2 resources, delegation and contexts. The base What Is page already shows the short Windows message; the additional diagnostic value is that this result marks a TPM 1.2 structure has an inconsistent tag, version or layout for the command that parses it.
Incident worksheet
| Question | Evidence for this HRESULT |
|---|---|
| What exact state was rejected? | a TPM 1.2 structure has an inconsistent tag, version or layout for the command that parses it |
| Which layer owns the result? | The TPM resource, context or delegation manager, sometimes mediated by TBS virtualization. |
| What must be correlated? | raw blob bytes, outer and nested tags, version fields, declared lengths, byte order, source library version, and command ordinal |
| What is the controlled comparison? | decode the complete blob using the matching TPM 1.2 structure definition and compare with a newly generated object |
A reproducible comparison
The one-variable check is to decode the complete blob using the matching TPM 1.2 structure definition and compare with a newly generated object. 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
0x80280043at the first code-specific return boundary. - Decode the result state: handle namespace, owning context, save/load history, family state and resource lifetime.
- 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.
Boundaries often confused with this one
| Comparison code | Built-in distinction |
|---|---|
TPM_E_KEY_OWNER_CONTROL | The key is under control of the TPM Owner and can only be evicted by the TPM Owner — a separate checkpoint when compared with it. |
TPM_E_INVALID_RESOURCE | When saving context identified resource type does not match actual resource — a separate checkpoint when compared with it. |
TPM_E_BAD_COUNTER | The counter handle is incorrect — a separate checkpoint when compared with it. |
It specifically answers whether a TPM 1.2 structure has an inconsistent tag, version or layout for the command that parses it. In contrast, TPM_E_BAD_TYPE is tied to an incorrect identity/blob type; it covers general structural inconsistency.
Restore service safely
To remediate it, regenerate the structure with one versioned serializer and reject cross-version or partially rewritten blobs. Do not persist volatile TPM or TBS handles as durable identifiers. A numeric handle can be valid only inside the creating context and lifecycle, even when its value looks unchanged after restart.
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: Resource Virtualization in TBS — source for the checkpoint.
- Microsoft: Command Scheduling in TBS — source for the checkpoint.
- Microsoft: Using TPM Base Services — source for the checkpoint.
- TCG: TPM 1.2 Part 3 — Context commands — source for the checkpoint.
Looking for a different code? Search another status or error code.
