Что означает код HRESULT 0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL)?

 
Предыдущий Следующий
RPC_E_INVALID_CALLDATA RPC_E_WRONG_THREAD

RPC_E_CANTCALLOUT_ININPUTSYNCCALL

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

RPC_E_CANTCALLOUT_ININPUTSYNCCALL (0X8001010D) означает, что код делает исходящий COM/RPC call во время input-synchronous вызова, где такой callout запрещён. Проблема в текущей фазе dispatch, а не в доступности удалённого сервера.

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

  • Определите callback/window-message path, в котором текущий поток оказался внутри input-synchronous call.
  • Снимите стек непосредственно перед исходящим COM method и найдите участок reentrancy, который можно отложить до возврата из синхронного обработчика.
  • Перенесите работу на очередь/event loop после завершения input-synchronous фазы. Если тот же метод после defer проходит, registration/security менять не требуется.

Не смешивайте с RPC_E_CANTPOST_INSENDCALL: оба результата связаны с call nesting, но тот код отдельно описывает попытку callout через PostMessage во время межзадачного SendMessage.

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


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