| Previous | Next |
| NAP_E_SHV_CONFIG_NOT_FOUND | FA_E_MAX_PERSISTED_ITEMS_REACHED |
NAP_E_SHV_TIMEOUT
The System Health Validator timed out
NAP_E_SHV_TIMEOUT is HRESULT 0x80270013 (signed decimal -2144927725, unsigned decimal 2150039571). AllStat, using winerror.h, describes it as “SHV timed out on the request.” The value has failure severity, facility 0x27, and code field 0x0013.
This is a legacy Network Access Protection result: Microsoft states that NAP is unavailable starting with Windows 10 and that current Windows Server releases do not include the former NAP, HRA, and HCAP roles; use the code for supported legacy systems, archived telemetry, compatibility components, or migrations rather than assuming a modern machine should expose the old platform.
The asynchronous validation deadline expired
INapSystemHealthValidator::Validate receives hintTimeOutInMsec. Microsoft states that the default for all SHVs is 2000 milliseconds and that an SHV returning E_PENDING must call OnComplete on a separate thread within that interval; otherwise the response is dropped. NAP_E_SHV_TIMEOUT records that deadline failure. It is an availability result, not a healthy/unhealthy decision.
Why validation misses the deadline
- The SHV performs synchronous network or database I/O before returning E_PENDING.
- A backend posture service is slow, unavailable, or retrying internally beyond the NAP timeout.
- Thread-pool starvation delays either validation work or the OnComplete callback.
- The SHV finishes but calls OnComplete on the wrong request generation after the original deadline.
- A global timeout was reduced for all registered SHVs without validating the slowest supported backend.
Timing evidence
- Record Validate entry/return, E_PENDING decision, hintTimeOutInMsec, backend milestones, SetSoHResponse, and OnComplete times.
- Separate queue delay, CPU time, network time, and callback scheduling delay.
- Capture SHV process health, thread-pool depth, outstanding validations, and dependency endpoint status.
- Track whether a late response was dropped and whether it later caused NAP_E_NOT_PENDING.
Meeting the contract
- Return E_PENDING promptly before slow I/O and perform validation on a controlled asynchronous path.
- Set dependency timeouts shorter than the NAP deadline so the SHV has time to construct a failure-category response.
- Bound concurrent validations and cancel obsolete backend work when the request expires.
- Measure each SHV before changing the global timeout, because a nondefault value affects all registered validators.
Difference from nearby NAP results
NAP_E_TOO_MANY_CALLS is an admission/concurrency failure that may be caused by accumulated slow validations. NAP_E_NOT_PENDING is what a late completion can encounter after timeout. A compliance-result failure means the validator completed and judged the machine unhealthy; NAP_E_SHV_TIMEOUT means it could not produce a timely verdict.
Retry and recovery
Do not apply a late SoH response to the expired request. Policy should map the validator communication failure according to configured failure-category handling. A new validation may be attempted with backoff after dependency recovery, but repeated automatic retries under the same overload can worsen the timeout storm.
Practical scenario
An antivirus SHV queries a remote inventory database whose latency rises to five seconds. Validate returns E_PENDING, but the 2000-ms NAP deadline expires first and NAP_E_SHV_TIMEOUT is reported. Adding a shorter backend timeout and returning a component-failure response within the NAP window makes policy behavior deterministic.
References
- Microsoft: NAP error constants
- Microsoft: Validate timeout contract
- Microsoft: OnComplete
- Microsoft: SHV configuration interfaces
Looking for a different code? Search another status or error code.