Единственный сессионный ключ (OnlyOneSessKey,2ndSessKey)

Доброго времени суток.

Подскажите, что я делаю не так, почему ключ позволяет запускать множество экземпляров одной программы?

Мои действия:

ЗАПИСЬ В КЛЮЧ
1 - GrdSetFindMode, GrdLogin, GrdSetWorkMode, GrdLock
2 - инициализирую память ключа GrdInit
3 - пишу в ключ данные GrdWrite
4 - устанавливаю защиту GrdProtect(hGrd, 0, 0, 0, 0, GrdGF_OnlyOneSessKey, NULL);
или
4 - GrdProtect(hGrd, 0, 0, 0, 0, GrdGF_OnlyOneSessKey|GrdGF_2ndSessKey, NULL);
5 - GrdUnlock, GrdLogout

РАБОТА С КЛЮЧЕМ В ПРОГРАММЕ
--Первая программа
Логинимся читаем данные
...
--N-ая программа
Логинимся читаем данные. Никаких ошибок, данные свободно читаются

Re: Единственный сессионный ключ (OnlyOneSessKey,2ndSessKey)

Вот вызов GrdLogout() зачем?

Функция GrdLogout закрывает сеанс работы с локальным или удаленным ключом. Как правило, сеанс работы с ключом закрывается при завершении работы копии защищенного приложения, когда никакие более операции с данным ключом выполняться не будут.

Если сеанс был открыт с удаленным ключом, в процессе выполнения функции происходит возврат лицензии (увеличение на 1 счетчика лицензий) серверу Guardant Net и таблице лицензий LMS, с которыми работало приложение.

Вся информация об этой копии приложения в памяти сервера Guardant Net будет уничтожена. Возврат лицензии серверу осуществляется в том же режиме, что и производился захват. То есть учитывается режим выдачи лицензий рабочим станциям или копиям приложения. С этого момента получить доступ к ключу приложение может, только снова выполнив функцию GrdLogin.

(2016-09-07 09:29:43 отредактировано artemmh)

Re: Единственный сессионный ключ (OnlyOneSessKey,2ndSessKey)

aloch пишет:

Вот вызов GrdLogout() зачем?

Затем, что это две разные программы. Первая программа просто пишет в ключ информацию и все, на этом работа с ключом завершена.

Как правило, сеанс работы с ключом закрывается при завершении работы копии защищенного приложения, когда никакие более операции с данным ключом выполняться не будут.

Вторая программа уже работает с ключом, а она уже именно так и работает, сеанс работы с ключом закрывается при выходе из программы.

Вся информация об этой копии приложения в памяти сервера Guardant Net будет уничтожена.

Я не работаю с сервером Guardant Net.

Ключ локальный, Sign[USB]

Re: Единственный сессионный ключ (OnlyOneSessKey,2ndSessKey)

artemmh пишет:

РАБОТА С КЛЮЧЕМ В ПРОГРАММЕ
--Первая программа
Логинимся читаем данные
...
--N-ая программа
Логинимся читаем данные. Никаких ошибок, данные свободно читаются

Здравствуйте.

А первая копия приложения, после удачного запуска второй, повторно позволяет прочесть нужные данные?

Re: Единственный сессионный ключ (OnlyOneSessKey,2ndSessKey)

Антон Тихиенко пишет:

А первая копия приложения, после удачного запуска второй, повторно позволяет прочесть нужные данные?

В том и дело, что да, позволяет. Обе копии свободно читают данные.
З.Ы.
Я заметил такую закономерность.
Запускаем первую копию программы, блокируем ключ на чтение. Запускаем вторую копию, ждем сообщения о том, что ключ заблокирован. В первой программе разблокируем ключ. Запустим третью копию и прогоняем полный цикл чтения ключа. Вернемся в первую программу, попробуем снова считать данные и вот только тогда получим сообщение, что сессия занята.

Re: Единственный сессионный ключ (OnlyOneSessKey,2ndSessKey)

artemmh пишет:

В том и дело, что да, позволяет. Обе копии свободно читают данные.
З.Ы.
Я заметил такую закономерность.
Запускаем первую копию программы, блокируем ключ на чтение. Запускаем вторую копию, ждем сообщения о том, что ключ заблокирован. В первой программе разблокируем ключ. Запустим третью копию и прогоняем полный цикл чтения ключа. Вернемся в первую программу, попробуем снова считать данные и вот только тогда получим сообщение, что сессия занята.

У нас такое поведение не воспроизводится.
Т.е. при помощи утилиты программирования ключей (GrdUtil.exe) ключ был запрограммирован в режиме 1 сессионный ключ для Guardant API. Последовательно, после логина (GrdLogin), выполняется блок функций выполняющих:

  1. Чтение строки из незащищенной аппаратными запретами области памяти электронного ключа (GrdRead)

  2. Чтение определителя защищенной ячейки (GrdPI_Read)

  3. Кодирование\декодирование строки (GrdCrypt)

Весь блок выполняется бесконечное количество итераций, каждая новая итерация выполняется после нажатия клавиши.
В результате если запустит одну копию приложения, то каждая итерация выполняется корректно. После запуска второй копии первое запущенное приложение после вызова каждой функции возвращает ошибку Invalid session key - т.е. как и должно быть.

Попробуйте запрограммировать ключ при помощи утилиты GrdUtil.exe.