Luck пишет:Защита на уровне ключа? драйвера? API?
В современных электронных ключах Guardant, наличие механизма шифрования трафика между электронным ключом и Guardant API дает возможность на аппаратном уровне ограничить использование локального ключа одновременно из нескольких терминальных сеансов.
Подробнее о данном механизме можно прочитать в руководстве по утилитам Guardant: часть 1 стр. 68, часть 2 стр. 10 (по умолчанию вся документация находится в одной папке с установленным комплектом разработчика: %Program Files%\Guardant\Guardant 6\%Public Code%\Doc\).
Luck пишет:Иными словами, если ли ключ старый (Stealth I или II), а приложение новое (API 6.2), то как оно должно работать в терминальном сервере?
Вне зависимости от используемой версии Guardant API, защиту от терминальных сессий для старых моделей электронных ключей нужно реализовывать самостоятельно, например:
При необходимости запрета запуска нескольких копий приложения разработчику самостоятельно следует использовать специальные методы, например, создание глобальных объектов или эвентов.
Такой запрет можно организовать, как с помощью Guardant API, используя декрементацию счётчиков разными копиями приложения, так и запретом на запуск приложения в нескольких сессиях, используя именованный объект (с префиксом "Global\") с учётом рекомендаций MSDN.
В дополнение можно посоветовать еще один простой, но интересный способ.
Он заключается в том, что приложение в случайный момент времени генерирует случайное число, подвергает его изощренным преобразованиям и записывает в определенный адрес памяти ключа. Через некоторый случайный промежуток времени приложение считывает записанное число, подвергает его преобразованиям и сравнивает с тем, что было сгенерировано. Очевидно, что вторая запущенная копия приложения будет делать то же самое. Если числа не сойдутся, значит работает больше одной копии приложения.
Также рекомендуем обратить внимание на ПО Guardant последних версий.
В ПО Guardant начиная с версий 5.хх при работе с локальными ключами можно организовать запреты на запуск нескольких копий приложения с помощью блокировки ключа текущей копией приложения (функция GrdLock).