Получение ID HASP-ключа

Страницы: 1 2 След.
RSS
Получение ID HASP-ключа, hasp_get_info/hasp_get_sessioninfo + Delphi 10 Seattle
 
Доброго времени суток.

Есть необходимость получить ID ключа. Методы hasp_login и hasp_logout отрабатывают прекрасно, а вот hasp_get_info/hasp_get_sessioninfo не работает вообще. Возвращают коды ошибок HASP_INV_SCOPE и HASP_INV_FORMAT соответственно.
Код
procedure TForm1.cxButton1Click(Sender: TObject);const  cnstScope = //'<?xml version="1.0" encoding="UTF-8"?>'#13#10 +          '<root>'#13#10 +          '<haspscope>'#13#10 +          '   <hasp vendor="1"/>'#13#10 +          '</haspscope>'#13#10 +          '</root>';  cnstFormat = //'<?xml version="1.0" encoding="UTF-8"?>'#13#10 +               '<haspformat root="hasp_info">'#13#10 +               '   <hasp>'#13#10 +               '     <attribute name="id"/>'#13#10 +               '   </hasp>'#13#10 +               '</haspformat>';var Ahandle: hasp_handle_t;    info: PWideChar;    ErrCode: hasp_status_t;begin  ErrCode := hasp_login(0, @vendor_code[1], Ahandle);  if ErrCode <> HASP_STATUS_OK then  begin    ShowMessage('Login ' + IntToStr(ErrCode));    Exit;  end;  try    ErrCode := hasp_get_sessioninfo(Ahandle, @cnstFormat[1], info);    if ErrCode <> HASP_STATUS_OK then      ShowMessage('sessioninfo ' + IntToStr(ErrCode))    else      ShowMessage('Info ' + Info);  finally    ErrCode := hasp_logout(Ahandle);    if ErrCode <> HASP_STATUS_OK then      ShowMessage('Logout ' + IntToStr(ErrCode));  end;//  ErrCode := hasp_get_info(//    @scope[1]//    ,@format[1]//    ,@vendor_code[1]//    ,info);//  case ErrCode of//    HASP_STATUS_OK: ShowMessage('HASP_STATUS_OK "' + info + '"');//    HASP_INV_HND: ShowMessage('HASP_INV_HND "' + info + '"');//    HASP_INV_FORMAT: ShowMessage('HASP_INV_FORMAT "' + info + '"');//  else//    ShowMessage(IntToStr(ErrCode) + ' "' + info + '"')//  end;end;

Информация о ключе в web-интерфейсе:


Подскажите, что я делаю не так? Перепробовал кучу комбинаций xml представлений для полей scope и формат, ответ один и тот же.
 
Добрый день, Игорь.

Лучше всего посмотреть как правило сделать этот вызов в утилите ToolBox, которая входит в комплект разработчика.

Вам какой именно ID нужен - тот с которым уже открыта текущая сессия или просто ID всех доступных ключей Вашей серии?
 
Спасибо, поковыряю ToolBox.

Если я правильно понимаю, то мне скорее всего нужен идентификатор ключа текущей сессии, т.к. подключение происходит непосредственно по ключу разработчика (vendor_code), в системе может и должен находиться только один ключ моего разработчика, а чужие ключи меня не интересуют.
 
Тогда Вам нужна функция hasp_getsessioninfo, Format Template - HASP_KEYINFO. Тогда функция вернет Вам данные по ключу, с которым открыта сессия(hasp_login).
Если останутся вопросы - пишите.
 
Попробую начать сначала: я в работе с HASP-ключем новечок. Запросил утилиту которой прошивают ключи, мне выдали версию 5.12. С vendor_code по умолчанию запросы выполняются, но всегда возвращают пустой ответ (ну оно и понятно, ключа от этого поставщика нет в системе). При попытке подменить vendor_code на собственный ToolBox ругается: 400 (HASP_NO_API_DYLIB). Рядом со всеми файлами hasp_windows_demo.dll что находятся в системе создал одноименный файл содержащий в имени vendor_id, но проблема не исчезла. С моим vendor_code отказывается работать. Но со своим vendor_code я по прежнему могу прочитать записанные на ключ лицензии через приложение написанное мной на Delphi 10.

Какой файл хочет видеть ToolBox? Код генерируется на C, если это имеет значение.

PS. обновление версии до 7.5 не помогло...
 
Не знаю на сколько это критично, но длина ключа, записанного в строчку у меня 940 символов, в то время как дефолтный ключ 960 символов...
 
Вам нужно выполнить процедуру представления Мастер-ключа во время которой будут сгенерированы библиотеки для работы с ключами Вашей серии. Как выполнить эту процедуру показано в видео-уроке номер 1: https://safenet-sentinel.ru/sdk/
 
Цитата
Игорь Анацкий пишет:
Не знаю на сколько это критично, но длина ключа, записанного в строчку у меня 940 символов, в то время как дефолтный ключ 960 символов...
Ключ - это закодированный в base64 набор "открытых ключей" к разным протоколам связки программы и драйвера. Со временем вводятся новые протоколы и убиваются старые. Типовые "двигающиеся окна" (sliding windows). Должны более или менее (плюс-минус 2-3 года по моему опыту) совпадать по времени три компонента:

1) версия драйверов-рантайма
2) версия OBJ-файлов линкуемых в Delphi
3) версия HVC-файла (того самого ключа)

Каждый из этих компонентов - то самое "сдвигающееся окно", и пока у всех трёх окон находится общий "протокол" - они договариваются и работают. В частности разница в 940/960 букв - это примерно 14 байтов, новый ключ к новому протоколу или что-то вроде того, не критично совсем,если даты близки.

Если же где-то будет большой разрыв в версиях (в датах) - то "фокус не получится". Даже если длины" ключей будут совпадать.

В частности это к вопросу о "Запросил утилиту которой прошивают ключи, мне выдали версию 5.12" - эта утилита вполне может прошивать Program ID по стандарту HASP4 в виде заполнение WORD-переменных в FAS-памяти.
При этом в ранних версиях драйверов 6.х совместимость с этим старым протоколом - отломали. hasp_login посто перестал видеть FeatureID соответсвующие ProgramID из FAS-памяти. Если же нарыть старые драйвера - то совместимость Feature ID и Program ID восстанавливается, но умирает совместимость с мало-мальски современными Windows и OBJ-файлами. Об эту стенку я ился пару лет назад....
 
Информация о ключе в web-интерфейсе:
[img]http://www.picshare.ru/view/7998020/[/img];

На мой взгляд - не очень интересно.
Информативнее было бы - показать окошко Features.
А совсем хорошо - если у вас есть доступ к мастер-ключу - снять слепок (C2V) и декодировать его в чистый XML (в ToolBox'e на вкладке License Generation API функция decode)

Либо просто узнать у разработчиков "утилиты для прошивки" - как именно и куда именно они пишут.

PS. Кстати, по моему личному опыту, "новые" 6МБ OBJ-файлы для Delphi введенные в LDK 7.3 не работают. Пока не было времени заняться вплотную и попытаться выявить граничные условия. Поэтому мой класс для ООП-работы с HASP Runtime API после нескoльких часов попыток "завести по быстрому" был откачен назад на старый "маленький" OBJ.  
 
"На этом форуме вставлять исходники не рекомендую - он очень капризный и корректно работает с немногими браузерами.

Лучше клади исхзодники на нормлаьные сайты и вставляй ссылку.

Вот твой исходник, напримре http://pastebin.ca/3786922


Ну для начала  - <hasp vendor="1"/> - это что за параметр? в документации он как описан?

1) На твоём скриншоте в столбце VENDOR какое значение, разве единица? ты его замазал, но я уверен, что там была не единица, а что-то другое
2) Вообще это параметр задавать в XML нет никакого смысла. Твой vendor code всё равно уникально кодируется в OBJ-файле и в HVC-файле. Ключы с любыми другими значениями vendor code тебе все равно пощупать не дадут. Поэтому этот параметр не нужно задавать вообще.
3) А вот внимательно отследить, чтобы OBJ-файл и HVC-файл друг другу соответсвовали - надо. Если они будут от разных вендор-кодов, то ключей вы вообще никаких не увидите - половину отфильтрует один, а другую половину - другой.
Страницы: 1 2 След.
Читают тему (гостей: 1)