Добрый день, Дмитрий.
Да, целостность таблицы лицензий действительно контролируется при помощи функции 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
С уважением,
Алексей Лазарев