| Предыдущий | Следующий |
| STATUS_INVALID_THREAD | STATUS_CALLBACK_RETURNED_LDR_LOCK |
STATUS_CALLBACK_RETURNED_TRANSACTION
Обратный вызов оставил контекст транзакции в потоке пула
KTM может связать текущую транзакцию с потоком, чтобы совместимые операции неявно участвовали в ней. Поток пула позднее используется несвязанными обратными вызовами, поэтому оставшаяся связь может включить последующие файловые или реестровые операции в неверную транзакцию.
Обратный вызов должен восстановить предыдущий контекст транзакции, а не только закрыть её дескриптор. Время жизни дескриптора и текущая связь с потоком — разные вещи. Структурированная очистка должна выполняться при успехе, ошибке, исключениях и отмене обратного вызова.
Что следует проверить
- Запишите предыдущий и новый дескрипторы транзакции, их идентификаторы, рабочий поток и все пути возврата.
- Сопоставляйте
SetCurrentTransactionс восстановлением точного предыдущего контекста. - Не считайте, что фиксация или откат автоматически очищают локальное состояние транзакции потока.
- Проверьте вспомогательные функции, устанавливающие неявную транзакцию под высокоуровневым кодом обратного вызова.
Ссылки
- Открытые спецификации Microsoft: значения NTSTATUS
- Microsoft: SetCurrentTransaction
- Microsoft: потоки пула и среды обратных вызовов
- Microsoft: Thread Pool API
Нужно найти другой код? Найти другой код состояния или ошибки.
