What does HRESULT 0x400E0005 (MQ_INFORMATION_DUPLICATE_PROPERTY) mean?

 
Previous Next
MQ_INFORMATION_UNSUPPORTED_PROPERTY MQ_INFORMATION_OPERATION_PENDING

MQ_INFORMATION_DUPLICATE_PROPERTY

Operational meaning

When MQ_INFORMATION_DUPLICATE_PROPERTY appears, start with the queue operation and its property arrays rather than with a broad repair of the Message Queuing service. The result marks duplicate identifier in a parallel property array. The first occurrence wins and later entries are ignored, so logging only the final value can hide what MSMQ actually used.

For MQ_INFORMATION_DUPLICATE_PROPERTY, A warning returned from a queue or message property call can describe only one element while the other elements and the primary operation succeeded. When diagnosing MQ_INFORMATION_DUPLICATE_PROPERTY, preserve both the returned object state and the element-level status.

When diagnosing MQ_INFORMATION_DUPLICATE_PROPERTY, MSMQ property structures can include an optional status array parallel to the property identifiers and values. In the MQ_INFORMATION_DUPLICATE_PROPERTY path, A nonfatal top-level result therefore does not replace inspection of individual entries.

Where to draw the boundary

Subsystemthe per-property status channel used by MSMQ APIs
Decisive boundarythe call may complete while one array element is rejected, ignored, duplicated, or still pending
Code-specific focusduplicate identifier in a parallel property array
Primary recovery ruleCanonicalize the property list so every identifier appears once before retrying.

When diagnosing MQ_INFORMATION_DUPLICATE_PROPERTY, unlike an error HRESULT, this informational value can accompany a completed operation. In the MQ_INFORMATION_DUPLICATE_PROPERTY path, it must still be handled because ignored or duplicate properties can change the stored result. For MQ_INFORMATION_DUPLICATE_PROPERTY, the code-specific boundary is duplicate identifier in a parallel property array.

Evidence to preserve

  • Whether an output object or queue was nevertheless created; associate it explicitly with MQ_INFORMATION_DUPLICATE_PROPERTY.
  • When diagnosing MQ_INFORMATION_DUPLICATE_PROPERTY, the function result and every entry of the optional astatus array; capture the value before cleanup or retry changes it.
  • In the MQ_INFORMATION_DUPLICATE_PROPERTY path, the matching apropid and mqpropvariant index; compare it with a known-good call using the same account and queue type.
  • For this MQ_INFORMATION_DUPLICATE_PROPERTY result, 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_DUPLICATE_PROPERTY, 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.

Diagnostic sequence

  1. Record the unsigned HRESULT, MQ_INFORMATION_DUPLICATE_PROPERTY, and the native API or COM method before a framework replaces it with a generic exception.
  2. When diagnosing MQ_INFORMATION_DUPLICATE_PROPERTY, verify the postcondition after the failed call: queue existence, message presence, directory object state, transaction outcome, or generated output may differ by result.
  3. In the MQ_INFORMATION_DUPLICATE_PROPERTY path, capture the function result and every entry of the optional aStatus array.
  4. Capture the matching aPropID and MQPROPVARIANT index.
  5. Reproduce with the smallest queue/message/property set that still returns MQ_INFORMATION_DUPLICATE_PROPERTY; change one precondition at a time.
  6. When diagnosing MQ_INFORMATION_DUPLICATE_PROPERTY, apply the code-specific recovery rule: Canonicalize the property list so every identifier appears once before retrying.

Handling and recovery

Canonicalize the property list so every identifier appears once before retrying.

When diagnosing MQ_INFORMATION_DUPLICATE_PROPERTY, do not hide this HRESULT behind an unlimited framework retry. In the MQ_INFORMATION_DUPLICATE_PROPERTY path, require a verified precondition change and preserve the original correlation identifier across the next attempt.

Nearby failure boundaries

In the MQ_INFORMATION_DUPLICATE_PROPERTY path, do not treat a nonzero informational HRESULT as proof that the primary operation failed. For this MQ_INFORMATION_DUPLICATE_PROPERTY result, verify the completed effect and the individual property status. The specific focus for MQ_INFORMATION_DUPLICATE_PROPERTY remains duplicate identifier in a parallel property array.

  • In the MQ_INFORMATION_DUPLICATE_PROPERTY path, restarting MSMQ before collecting evidence can invalidate handles and erase the first useful event; it is a containment action, not a root-cause diagnosis.
  • For this MQ_INFORMATION_DUPLICATE_PROPERTY result, granting broad queue or certificate permissions may mask the symptom while creating a security defect. For MQ_INFORMATION_DUPLICATE_PROPERTY, test the exact identity and access needed by the operation.

Worked example

A com-based administration utility encounters MQ_INFORMATION_DUPLICATE_PROPERTY. For MQ_INFORMATION_DUPLICATE_PROPERTY, it records both the successful primary effect and the property warning, then corrects only the affected field. When diagnosing MQ_INFORMATION_DUPLICATE_PROPERTY, the acceptance test then changes only the decisive precondition and confirms both the HRESULT and the actual queue/message state.

A regression test should force MQ_INFORMATION_DUPLICATE_PROPERTY, assert the raw value and relevant outputs, then correct only the documented precondition and verify the intended success or neighboring HRESULT.

References


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