Что означает код HRESULT 0x80030102 (STG_E_REVERTED)?

 
Предыдущий Следующий
STG_E_NOTCURRENT STG_E_CANTSAVE

STG_E_REVERTED

Почему существующие указатели COM становятся непригодными

STG_E_REVERTED — ошибка времени жизни транзакции. В транзакционном Structured Storage вызов IStorage::Revert отбрасывает изменения с момента последней фиксации. При откате родительского хранилища открытые из него дочерние хранилища и потоки становятся недействительными. Продолжение использования кэшированного дочернего интерфейса может вернуть STG_E_REVERTED; кроме освобождения, такой объект нельзя больше считать действительным представлением документа.

Это отличается от исчезновения файла с диска. Иерархия хранилища концептуально продолжает существовать, но конкретные интерфейсы вызывающей стороны принадлежат отменённой ветви транзакции.

Восстановление и архитектура

  • Освободите недействительные дочерние интерфейсы и заново откройте требуемое хранилище или поток из действительного родителя.
  • Явно задайте владение транзакцией: компонент, вызывающий Revert, должен уведомить потребителей, удерживающих потомков.
  • Не удерживайте дочерние потоки через границы отмены интерфейса, отката или повтора без явного шага повторного получения.
  • Записывайте последовательность открытия, фиксации и отката; один итоговый HRESULT не показывает, какой родитель сделал объект недействительным.

Ссылки


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