| Previous | Next |
| SL_REMAPPING_SP_STATUS_INVALIDDATA | SL_REMAPPING_SP_STATUS_INVALID_SPAPI_VERSION |
SL_REMAPPING_SP_STATUS_INVALID_SPAPI_CALL
Why this is more specific than an activation failure
0xC004D109 maps to SL_REMAPPING_SP_STATUS_INVALID_SPAPI_CALL. This result belongs to the Software Protection security-processor API and narrows the operation to the stateful API layer that initializes a protected environment, validates handles and versions, commits changes, enumerates data and enforces trusted-time or debugger restrictions. In concrete terms, the requested security-processor operation is not valid for the current object type or state.
This distinction matters because the API may exist and the version may match, but this call is illegal at this stage. A later “not licensed” state should not replace the first exact HRESULT in logs.
Inputs that distinguish this condition
- operation and API version
- environment or handle lifetime
- buffer length and returned required size
- trusted time and system UTC time
- Security-SPP event sequence and caller process
A practical way to isolate the cause
- Identify the caller and operation instance that produced
0xC004D109. - Collect the code-specific evidence: record API identifier, object/handle type, state transition history and previous call results.
Where it sits in the licensing pipeline
These results describe the protected API contract; they are not automatically evidence that the installed product key is invalid. To verify this, record API identifier, object/handle type, state transition history and previous call results.
Related codes with different remedies
| Result | Different condition |
|---|---|
SL_REMAPPING_SP_STATUS_INVALIDDATA | Compared with this result, the security processor accepted the call shape but could not validate or decode the supplied data. |
SL_REMAPPING_SP_STATUS_INVALID_SPAPI_VERSION | Compared with this result, the caller and security processor disagree about the public API structure or protocol version. |
SL_REMAPPING_SP_STATUS_INSUFFICIENT_BUFFER | Compared with it, the caller-provided output buffer cannot hold the complete security-processor result. |
Correcting the producing condition
Follow the documented create/open, mutate, commit, query and close sequence for that object.
Representative case: A query intended for a committed environment is issued against a transient construction handle.
Actions that usually destroy useful evidence
- Do not attach debuggers or instrumentation to a protected production path while reproducing the issue.
- Do not retry the whole activation workflow without preserving the first API result.
Technical references
- Software Licensing provider — technical contract for the subsystem producing it.
- SoftwareLicensingService WMI class — official platform context used to interpret it.
- SoftwareLicensingProduct WMI class — supported state, API or recovery information relevant to this HRESULT.
- Windows SDK constants — reference for evidence collection and post-repair verification.
Looking for a different code? Search another status or error code.