Как получить список пользователей, каталогов и MD5-хешей паролей из users.usr в 1С 7.7 без запуска платформы

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При администратировании баз данных 1С версии 7.7 часто возникает необходимость получить список зарегистрированных пользователей, их персональные каталоги и MD5-хеши паролей до запуска самого приложения. Штатный запуск 1С блокирует файл users.usr, расположенный в каталоге usrdef информационной базы, что делает его недоступным для чтения некоторыми сторонними процессами.

Рассмотрим подробно внутреннюю структуру файла users.usr и разберем практические способы решения этой задачи без привлечения механизмов самой платформы 1С.

Структура файла users.usr и особенности хранения данных

Проанализируем техническое устройство файла с пользователями. Файл users.usr представляет собой стандартный контейнер OLE Structured Storage (Compound File). Внутри данного контейнера хранятся текстовые потоки данных (например, Container.Contents), оформленные в виде спецструктур с фигурными скобками.

В тексте этих потоков содержатся следующие сведения:

  1. Имя пользователя — краткое сетевое имя и полное наименование в кодировке Windows-1251.
  2. Рабочий каталог — указание абсолютного пути или относительной директории вида .\каталог.
  3. Права и интерфейс — наименования назначенных ролей и интерфейсов.
  4. Хеш пароля — MD5-хеш (строка из 32 шестнадцатеричных символов). Обратите внимание: пароли в 1С 7.7 не шифруются двусторонними алгоритмами, платформой лишь проверяется соответствие MD5-хеша введенного значения записанному.

Способ 1. Использование специализированных библиотек и утилит (usersdef.dll и gcomp)

Выясним, какие существующие компоненты позволяют взаимодействовать с users.usr напрямую:

  1. Библиотека usersdef.dll. Данный модуль специально создан для работы со списками пользователей 1С 7.7 в обход стандартной платформы. С помощью функций этой библиотеки можно выполнять чтение структуры системного файла без его блокировки.
  2. Исходные коды проекта gcomp. Проект gcomp содержит готовую реализацию разбора OLE Compound-файлов 1С. Изучение и использование исходного кода gcomp (на C++) позволяет вычленить нужный алгоритм распаковки потока users.usr и применить его в собственном приложении.

Способ 2. Работа с OLE Structured Storage через API или Python

Если требуется написать собственную консольную утилиту или скрипт автоматизации, разберем программные варианты работы с OLE Compound контейнерами:

Вариант на C++ / C# (Win32 API):

Для открытия заблокированного или стандартного Compound-файла используются функции системного API Windows. Вызов функции StgOpenStorage со флагами совместного доступа STGM_READ | STGM_SHARE_DENY_NONE позволяет прочитать внутренние потоки IStorage и IStream даже в момент работы платформы.

Вариант на Python:

В языке Python для работы с OLE-файлами применяется библиотека olefile. Разберем по шагам порядок действий:

  1. Открываем файл users.usr через olefile.OleFileIO.
  2. Считываем текстовый поток Container.Contents.
  3. Декодируем полученные байты из кодировки cp1251.
  4. С помощью регулярных выражений извлекаем блоки с именами пользователей, путями к каталогам и 32-символьными MD5-строками.

Способ 3. Создание консольной утилиты на .NET

Для быстрой выгрузки пользователей можно написать утилиту на платформах C# / .NET с использованием COM-интерфейсов System.Runtime.InteropServices.ComTypes или сторонних NuGet-пакетов для чтения OLE Structured Storage.

Схема обработки структуры данных при выгрузке:


// Пример логики поиска текстовых элементов пользователя в считанном потоке
string streamContent = ReadStreamFromCompoundFile(filePath, "Container.Contents");
// Разбор блоков внутри фигурных скобок {...}
var matches = Regex.Matches(streamContent, @"\{""(?<Name>[^""]+)""\s*,\s*""(?<Path>[^""]*)""");
foreach (Match match in matches)
{
    string userName = match.Groups["Name"].Value;
    string userFolder = match.Groups["Path"].Value;
    // Дальнейшая обработка и вывод данных
}

Рекомендации при работе с файлом пользователей

  1. Защита от повреждения: Если требуется защитить список пользователей от случайных изменений во время запуска альтернативных стартеров, на файл users.usr часто устанавливают атрибут «Только для чтения» (Read-Only).
  2. Обход блокировок доступа: В случае если платформа блокирует файл на эксклюзивном уровне, перед чтением можно применить копирование файла во временную директорию средствами ОС или использовать механизм теневого копирования тома (VSS).
← На главную