What does HRESULT 1 (S_FALSE) mean?

 
Could be also:
ConstantTypeOS
ERROR_INVALID_FUNCTIONWin32 errorWindows
STATUS_WAIT_1NTSTATUSWindows
kOSReturnErrorKern returnMac
KERN_INVALID_ADDRESSKern returnMac
ippStsNoOperationIntel Ipp StatusAny
WDSCP_CATEGORYHRESULTWindows
WDSMCSERVER_CATEGORYHRESULTWindows
WDSTPTMGMT_CATEGORYHRESULTWindows
EPERMerrnoAny
APC_INDEX_MISMATCHBugCheck CodeWindows
Previous Next
hrNone WDSCP_CATEGORY

S_FALSE

Successful HRESULT with a false or incomplete condition

S_FALSE is HRESULT 1 (0x00000001) from winerror.h. AllStat describes this result as “Not a failure.” The high-order severity bit is clear, so this is a success result, but it carries more information than plain S_OK.

The method did not fail, but its documented predicate, enumeration step, or requested condition is false or not fully satisfied.

Evidence and telemetry to preserve

  • preserve the method name and requested item count.
  • preserve actual output count and nullability of outputs.
  • preserve the loop position or predicate being evaluated.
  • preserve any secondary status array.
  • preserve the branch taken by the caller after SUCCEEDED returned true.

Also record s_false_operation, s_false_object, s_false_state_before, s_false_state_after, UTC time, process and thread identifiers, and a correlation ID. Keep secrets out of logs while retaining GUIDs, CLSIDs, media subtypes, property IDs, row identities, and hashes needed to distinguish objects.

Where the result is encountered

  • This result can appear in COM enumerators that reached the end before returning the requested count; record the producing interface and method rather than inferring behavior from the symbolic name alone.
  • This result can appear in predicate-style methods whose answer is false; record the producing interface and method rather than inferring behavior from the symbolic name alone.
  • It can appear in operations that completed without producing the optional result requested by the caller; record the producing interface and method rather than inferring behavior from the symbolic name alone.

The same numeric success value can be mishandled when a wrapper exposes only a Boolean. Keep the original HRESULT until the code-specific outputs and state transition have been evaluated.

State boundary that must be proved

The central question for this HRESULT is whether the API contract defines what false means for this method; the numeric value alone does not identify end-of-enumeration, absence, cancellation, or partial work. The HRESULT alone confirms neither unrelated work nor the quality of optional outputs.

A reliable interpretation of it names the exact method contract, the object generation, and the outputs that remain valid. This prevents a success-with-information result from being promoted to full success or demoted to a generic error.

Diagnostic sequence

  • capture the raw HRESULT 0x00000001 immediately after the returning method and record whether the caller used SUCCEEDED, FAILED, equality testing, or exception translation.
  • Identify the exact owner of it: interface, method, object instance, provider or filter version, thread or apartment, and operation phase.
  • Validate the decisive contract boundary for this HRESULT: the API contract defines what false means for this method; the numeric value alone does not identify end-of-enumeration, absence, cancellation, or partial work.
  • inspect every output parameter, count, status array, returned interface, or side effect that the method documentation associates with this success-with-information result.
  • Compare the observed state before and after it; do not assume that a success severity bit means every optional sub-operation completed.
  • reproduce the smallest request with the same object state and then change only the condition identified by the evidence before repeating the operation.

Difference from nearby HRESULT values

S_OK communicates the primary successful condition. E_FAIL and other values with the severity bit set are failures and must not be grouped with it.

This distinction determines whether the caller should consume partial outputs, stop iteration, wait, reconfigure, notify the user, or perform no error recovery at all.

Correct handling, retry, and recovery

Handle it as an explicit alternative success path. Check the method documentation and outputs before deciding whether to stop enumeration, report absence, or continue with reduced functionality.

Retry it only when the recorded state can change the documented outcome. Repeating the same call is inappropriate for a stable end marker, cancellation, unsupported format, adjusted property, or partial result whose completed side effects have not been reconciled.

Practical validation scenario

An enumerator requests four elements and returns one element with it. Correct code consumes the one valid element and then stops; code that treats every SUCCEEDED result as a full batch reads uninitialized entries.

The negative test should preserve the condition that produces it; the recovery test should alter only that condition and verify the final state as well as the HRESULT.

Developer and administrator guidance

When it crosses process, RPC, scripting, or managed-code boundaries, preserve the unsigned 32-bit value and symbolic name. A signed decimal rendering can obscure that the severity bit indicates success and can lead to incorrect exception or retry behavior.

A support report for this HRESULT should include decimal 1, hexadecimal 0x00000001, the AllStat meaning, the owning API, and the first detailed status or output that explains why the method did not return ordinary S_OK.

References


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