| 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_DROPcan 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_DROPcan 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_DROPcan 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 HRESULT0x00040100immediately after the returning method and record whether the caller usedSUCCEEDED,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
- Microsoft: COM drag-and-drop status codes — official documentation relevant to
DRAGDROP_S_DROP. - Microsoft: DoDragDrop — official documentation relevant to
DRAGDROP_S_DROP. - Microsoft: IDropTarget::Drop — official documentation relevant to
DRAGDROP_S_DROP.
Looking for a different code? Search another status or error code.