| Previous | Next |
| SPAPI_E_NO_SUCH_DEVINST | SPAPI_E_INVALID_CLASS_INSTALLER |
SPAPI_E_CANT_LOAD_CLASS_ICON
SPAPI_E_CANT_LOAD_CLASS_ICON — 0x800F020C
A productive investigation starts at device setup-class icon loading. The status means that SetupAPI could not load the icon resource associated with a device setup class.
Operational meaning
For device installation, SetupAPI. Dev. Log is the chronological backbone. Correlate the HRESULT with the device instance ID, selected INF and section, signature or rank decision, file queue, class/co-installer dispatch, and rollback for that exact attempt instead of reading isolated lines from different installations.
Do not collapse this result into a nearby status. SPAPI_E_NO_DEVICE_ICON applies to a specific device/device type; this result concerns the setup class representation. Compare lifecycle, identity, caller, and first API.
Build the incident record
| Preserve before changing state | Diagnostic value |
|---|---|
| Class GUID, class registry key, Icon value/resource path, and architecture view | Pins evidence to one attempt. |
| SetupDiLoadClassIcon or class-image-list call and returned icon indices | Separates contract failure from environment. |
| Resource file presence, version, signature, ACL, and resource identifier | Creates a stable before/after control. |
| SetupAPI. Dev. Log entries and whether a generic icon fallback was used | Tests whether the first boundary moves. |
Collect the smallest evidence set that identifies the attempt and object. Redact secrets and message contents; preserve hashes, IDs, policy values, versions, and state transitions instead.
Tests that separate the causes
- Load a built-in setup-class icon through the same API; use a disposable or backed-up environment when the comparison changes boot, security, device, queue, or encryption state.
- Resolve and extract the configured resource outside SetupAPI without changing the class; retain one negative control so that a broad workaround is not mistaken for a root-cause correction.
- Remove a stale custom Icon override in a test image and compare behavior; keep every other input fixed and record the first event that differs from the failing run.
If the failure disappears after a broad restart, treat that as a clue about lifetime or state, not as proof of repair. Reproduce the original operation with targeted instrumentation before closing the incident.
Interpretation boundaries
The following decision points keep the investigation tied to the returning operation:
| Observed result | Interpretation |
|---|---|
| The minimal or known-good comparison succeeds | The control works; inspect production-specific state. |
| The control fails at the same first operation | The control also fails; inspect host/provider evidence. |
| A new HRESULT marks another boundary | this boundary moved; diagnose the new status separately rather than treating it as confirmation that the entire operation is fixed. |
Repair without losing evidence
Repair the failed contract rather than the surrounding system: Repair the class icon registration or resource package and preserve a safe generic fallback for management UI. Preserve the pre-change configuration or trace.
Close the incident only when class enumeration and icon loading succeed for local and remote class lists without leaking image-list resources. Repeat under the original identity and state. A different environment is comparison, not proof.
Technical references
These references define the HRESULT family and subsystem contract used above:
- Microsoft Open Specifications: HRESULT values.
- Microsoft: using device installation functions.
- Microsoft: device and driver installation overview.
- Microsoft: SetupAPI device installation log entries.
Looking for a different code? Search another status or error code.
