| Previous | Next |
| TPM_E_BAD_COUNTER | TPM_E_CONTEXT_GAP |
TPM_E_NOT_FULLWRITE
Where the failure is raised
TPM_E_NOT_FULLWRITE (0x80280046) belongs to TPM 1.2 nonvolatile-storage policy. This result means an NV index requiring full-area writes received a partial offset or length.
The first producer to identify is the TPM 1.2 NV permission and lifecycle checks. TPM 1.2 NV indices combine permissions, authorization mode, locality masks and lock semantics. Two indices of the same size can behave differently because those attributes were fixed when each index was defined.
Evidence that changes the diagnosis
| Question | Evidence |
|---|---|
| What exact state was rejected? | an NV index requiring full-area writes received a partial offset or length |
| Which layer owns the result? | The TPM 1.2 NV permission and lifecycle checks. |
| What must be correlated? | index size, writeAll attribute, requested offset, payload length, and whether transport or encoding truncated the data |
| Controlled comparison | submit an exact index-sized test payload at offset zero to a disposable index with the same attribute |
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.
A controlled verification
The one-variable check is to submit an exact index-sized test payload at offset zero to a disposable index with the same attribute. 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
0x80280046at the first code-specific return boundary. - Decode the relevant state: NV public attributes, locality, authorization form, lock state, offsets and lengths.
- 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.
Related TPM and TBS results
| Comparison code | Built-in distinction |
|---|---|
TPM_E_MAXNVWRITES | The maximum number of NV writes without an owner has been exceeded. |
TPM_E_BAD_ATTRIBUTES | The NV area attributes conflict. |
TPM_E_WRITE_LOCKED | The NV area has already been written to. |
It specifically answers whether an NV index requiring full-area writes received a partial offset or length. In contrast, TPM_E_BAD_DATASIZE can report malformed size generally; this code ties the mismatch to full-write policy.
Correction and proof
To remediate it, write the complete area atomically or redefine the application’s disposable index without full-write semantics. Do not undefine a production NV index until its public attributes and authorization policy have been recorded. NV policy is established at definition time, and destructive recreation can remove counters, certificates or provisioning state.
Authoritative references
Looking for a different code? Search another status or error code.
