Что означает код HRESULT 0x80030005 (STG_E_ACCESSDENIED)?

 
Предыдущий Следующий
STG_E_TOOMANYOPENFILES STG_E_INVALIDHANDLE

STG_E_ACCESSDENIED

Разрешения — только одна из возможных причин

STG_E_ACCESSDENIED означает, что Structured Storage не смогло выполнить запрошенную операцию с доступом, имеющимся у вызывающей стороны. Частые причины — ACL файловой системы, общий ресурс только для чтения, защищённый временный каталог или отсутствие прав у учётной записи службы. Однако HRESULT также нужно рассматривать вместе с режимом открытия корневого хранилища и дочерних потоков: разрешения родительского хранилища ограничивают доступ, который можно предоставить его дочерним объектам.

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

Как сузить причину

  • Запишите идентичность, итоговый путь, запрошенный доступ и тип операции: открытие, создание, удаление или фиксация элемента хранилища.
  • Проверьте внешний файл и содержащий его каталог: создание файла-замены часто требует прав на каталог.
  • Перед диагностикой ACL проверьте режим STGM_*, выбранный для корневого хранилища.
  • Не устраняйте ошибку выдачей широких разрешений; определите минимальную идентичность и доступ, необходимые реальной операции.

Ссылки


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