Что означает код NTSTATUS 0xC000071D (STATUS_CALLBACK_RETURNED_TRANSACTION)?

 
Предыдущий Следующий
STATUS_INVALID_THREAD STATUS_CALLBACK_RETURNED_LDR_LOCK

STATUS_CALLBACK_RETURNED_TRANSACTION

Обратный вызов оставил контекст транзакции в потоке пула

KTM может связать текущую транзакцию с потоком, чтобы совместимые операции неявно участвовали в ней. Поток пула позднее используется несвязанными обратными вызовами, поэтому оставшаяся связь может включить последующие файловые или реестровые операции в неверную транзакцию.

Обратный вызов должен восстановить предыдущий контекст транзакции, а не только закрыть её дескриптор. Время жизни дескриптора и текущая связь с потоком — разные вещи. Структурированная очистка должна выполняться при успехе, ошибке, исключениях и отмене обратного вызова.

Что следует проверить

  • Запишите предыдущий и новый дескрипторы транзакции, их идентификаторы, рабочий поток и все пути возврата.
  • Сопоставляйте SetCurrentTransaction с восстановлением точного предыдущего контекста.
  • Не считайте, что фиксация или откат автоматически очищают локальное состояние транзакции потока.
  • Проверьте вспомогательные функции, устанавливающие неявную транзакцию под высокоуровневым кодом обратного вызова.

Ссылки


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