(2013-08-14 13:57:56 отредактировано Дмитрий Бурцев)

Программное изменение Реального сетевого ресурса ключа

Добрый день.
Пишу на Delphi. Каким образом программно можно изменить Реальный сетевой ресурс
пробовал через GrdWrite(hGrd, GrdSAM_wRealLANRes,...) и GrdWrite(hGrd, GrdUAM_wRealLANRes,...)

не получается.
Нужно ли для этого делать GrdSetAccessCodes() с паролем PrivateMST или достаточно PrivateWR

Re: Программное изменение Реального сетевого ресурса ключа

Здравствуйте, Дмитрий Бурцев.

На сегодняшний день данное поле (реальный сетевой ресурс ключа) является устаревшим и современными версиями сервера сетевых ключей Guardant Net оно не используется. Сейчас это поле нужно только для утилиты диагностики.

Непосредственно в работе сервера ключей используется исключительно таблица лицензий (описание таблицы лицензий есть во второй части нашего руководства пользователя на стр.33 - вся документация находится в одной папке с установленным комплектом разработчика Guardant, директория по умолчанию: "%Program Files%\Guardant\Guardant 6.2\%Public Code%\Doc") и менять нужно ее (для современных ключей, которые ранее уже прошивались разработчиком некоторой маской, содержимое таблицы лицензий нужно обновлять при помощи функции GrdPI_Update).

Re: Программное изменение Реального сетевого ресурса ключа

У меня образ содержит LMS таблицу с одной записью, адрес начинается с 44, длина 94 байта

Пробую nRet := GrdPI_Read(hGrd, 0, 16, 2, @DD, 0, nil);  все нормально  DD - показывает сетевой ресурс, который мне необходим

Мне нужно просто использовать функцию GrdPI_Update() для обновления информации или еще нужно обновить поле со смещение 4 байта (CRC контрольная сумма таблицы?). Если это необходимо, подскажите как мне получить эту контрольную сумму, а то я что-то запутался.

Re: Программное изменение Реального сетевого ресурса ключа

Дмитрий Бурцев пишет:

Мне нужно просто использовать функцию GrdPI_Update() для обновления информации

Да, этого достаточно.

Re: Программное изменение Реального сетевого ресурса ключа

Вставляю такой вот код

nRet := GrdPI_Update(hGrd, 0, 16, 2, @DD, 0, GrdUM_MOV, nil);

Где DD отличается от того ресурса, который установлен при записи образа

Считываю его, все нормально, НО обновляю информацию по ключу в сервере лицензий - сетевой ресурс = 0.
что делать?

(2013-08-19 08:10:30 отредактировано Дмитрий Бурцев)

Re: Программное изменение Реального сетевого ресурса ключа

Еще раз здравствуйте.
Может я не правильно объяснил свою проблему, чем ввел вас в заблуждение, что в свою очередь не позволяет вам дать ответ уже 4 дня. Ситуация такая: мне необходимо программно изменить количество реального сетевого ресурса в сетевом ключе. Образ был создан из пустого сетевого ключа, добавлена LMS таблица с указанием реального ресурса в 5 единиц. (адрес LMS таблицы начинается 0044, длина 94 байта). Как уже писал выше попробовал изменить количество с 5 на 8 единиц посредством функции

nRet := GrdPI_Update(hGrd, 0, 16, 2, @DD, 0, GrdUM_MOV, nil);

где DD = 8. Далее попробовал прочитать - действительно изменения были внесены. После чего сервер лицензий показывает что количество реального сетевого ресурса = 0. В документации сказано, что с 4 байта LMS таблицы необходимо сохранить CRC таблицы (2 байта). Может быть в этом все дело? если дело действительно в этом напишите пожалуйста каким способом мне посчитать CRC всей LMS таблицы? (желательно непосредственно код)
Спасибо заранее

Re: Программное изменение Реального сетевого ресурса ключа

Добрый день, Дмитрий.
Да, целостность таблицы лицензий действительно контролируется при помощи функции GrdCRC из Guardant API.
В начале таблицы лицензий присутствует заголовок, имеющий структуру, описанную ниже

typedef struct tagS3_LMS_HEADER
{
    WORD    wSignature;        // LMS table signature = 'LT'
    WORD    wVersion;        // version of the licence table = 0x510
    DWORD    dwCRC;            // CRC of the LMS (GrdCRC)
    WORD    wFlags;            // Licence table flags (If (wFlags & 1) size of license module = 2 bytes, otherwise - 1 byte
    BYTE    byLicensesCount;// Count of licences
    BYTE    byReserved[5];    // Reserved bytes
}S3_LMS_HEADER, *PS3_LMS_HEADER;

За этой структурой лежат модули таблицы лицензий и их значения.
Вам нужно посчитать CRC от области памяти, начиная с поля wFlags, и, заканчивая последним модулем в таблице лицензий. Размер модуля может быть равен 1-му или 2-м байтам, в зависимости от значения младшего бита поля флагов.

Помимо CRC проверяются поля версии LMS и сигнатуры (их нужно оставить как есть).

Есть вариант проще. С помощью утилиты программирования ключей создать LMS с нужными значениями. Затем в меню по правой кнопке выбрать пункт Показать дамп поля. и скопировать в буфер область памяти, начиная с символов TL в HEX-редакторе. Это и будет дамп таблицы лицензий, который можно поместить в функцию GrdPI_Update

С уважением,
Алексей Лазарев

Re: Программное изменение Реального сетевого ресурса ключа

Спасибо огромное все заработало!