При запуске отраслевых конфигураций 1С, использующих внешнюю защиту СЛК (Система лицензирования и защиты конфигураций), пользователи часто сталкиваются со следующей критической ошибкой:
«Ошибка создания менеджера объектов СЛК!: {ОбщийМодуль.СЗК_МодульЗащиты.Модуль(287)}: Ошибка при вызове метода контекста (Подключить): Ошибка подключения внешних метаданных: Ошибка при выполнении файловой операции... Неверный формат хранилища данных 'e1cib/tempstorage/...'»
Самое примечательное в этой ситуации то, что стандартная очистка локального кэша 1С и проверка физической целостности базы данных утилитой chdbfl.exe не приносят результатов. Однако при запуске платформы 1С от имени администратора («Запуск от имени администратора») ошибка полностью исчезает, и база открывается в штатном режиме. Но постоянно работать под учетной записью администратора небезопасно и неудобно.
В этой статье мы подробно разберем, почему возникает эта неполадка, как она связана с внутренними механизмами безопасности операционной системы Windows и как полностью устранить её раз и навсегда.
---
Для того чтобы понять природу сбоя, проанализируем поведение системы защиты. При запуске защищенной конфигурации код из общего модуля (в нашем случае это СЗК_МодульЗащиты) обращается к ключу защиты через специальную внешнюю компоненту или менеджер объектов (обычно это защищенный файл обработки формата .epf или бинарный модуль .dll).
Платформа выполняет следующие действия:
e1cib/tempstorage/.ВнешниеОбработки.Подключить().Если на одном из этих этапов происходит сбой (например, файл создается нулевого размера, блокируется антивирусом или подменяется устаревшей версией), платформа считывает поврежденную структуру данных. Не сумев распознать в ней формат внешней обработки, 1С генерирует исключение: «Неверный формат хранилища данных».
Но почему это зависит от прав администратора? Всё дело в механизме виртуализации папок Windows, известном как VirtualStore.
---
Механизм VirtualStore (виртуализация файлов и реестра) был разработан Microsoft для обеспечения обратной совместимости старых программ, которые пытаются писать свои служебные файлы в защищенные системные папки (например, в C:\Program Files или C:\Windows), не имея на то прав администратора.
Когда 1С или служба СЛК запускаются с обычными правами пользователя, Windows перенаправляет все операции записи из защищенных директорий в специальный изолированный каталог пользователя. При последующем чтении система незаметно «подсовывает» программе файлы из этого виртуального хранилища.
Если в папку VirtualStore один раз записался поврежденный, пустой или устаревший файл лицензирования, то при обычном запуске 1С будет бесконечно считывать именно этот нерабочий файл. При запуске же «От имени администратора» виртуализация отключается, программа обращается к реальным системным путям, находит там корректный файл защиты и успешно запускается.
Для исправления ситуации выполним очистку виртуализированных каталогов по шагам:
Имя_Пользователя на имя вашей учетной записи в системе):
C:\Users\Имя_Пользователя\AppData\Local\VirtualStore\
VirtualStore. Нас интересуют подкаталоги, связанные с платформой 1С и защитой Katran/СЛК:
...\VirtualStore\Program Files\1cv8\......\VirtualStore\Program Files (x86)\1cv8\......\VirtualStore\ProgramData\1C\...1cv8 и 1C из каталога VirtualStore. Сами оригинальные программы при этом не пострадают, удалится лишь некорректный виртуальный кэш.---
Поскольку распаковка защищенных компонент СЛК происходит через временные файлы текущего сеанса пользователя Windows, любые проблемы с правами на запись в папку %TEMP% гарантированно вызовут ошибку формата хранилища.
Выполним детальную проверку этой области:
Win + R, введем команду %temp% и нажмем Enter. Мы попадем в рабочий каталог временных файлов текущего пользователя.Ctrl + A) и удалим их. Пропустим те файлы, которые заблокированы в данный момент другими работающими программами.Local), найдем папку Temp, нажмем на нее правой кнопкой мыши и выберем «Свойства».---
Поведение программных продуктов, защищенных СЛК, часто вызывает подозрения у современных проактивных систем защиты информации. С точки зрения антивируса, процесс, который изнутри себя создает исполняемые файлы или скрипты во временных директориях и тут же пытается их запустить, ведет себя как потенциальная угроза (вирус-дроппер).
Антивирус может заблокировать обращение к созданному файлу менеджера объектов СЛК. В результате 1С считывает пустой блок данных, что приводит к нашей ошибке.
Для исключения влияния защитного софта выполним следующие настройки:
C:\Program Files\1cv8\
C:\Program Files (x86)\1cv8\
C:\Program Files\1C\Licence\
1cv8.exe, 1cv8c.exe и службе лицензирования СЛК.---
Часто проблема несовместимости версий проявляется после скрытого или планового обновления платформы 1С:Предприятие. Старая версия драйверов СЛК не может корректно взаимодействовать с обновленными механизмами безопасности новой платформы при работе под обычным пользователем.
Для исправления этой проблемы выполним полное обновление системы лицензирования:
.dll файлов защиты). Для ручной установки запустим установку компоненты из дистрибутива СЛК под учетной записью администратора.---
Если ваша информационная база работает в клиент-серверном варианте под управлением сервера приложений 1С:Предприятие, источником проблемы может стать зависший кэш сеансовых данных на стороне сервера.
Для устранения этой неисправности выполним следующие действия на сервере приложений:
services.msc).C:\Program Files\1cv8\srvinfo\).reg_1541) и найдем там каталоги, имена которых начинаются с префикса snccntx (например, snccntxce82bf12-...). Это кэшированные данные активных сеансов.1CV8Reg.lst) трогать ни в коем случае нельзя!После проведения вышеописанных процедур поврежденные кэш-файлы будут пересозданы платформой заново, механизмы виртуализации перестанут блокировать работу СЛК, и ваша база данных успешно откроется под учетной записью обычного пользователя без необходимости повышения прав до уровня администратора системы.