# Шаг 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