| Previous | Next |
| MQ_INFORMATION_DUPLICATE_PROPERTY | MQ_INFORMATION_FORMATNAME_BUFFER_TOO_SMALL |
MQ_INFORMATION_OPERATION_PENDING
Why the exact HRESULT matters
When MQ_INFORMATION_OPERATION_PENDING appears, start with the queue operation and its property arrays rather than with a broad repair of the Message Queuing service. Interpret it as asynchronous completion state, not as a general transport outage. The operation has not failed; completion belongs to the callback, event object, or overlapped result associated with the request.
For MQ_INFORMATION_OPERATION_PENDING, informational HRESULTs are especially easy to mishandle in wrappers that treat every nonzero value as an exception. When diagnosing MQ_INFORMATION_OPERATION_PENDING, the caller must first determine whether the documented operation and its side effects already completed.
When diagnosing MQ_INFORMATION_OPERATION_PENDING, A warning returned from a queue or message property call can describe only one element while the other elements and the primary operation succeeded. In the MQ_INFORMATION_OPERATION_PENDING path, preserve both the returned object state and the element-level status.
Subsystem context
| Subsystem | the per-property status channel used by MSMQ APIs |
|---|---|
| Decisive boundary | the call may complete while one array element is rejected, ignored, duplicated, or still pending |
| Code-specific focus | asynchronous completion state |
| Primary recovery rule | Keep buffers and queue handles alive until the documented completion path runs. |
When diagnosing MQ_INFORMATION_OPERATION_PENDING, unlike an error HRESULT, this informational value can accompany a completed operation. In the MQ_INFORMATION_OPERATION_PENDING path, it must still be handled because ignored or duplicate properties can change the stored result. For MQ_INFORMATION_OPERATION_PENDING, the code-specific boundary is asynchronous completion state.
Minimum useful telemetry
- The function result and every entry of the optional astatus array; associate it explicitly with
MQ_INFORMATION_OPERATION_PENDING. - When diagnosing
MQ_INFORMATION_OPERATION_PENDING, the matching apropid and mqpropvariant index; capture the value before cleanup or retry changes it. - In the
MQ_INFORMATION_OPERATION_PENDINGpath, whether an output object or queue was nevertheless created; compare it with a known-good call using the same account and queue type. - For this
MQ_INFORMATION_OPERATION_PENDINGresult, record the queue path or format name, local/remote placement, transactional flag, caller SID, process build, and UTC correlation ID when they apply.
For MQ_INFORMATION_OPERATION_PENDING, log certificate thumbprints, provider names, SIDs, GUIDs, lengths, and hashes where useful, but do not log private keys, symmetric keys, credentials, or confidential message bodies.
Step-by-step diagnosis
- Record the unsigned HRESULT,
MQ_INFORMATION_OPERATION_PENDING, and the native API or COM method before a framework replaces it with a generic exception. - Reproduce with the smallest queue/message/property set that still returns
MQ_INFORMATION_OPERATION_PENDING; change one precondition at a time. - In the
MQ_INFORMATION_OPERATION_PENDINGpath, verify the postcondition after the failed call: queue existence, message presence, directory object state, transaction outcome, or generated output may differ by result. - For this
MQ_INFORMATION_OPERATION_PENDINGresult, capture the function result and every entry of the optional aStatus array. - Capture the matching aPropID and MQPROPVARIANT index.
- When diagnosing
MQ_INFORMATION_OPERATION_PENDING, apply the code-specific recovery rule: Keep buffers and queue handles alive until the documented completion path runs.
Retry and cleanup
Keep buffers and queue handles alive until the documented completion path runs.
When diagnosing MQ_INFORMATION_OPERATION_PENDING, do not hide this HRESULT behind an unlimited framework retry. In the MQ_INFORMATION_OPERATION_PENDING path, require a verified precondition change and preserve the original correlation identifier across the next attempt.
Avoiding a false diagnosis
In the MQ_INFORMATION_OPERATION_PENDING path, do not treat a nonzero informational HRESULT as proof that the primary operation failed. For this MQ_INFORMATION_OPERATION_PENDING result, verify the completed effect and the individual property status. The specific focus for MQ_INFORMATION_OPERATION_PENDING remains asynchronous completion state.
- In the
MQ_INFORMATION_OPERATION_PENDINGpath, A successful test under an interactive administrator account does not prove that the production service account has the same profile, token, directory access, or key permissions. - For this
MQ_INFORMATION_OPERATION_PENDINGresult, restarting MSMQ before collecting evidence can invalidate handles and erase the first useful event; it is a containment action, not a root-cause diagnosis.
Example
A queue provisioning tool encounters MQ_INFORMATION_OPERATION_PENDING. For MQ_INFORMATION_OPERATION_PENDING, it records both the successful primary effect and the property warning, then corrects only the affected field. When diagnosing MQ_INFORMATION_OPERATION_PENDING, the acceptance test then changes only the decisive precondition and confirms both the HRESULT and the actual queue/message state.
Automated coverage should preserve the original arrays/identities, confirm that cleanup is safe after MQ_INFORMATION_OPERATION_PENDING, and test that a retry does not duplicate messages or directory objects.
References
- Microsoft: MSMQ message properties — source used for the
MQ_INFORMATION_OPERATION_PENDINGanalysis. - Microsoft: Message Queuing overview — source used for the
MQ_INFORMATION_OPERATION_PENDINGanalysis. - Microsoft: Message Queuing error and information codes — source used for the
MQ_INFORMATION_OPERATION_PENDINGanalysis. - Microsoft: queue properties and MQQUEUEPROPS — source used for the
MQ_INFORMATION_OPERATION_PENDINGanalysis.
Looking for a different code? Search another status or error code.