Что означает код HRESULT 0xC00E0007 (MQ_ERROR_INVALID_HANDLE)?

 
Предыдущий Следующий
MQ_ERROR_INVALID_PARAMETER MQ_ERROR_OPERATION_CANCELLED

MQ_ERROR_INVALID_HANDLE

Что означает MQ_ERROR_INVALID_HANDLE

MQ_ERROR_INVALID_HANDLE — Переданный дескриптор очереди недействителен для запрошенной операции: он мог не открыться, уже быть закрыт или относиться к предыдущему времени жизни очереди или службы.

Queue handle MSMQ действителен только после успешного открытия и до закрытия либо перезапуска службы, который сделал его устаревшим. Числовое значение дескриптора само по себе не доказывает, что он всё ещё относится к текущей очереди.

Что проверить

  • Сопоставьте место успешного MQOpenQueue с конкретным handle и каждым последующим close; исключите двойное закрытие и использование после close.
  • Проверьте гонки между потоками, где один поток заменяет или закрывает handle, пока другой выполняет send/receive.
  • Если служба MSMQ перезапускалась, считайте все ранее открытые handles недействительными и открывайте очередь заново.

Как подтвердить исправление

После исправления тест должен переживать повторные open/close и контролируемый перезапуск MSMQ без обращения к старому дескриптору.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.