При администрировании серверов 1С специалисты часто сталкиваются с необходимостью управления аппаратными ключами защиты HASP. Одной из наиболее острых проблем является некорректная работа менеджера лицензий (HASP LM) на современных операционных системах, начиная с Windows Server 2012 R2. В этой статье мы подробно разберем, почему возникает ошибка BEX с модулем StackHash, как правильно настроить мониторинг лицензий и какие современные альтернативы существуют для стабильной работы системы.
Ошибка BEX (Buffer Overflow Exception) в сочетании с кодом исключения c0000005 при запуске исполняемого файла nhsrvw32.exe (менеджер лицензий в режиме приложения) указывает на попытку обращения к памяти, которая защищена системой. Разберем ситуацию глубже. Приложение HASP LM версии 8.32 и ниже было разработано в эпоху Windows XP и Server 2003. В новых ОС Windows реализованы механизмы защиты DEP (Data Execution Prevention) и ASLR (Address Space Layout Randomization).
Проблема заключается в том, что старый 32-битный код менеджера лицензий не умеет корректно работать с динамическим перераспределением адресов памяти. Даже если мы добавим приложение в исключения DEP, ошибка может сохраняться из-за механизмов контроля целостности стека. Запуск в режиме совместимости с Windows 7 или XP часто не дает результата, так как ядро системы 6.3 (Server 2012 R2) накладывает более жесткие ограничения на выполнение инструкций в памяти.
Поскольку запуск в режиме приложения часто приводит к краху, наиболее стабильным вариантом остается работа в режиме службы (Service). Однако пользователи часто жалуются, что при работе службы невозможно управлять сессиями. Это заблуждение. Выясним, почему Aladdin Monitor может показывать «пустой список», даже если служба запущена и ключи видны.
Основная причина — некорректная привязка службы к сетевым интерфейсам. Если на сервере несколько сетевых карт (или есть виртуальные адаптеры), менеджер лицензий может «слушать» не тот интерфейс, через который идет обращение от монитора. Для решения этой проблемы нам необходимо отредактировать конфигурационный файл nhsrv.ini.
Найдем этот файл (обычно он находится в C:\Windows\SysWOW64 или в папке установки менеджера) и проанализируем следующие параметры:
[NHS_IP]
; Укажите конкретный IP-адрес вашего сервера
NHS_IP_LIMIT = 192.168.1.10
[NHS_SERVER]
; Включите использование протоколов UDP и TCP
NHS_USE_UDP = Enabled
NHS_USE_TCP = Enabled
После внесения изменений службу необходимо перезапустить. Теперь Aladdin Monitor, запущенный от имени администратора, с большей вероятностью увидит активные сессии.
Одной из главных причин, по которой администраторы пытаются запустить LM как приложение, является желание принудительно отключать пользователей, которые «заняли» лицензию и не освободили ее (например, при аварийном завершении 1С). Рассмотрим, как это сделать правильно:
nhsrv.ini за это отвечает параметр NHS_USER_SESSION_TIMEOUT.Рассмотрим пример настройки тайм-аута в nhsrv.ini для автоматической очистки:
; Устанавливаем время ожидания в минутах (например, 15 минут)
NHS_USER_SESSION_TIMEOUT = 15
Проанализируем наиболее технологичный способ решения проблемы. Старый HASP HL License Manager (порт 475) морально устарел. Компания Thales (Aladdin) предлагает современный стек — Sentinel LDK Runtime.
Установив актуальный драйвер Runtime (версии 8.x и выше), вы получаете доступ к Admin Control Center (ACC). Это мощный веб-интерфейс, работающий на порту 1947. Рассмотрим его преимущества:
http://localhost:1947.Важное замечание: При переходе на Sentinel LDK Runtime необходимо полностью удалить старую службу HASP License Manager, так как они могут конфликтовать за аппаратный ключ.
В ходе обсуждения часто предлагается радикальный метод — полное отключение DEP через командную строку:
bcdedit.exe /set {current} nx AlwaysOff
Мы крайне не рекомендуем этот метод для серверных ОС. DEP защищает систему от выполнения вредоносного кода в сегментах памяти. Отключая его глобально, вы открываете вектор атаки на сервер. Если исключение конкретного файла nhsrvw32.exe через графический интерфейс «Свойства системы -> Дополнительно -> Быстродействие -> Параметры -> Предотвращение выполнения данных» не помогает, значит проблема глубже, и нужно переходить к использованию службы или ACC.
Также стоит с осторожностью относиться к BAT-файлам для циклического перезапуска службы LM. Посмотрим на типичный пример такого сценария:
net stop "HASP Loader"
timeout /t 5
net start "HASP Loader"
Такой подход — это «костыль». Если в момент выполнения net stop платформа 1С обратится к ключу, работа пользователя будет прервана с потерей несохраненных данных. Используйте это только как крайнюю меру в нерабочее время.
Подведем итог нашему исследованию. Если вы столкнулись с ошибкой BEX на Windows Server 2012 R2:
nhsrv.ini. Укажите явный IP-адрес сервера для корректной работы Aladdin Monitor.