| Previous | Next |
| TPM_E_FAMILYCOUNT | TPM_E_BAD_ATTRIBUTES |
TPM_E_WRITE_LOCKED
Interpret the boundary first
TPM_E_WRITE_LOCKED (0x80280041) 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 a TPM 1.2 NV index with one-time or lock-on-write semantics has already consumed the permitted write state.
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.
The result value 0x80280041 should remain attached to the symbolic name. Some this result logs store the value as a negative signed integer; others expose only a generic CNG, WMI, BitLocker or enrollment message. Neither substitution identifies the a TPM 1.2 NV index with one-time or lock-on-write semantics has already consumed the permitted write state as precisely as it.
Build the command transcript
- Producer for this HRESULT: the TPM 1.2 NV permission and lifecycle checks.
- Rejected invariant: a TPM 1.2 NV index with one-time or lock-on-write semantics has already consumed the permitted write state.
- Decisive capture: NV attributes, prior successful writes, writeAll requirement, lock bits, boot cycle, offset and length, and audit trail.
- Safe comparison: reproduce with a newly defined disposable index and perform the first and second writes separately.
Test one hypothesis
Build the result minimal case around the original command contract. Use a disposable object when the request can write NV data, advance a counter, change authorization state or consume a lock transition. The comparison is valid only when the caller, TPM generation and security policy remain the same.
| Question | Evidence for this HRESULT |
|---|---|
| What exact state was rejected? | a TPM 1.2 NV index with one-time or lock-on-write semantics has already consumed the permitted write state |
| Which layer owns the result? | The TPM 1.2 NV permission and lifecycle checks. |
| What must be correlated? | NV attributes, prior successful writes, writeAll requirement, lock bits, boot cycle, offset and length, and audit trail |
| What is the controlled comparison? | reproduce with a newly defined disposable index and perform the first and second writes separately |
Do not merge these conditions
| Constant | Checkpoint represented by its standard message |
|---|---|
TPM_E_BAD_ATTRIBUTES | The NV area attributes conflict — a separate checkpoint when compared with this result. |
TPM_E_FAMILYCOUNT | The family count value does not match — a separate checkpoint when compared with this result. |
TPM_E_NOT_FULLWRITE | The write is not a complete write of the area — a separate checkpoint when compared with it. |
The codes above may appear in the same workflow, but they are not aliases. TPM_E_AREA_LOCKED may follow an explicit lock; this code often distinguishes a write-once lifecycle already consumed.
A safe recovery path
Treat the existing index as immutable for its defined lifetime and provision a replacement index through a controlled migration. 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.
Proof for this HRESULT consists of a successful replay plus validation of the intended key, PCR, NV, context, event-log, provider or service result. A software fallback or a newly provisioned blank TPM answers a different question than it.
Source material
- TCG: TPM 1.2 Main Specification — source for the checkpoint.
- TCG: TPM 1.2 Part 2 — NV structures and permissions — source for the checkpoint.
- TCG: TPM 1.2 Part 3 — NV commands — source for the checkpoint.
- Microsoft: Win32_Tpm class — source for the checkpoint.
Looking for a different code? Search another status or error code.
