Серийный номер может содержать до 255 байт произвольных данных, которые система лицензирования без изменений передает вызывающей программе. Это может быть какая-то дополнительная информация о продаже, данные, без которых не будет работать полная версия, или еще что-нибудь. Изменим функцию main(), чтобы она считывала данные из серийного номера и показывала их на экране:
int main(int argc, char **argv) { char *serial = "Xserialnumber"; int res = VMProtectSetSerialNumber(serial); print_state(res); if (res) return 0; VMProtectSerialNumberData sd = {0}; VMProtectGetSerialNumberData(&sd, sizeof(sd)); printf("Serial number has %d byte(s) of data\n", sd.nUserDataLength); for (int i = 0; i < sd.nUserDataLength; i++) printf("%02X ", sd.bUserData[i]); printf("\n"); return 0; }
Ini-файл при этом сократим до такого вида:
[TestLicense] AcceptedSerialNumber=Xserialnumber
Теперь запустим программу и убедимся, что наш серийный номер подходит, но не содержит никаких данных:
state = 0 Serial number has 0 byte(s) of data
Чтобы добавить пользовательские данные в серийный номер, необходимо создать в ini-файле переменную UserData и присвоить ей строчку из HEX-символов. Символы должны идти парами, т.е. длина строки должна быть кратна 2. Строка может быть, например, такой:
UserData=010203A0B0C0D0E0
В этом случае при запуске программы мы получим следующий результат:
state = 0 Serial number has 8 byte(s) of data 01 02 03 A0 B0 C0 D0 E0