Шаг 1.10: Пользовательские данные

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






© 2006-2015 Copyright VMProtect Software