# Шаг 1.9: Привязка к оборудованию

Получение идентификатора оборудования

Прежде чем привязываться к оборудованию, необходимо получить идентификатор оборудования. Идентификатор помещается в серийный номер и при передаче этого номера системе лицензирования происходит проверка соответствия идентификаторов. Поэтому для начала получим идентификатор нашего оборудования. Сократим main() до самого короткого варианта:

    int main(int argc, char **argv)
    {
            int nSize = VMProtectGetCurrentHWID(NULL, 0);
            char *buf = new char[nSize];
            VMProtectGetCurrentHWID(buf, nSize);
            printf("HWID: %s\n", buf);
            delete [] buf;
            return 0;
    }

Запустив эту программу, мы получим тестовый идентификатор оборудования, используемый по умолчанию:

    HWID: myhwid

Чтобы изменить идентификатор, используемый по умолчанию, добавьте в ini-файл строку:

    MyHWID=test

Запустив программу после этого, мы увидим, что система лицензирования теперь считает "test" идентификатором оборудования:

    HWID: test

Внимание! реальный идентификатор оборудования программа будет выдавать только после ее обработки в VMProtect.

Серийный номер с привязкой к оборудованию

Чтобы наш тестовый серийный номер был привязан к оборудованию, добавим в ini-файл еще одну строчку, на этот раз с идентификатором, "записанным" в номер:

    KeyHWID=test

А функцию main() слегка усложним, она снова будет подавать серийный номер и анализировать получаемый результат:

    int main(int argc, char **argv)
    {
            int nSize = VMProtectGetCurrentHWID(NULL, 0);
            char *buf = new char[nSize];
            VMProtectGetCurrentHWID(buf, nSize);
            printf("HWID: %s\n", buf);
            delete [] buf;

            char *serial = "Xserialnumber";
            int res = VMProtectSetSerialNumber(serial);
            print_state(res);
            return 0;
    }

Запустив код, получим следующий результат:

    HWID: test
    state = 0

Система лицензирования сравнила текущий идентификатор оборудования и тот, который был запиан в серийном номере. Идентификаторы совпали и функция VMProtectSetSerialNumber() вернула 0 - серийный номер подходит.

Попробуем теперь "запустить" нашу программу на другом оборудовании. Для этого поменяем значение "test" параметра MyHWID в ini-файле на "new test". И снова запустим программу:

    HWID: new test
    state = SERIAL_STATE_FLAG_BAD_HWID

На этот раз система лицензирования вернула флаг SERIAL_STATE_FLAG_BAD_HWID, означающий несовпадение реально идентификатора оборудования с тем, что хранится в серийном номере. Текущий идентификатор оборудования, выведенный на экран - "new test", а в серийном номере хранится "test". Поменяв в ini-файле значение параметра KeyHWID на "new test" можно добиться работы серийного номера и на этом "оборудовании".

Следующий шаг

© 2006-2015 Copyright VMProtect Software