Серийный номер может содержать до 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