What does Windows error code 15301 (ERROR_HASH_NOT_PRESENT) mean?

 
Previous Next
ERROR_HASH_NOT_SUPPORTED ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED

ERROR_HASH_NOT_PRESENT

The hash requested from the server is not available or no longer valid.

ERROR_HASH_NOT_PRESENT is Windows system result 15301 (0x00003BC5). Microsoft defines it as “The hash requested from the server is not available or no longer valid.” The value should be captured immediately at the producing boundary because later diagnostics, cleanup, or retry code can overwrite a thread-local last-error value or collapse a richer native status.

How to classify this result

ERROR_HASH_NOT_PRESENT represents a missing or stale server-side hash result. The correct interpretation depends on the content identity, version, server cache, and validity epoch associated with the requested hash.

The most important boundary for ERROR_HASH_NOT_PRESENT is whether the operation reached a documented final state.

Where it can appear

  • ERROR_HASH_NOT_PRESENT can appear in a distributed content or file service retrieving previously generated metadata.
  • ERROR_HASH_NOT_PRESENT can appear in a client validating content by a server-side hash identifier.
  • ERROR_HASH_NOT_PRESENT can appear in a cache lookup after content replacement or metadata eviction.

When ERROR_HASH_NOT_PRESENT is found only in a log, preserve the logger, event provider, process, thread, and translation path.

Typical causes

  • For ERROR_HASH_NOT_PRESENT, the hash was never generated.
  • For ERROR_HASH_NOT_PRESENT, the associated content changed after hash creation.
  • For ERROR_HASH_NOT_PRESENT, server cleanup evicted the metadata.
  • For ERROR_HASH_NOT_PRESENT, the client reused an identifier from another content version.
  • For ERROR_HASH_NOT_PRESENT, replication or failover routed the request to a node without the hash.

These causes are starting points for ERROR_HASH_NOT_PRESENT, not substitutes for evidence.

Diagnostic sequence

  1. Record content ID, version, size, and modification identity.
  2. Check whether the server reports generation in progress or requires a new request.
  3. Compare the node that generated the hash with the node serving the lookup.
  4. Invalidate client-side hash identifiers when content changes.
  5. Verify server retention and metadata-cache health.
  6. Request regeneration only after proving the current content version.

After the first pass, reproduce ERROR_HASH_NOT_PRESENT with the smallest input and only one intentional fault.

Evidence to preserve

  • Record content and hash identifiers for ERROR_HASH_NOT_PRESENT.
  • Record content version, size, and last modification for ERROR_HASH_NOT_PRESENT.
  • Record server node and cache generation for ERROR_HASH_NOT_PRESENT.
  • Record hash creation and expiry timestamps for ERROR_HASH_NOT_PRESENT.
  • Record failover, replication, and eviction events for ERROR_HASH_NOT_PRESENT.

For ERROR_HASH_NOT_PRESENT, also retain decimal 15301, hexadecimal 0x00003BC5, UTC time, machine build, component version, and a correlation identifier.

Recovery and retry

The recovery objective for ERROR_HASH_NOT_PRESENT is to Request a new hash for the current content version or restore the server metadata source that owns the missing value.

A bounded regeneration request can be safe for immutable content. Do not loop on an obsolete identifier after the server says it is no longer valid.

Difference from related results

ERROR_HASH_NOT_SUPPORTED rejects the algorithm capability; ERROR_HASH_NOT_PRESENT accepts the kind of hash but cannot supply this particular current value.

Keep the original constant in telemetry rather than replacing ERROR_HASH_NOT_PRESENT with a nearby result that seems more familiar.

Practical validation scenario

A deployment client stores a hash ID, then the package is rebuilt in place. The server invalidates the old hash; the client detects the content version change and requests a fresh value instead of retrying the stale ID.

A useful test report for ERROR_HASH_NOT_PRESENT includes the failing call, exact input, state before the call, raw output, expected state, and observed state after recovery.

Telemetry and support fields

  • Record hash_not_present_operation for the producing API, callback, wait, driver, packaging phase, or service transition.
  • Record hash_not_present_target for the stable session, selector, device, pin, content, resource, service, or validation identity.
  • Record hash_not_present_state_before and hash_not_present_requested_state using explicit units and enum names.
  • Record hash_not_present_raw_status, the original result domain, and any later HRESULT or Win32 conversion.
  • Record hash_not_present_attempt, elapsed time, process and thread IDs, server or device instance, and correlation ID.

Alerting for ERROR_HASH_NOT_PRESENT should reflect the classification above.

Developer and administrator guidance

Clients should bind hash identifiers to immutable content versions. Server monitoring should expose generation failures, evictions, and cross-node cache misses separately.

Developers should preserve ERROR_HASH_NOT_PRESENT at module boundaries and document whether ownership of buffers, handles, mutexes, callbacks, or transition contexts changes on return.

References


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