What does HRESULT 0x00040100 (DRAGDROP_S_DROP) mean?

 
Previous Next
OLE_S_MAC_CLIPFORMAT DRAGDROP_S_CANCEL

DRAGDROP_S_DROP

OLE drag-and-drop completed with a drop

DRAGDROP_S_DROP is HRESULT 262400 (0x00040100) from winerror.h. AllStat describes DRAGDROP_S_DROP as “Successful drop took place.” The high-order severity bit is clear, so this is a success result, but it carries more information than plain S_OK.

DoDragDrop ended because the user completed the drop and the target accepted the negotiated operation.

Where this result is encountered

  • DRAGDROP_S_DROP can appear in OLE drag loops returned by DoDragDrop; record the producing interface and method rather than inferring behavior from the symbolic name alone.
  • DRAGDROP_S_DROP can appear in file or object transfer between shell and desktop applications; record the producing interface and method rather than inferring behavior from the symbolic name alone.
  • DRAGDROP_S_DROP can appear in custom IDropSource and IDropTarget implementations; record the producing interface and method rather than inferring behavior from the symbolic name alone.

For DRAGDROP_S_DROP, the same numeric success value can be mishandled when a wrapper exposes only a Boolean. For DRAGDROP_S_DROP, 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 DRAGDROP_S_DROP is whether the final effect returned to the source matches what the target actually committed, including copy, move, or link semantics. For DRAGDROP_S_DROP, the HRESULT alone confirms neither unrelated work nor the quality of optional outputs.

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

Diagnostic sequence

  • For DRAGDROP_S_DROP, capture the raw HRESULT 0x00040100 immediately after the returning method and record whether the caller used SUCCEEDED, FAILED, equality testing, or exception translation.
  • Identify the exact owner of DRAGDROP_S_DROP: interface, method, object instance, provider or filter version, thread or apartment, and operation phase.
  • Validate the decisive contract boundary for DRAGDROP_S_DROP: the final effect returned to the source matches what the target actually committed, including copy, move, or link semantics.
  • For DRAGDROP_S_DROP, 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 DRAGDROP_S_DROP; do not assume that a success severity bit means every optional sub-operation completed.
  • For DRAGDROP_S_DROP, reproduce the smallest request with the same object state and then change only the condition identified by the evidence before repeating the operation.

Evidence and telemetry to preserve

  • For DRAGDROP_S_DROP, preserve allowed effects passed into DoDragDrop.
  • For DRAGDROP_S_DROP, preserve final effect returned through pdwEffect.
  • For DRAGDROP_S_DROP, preserve target window and data format selected.
  • For DRAGDROP_S_DROP, preserve source cleanup or delete action for a move.
  • For DRAGDROP_S_DROP, preserve user cancellation and exception traces from callbacks.

Also record dragdrop_s_drop_operation, dragdrop_s_drop_object, dragdrop_s_drop_state_before, dragdrop_s_drop_state_after, UTC time, process and thread identifiers, and a correlation ID. For DRAGDROP_S_DROP, keep secrets out of logs while retaining GUIDs, CLSIDs, media subtypes, property IDs, row identities, and hashes needed to distinguish objects.

Correct handling, retry, and recovery

Commit source-side postprocessing only for the returned effect. A move must not delete source data until the target has completed its part and the final effect confirms the move.

Retry DRAGDROP_S_DROP only when the recorded state can change the documented outcome. For DRAGDROP_S_DROP, 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.

Difference from nearby HRESULT values

DRAGDROP_S_CANCEL ends the loop without a drop. DRAGDROP_S_USEDEFAULTCURSORS is a feedback instruction during the loop, not the final transfer outcome.

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

Practical validation scenario

A file manager starts DoDragDrop with copy and move allowed. The target stores the item and returns move; the source deletes the original only after receiving DRAGDROP_S_DROP and validating the final effect.

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

Developer and administrator guidance

For DRAGDROP_S_DROP, application telemetry should separate terminal failure, ordinary success, partial completion, continuation, cancellation, and warning-like success. For DRAGDROP_S_DROP, support bundles should contain the smallest reproducible call and the effective configuration seen by the owning component.

A support report for DRAGDROP_S_DROP should include decimal 262400, hexadecimal 0x00040100, 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.