Что означает код HRESULT 0x80040170 (CACHE_E_NOCACHE_UPDATED)?

 
Предыдущий Следующий
CS_E_INTERNAL_ERROR OLEOBJ_E_NOVERBS

CACHE_E_NOCACHE_UPDATED

Как расследовать HRESULT CACHE_E_NOCACHE_UPDATED

Windows возвращает CACHE_E_NOCACHE_UPDATED (0x80040170), когда выполняется следующее условие: Кэш не обновлён.

Для CACHE_E_NOCACHE_UPDATED старший бит HRESULT делает значение ошибкой. Константа CACHE_E_NOCACHE_UPDATED объявлена в winerror.h и относится к области «OLE, буфер обмена и кеш представлений».

Контекст подсистемы

Для CACHE_E_NOCACHE_UPDATED код относится к обмену данными OLE, структурам FORMATETC/STGMEDIUM, буферу обмена или кешу представлений внедрённого объекта. Для CACHE_E_NOCACHE_UPDATED нужно различать формат, аспект, индекс, TYMED и фактическую доступность источника IDataObject.

Для CACHE_E_NOCACHE_UPDATED не следует начинать с очистки состояния или переустановки компонента. Для CACHE_E_NOCACHE_UPDATED сначала необходимо привязать результат к одному вызову, объекту и поколению его состояния.

В имени CACHE_E_NOCACHE_UPDATED закодированы ориентиры для расследования: CACHE — кеш представления; NO — отсутствие; UPDATED — технический признак «updated». Для CACHE_E_NOCACHE_UPDATED эти ориентиры задают конкретный предмет проверки, но не заменяют контракт вызвавшего API.

Смысл результата: признаки в имени константы

Для CACHE_E_NOCACHE_UPDATED часть CACHE относится к области «кеш представления». При разборе CACHE_E_NOCACHE_UPDATED проверьте, какое состояние этого объекта ожидалось и какое наблюдалось реально.

При разборе CACHE_E_NOCACHE_UPDATED обозначение NO связывает код с темой «отсутствие». До повторной проверки CACHE_E_NOCACHE_UPDATED сохраните входные данные без нормализации.

При разборе CACHE_E_NOCACHE_UPDATED обозначение UPDATED связывает код с темой «технический признак «updated»». До повторной проверки CACHE_E_NOCACHE_UPDATED сохраните входные данные без нормализации.

Для CACHE_E_NOCACHE_UPDATED в техническом контексте особенно важны: FORMATETC, IDataObject, провайдер. При расследовании CACHE_E_NOCACHE_UPDATED их следует проверять как связанные части одной операции, а не как независимые симптомы.

Диагностические данные

  • В первичном журнале по CACHE_E_NOCACHE_UPDATED нужно сохранить все поля FORMATETC: cfFormat, ptd, dwAspect, lindex и tymed.
  • На границе сбоя по CACHE_E_NOCACHE_UPDATED нужно зафиксировать фактически возвращённый STGMEDIUM и владельца его освобождения.
  • Для сравнения с исправным случаем по CACHE_E_NOCACHE_UPDATED нужно перечислить форматы, которые источник IDataObject объявляет доступными.
  • До повторной попытки по CACHE_E_NOCACHE_UPDATED нужно записать интерфейс и метод OLE, вернувший HRESULT.
  • Для воспроизводимого отчёта по CACHE_E_NOCACHE_UPDATED нужно сохранить состояние внедрённого объекта и его соединение с сервером.

Проверка по шагам

  1. Для CACHE_E_NOCACHE_UPDATED: Сравнить запрошенный FORMATETC с результатом EnumFormatEtc источника; отдельно отметьте изменение состояния объекта.
  2. Для CACHE_E_NOCACHE_UPDATED: Проверить совместимость dwAspect, lindex и допустимых TYMED; все остальные условия оставьте неизменными.
  3. Для CACHE_E_NOCACHE_UPDATED: Запросить один минимальный формат без участия кеша или буфера обмена; не удаляйте исходные данные до завершения сравнения.
  4. Для CACHE_E_NOCACHE_UPDATED: Проверить жизненный цикл STGMEDIUM и отсутствие преждевременного ReleaseStgMedium; повторите шаг на исправном контрольном примере.
  5. Для CACHE_E_NOCACHE_UPDATED: После исправления обновить кеш и проверить повторное открытие сохранённого документа; сохраните первый hresult и точное время результата.

Корректирующие действия

Корректирующее действие для CACHE_E_NOCACHE_UPDATED должно устранять условие «Кэш не обновлён» на уровне FORMATETC. Для CACHE_E_NOCACHE_UPDATED простое подавление HRESULT, бесконечный повтор или очистка всех настроек не доказывают восстановление контракта.

Для CACHE_E_NOCACHE_UPDATED исправление считается подтверждённым, когда исходная операция проходит в том же окружении, отрицательный тест по-прежнему предсказуемо отклоняется, а журнал не содержит нового скрытого сбоя.

Документация


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