| Предыдущий | Следующий |
| STG_E_TOOMANYOPENFILES | STG_E_INVALIDHANDLE |
STG_E_ACCESSDENIED
Разрешения — только одна из возможных причин
STG_E_ACCESSDENIED означает, что Structured Storage не смогло выполнить запрошенную операцию с доступом, имеющимся у вызывающей стороны. Частые причины — ACL файловой системы, общий ресурс только для чтения, защищённый временный каталог или отсутствие прав у учётной записи службы. Однако HRESULT также нужно рассматривать вместе с режимом открытия корневого хранилища и дочерних потоков: разрешения родительского хранилища ограничивают доступ, который можно предоставить его дочерним объектам.
Это важно, когда приложение успешно открывает документ для чтения, а позже пытается создать поток, обновить набор свойств или зафиксировать транзакцию. Тогда отказ относится к попытке записи, а не обязательно к возможности найти или разобрать файл.
Как сузить причину
- Запишите идентичность, итоговый путь, запрошенный доступ и тип операции: открытие, создание, удаление или фиксация элемента хранилища.
- Проверьте внешний файл и содержащий его каталог: создание файла-замены часто требует прав на каталог.
- Перед диагностикой ACL проверьте режим
STGM_*, выбранный для корневого хранилища. - Не устраняйте ошибку выдачей широких разрешений; определите минимальную идентичность и доступ, необходимые реальной операции.
Ссылки
- Microsoft: IStorage::OpenStream
- Microsoft: IStorage::CreateStorage
- Apache POI: поддержка составных документов POIFS
Нужно найти другой код? Найти другой код состояния или ошибки.