Site icon EfmSoft

What does HRESULT 0x80280046 (TPM_E_NOT_FULLWRITE) mean?

 
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. The base What Is page already shows the short Windows message; the additional diagnostic value is that this result marks an NV index requiring full-area writes received a partial offset or length.

The first producer to identify for this HRESULT 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

QuestionEvidence for this HRESULT
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
What is the controlled comparison?submit an exact index-sized test payload at offset zero to a disposable index with the same attribute

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.

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 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.

  1. Capture this result and 0x80280046 at the first code-specific return boundary.
  2. Decode the result state: NV public attributes, locality, authorization form, lock state, offsets and lengths.
  3. Run the result controlled comparison once and preserve both binary transcripts.
  4. Verify the expected this result output or state transition instead of relying on absence of a UI message.

Related TPM and TBS results

Comparison codeBuilt-in distinction
TPM_E_MAXNVWRITESThe maximum number of NV writes without an owner has been exceeded — a separate checkpoint when compared with it.
TPM_E_BAD_ATTRIBUTESThe NV area attributes conflict — a separate checkpoint when compared with it.
TPM_E_WRITE_LOCKEDThe NV area has already been written to — a separate checkpoint when compared with it.

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.

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


Looking for a different code? Search another status or error code.

Exit mobile version