| Previous | Next |
| TPM_E_BAD_PRESENCE | TPM_E_NO_WRAP_TRANSPORT |
TPM_E_BAD_VERSION
Read the result in context
TPM_E_BAD_VERSION (0x8028002E) belongs to TPM 1.2 command processing. This result means the requested TPM 1.2 capability or structure version is not implemented by the device for that operation.
The first producer to identify is the TPM 1.2 command decoder and state machine. TPM 1.2 is a command/response device with strict binary structures and stateful resources. Windows may present the device response as an HRESULT, but the diagnostic meaning still belongs to the command field, key, session, PCR, NV index or lifecycle check named by the TPM specification.
Fields worth decoding
| Question | Evidence |
|---|---|
| What exact state was rejected? | the requested TPM 1.2 capability or structure version is not implemented by the device for that operation |
| Which layer owns the result? | The TPM 1.2 command decoder and state machine. |
| What must be correlated? | capability area, subcap, requested version fields, TPM revision, manufacturer ID, and the client library version that formed the request |
| Controlled comparison | query a baseline capability supported by the detected TPM revision and compare the serialized version fields |
A useful trace links three code-specific timelines: the application call, the local TBS/provider or firmware event, and the raw command/response exchange. The timestamps should describe one attempt; combining data from separate retries is particularly misleading for authorization sessions, context counters, DAA stages and lockout state.
Controlled comparison
The one-variable check is to query a baseline capability supported by the detected TPM revision and compare the serialized version fields. Record the before/after state that the 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
0x8028002Eat the first code-specific return boundary. - Decode the relevant state: raw command and response bytes, command ordinal, structure tags and the relevant TPM state.
- Run the controlled comparison once and preserve both binary transcripts.
- Verify the expected output or state transition instead of relying on absence of a UI message.
Adjacent failures
| Comparison code | Built-in distinction |
|---|---|
TPM_E_NO_WRAP_TRANSPORT | The TPM does not allow for wrapped transport sessions. |
TPM_E_BAD_PRESENCE | Either the physicalPresence or physicalPresenceLock bits have the wrong value. |
TPM_E_AUDITFAIL_UNSUCCESSFUL | TPM audit construction failed and the underlying command was returning a failure code also. |
It specifically answers whether the requested TPM 1.2 capability or structure version is not implemented by the device for that operation. In contrast, TPM_E_INVALID_POSTINIT is a startup-order failure, not a version negotiation failure.
Repair without destroying evidence
To remediate it, select the contract for the actual TPM generation and capability level; do not reinterpret a TPM 2.0 device as a 1.2 endpoint. 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.
Authoritative references
Looking for a different code? Search another status or error code.