Описание функций API лицензирования

API системы лицензирования является продолжением API VMProtect и входит в его SDK. API позволяет задать серийный номер и получить информацию о нем: подходит он к программе или нет, истек ли срок действия, на кого зарегистрирован продукт и т.п. Также API позволяет получить идентификатор оборудования, на котором выполняется программа.

VMProtectSetSerialNumber

Функция предназначена для загрузки серийного номера в систему лицензирования. Полный формат вызова представлен ниже:

int VMProtectSetSerialNumber(const char *SerialNumber);

Входной параметр SerialNumber должен содержать указатель на текстовую строку с серийным номером в кодировке base-64 и завершаемую нулем ('\0'). Функция возвращает битовую маску флагов состояния серийного номера, аналогичную той, что возвращает VMProtectGetSerialNumberState(), подробнее о флагах будет написано ниже. Серийный номер считается "хорошим", если функция вернула значение 0.


VMProtectGetSerialNumberState

Функция возвращает флаги состояния серийного номера, предварительно установленного вызовом VMProtectSetSerialNumber().

int VMProtectGetSerialNumberState();

Наличие хотя бы одного установленного флага говорит о проблемах с серийным номером: программа не должна работать, если установлен хотя бы один бит. Подробные значениях флагов описаны в таблице:

Флаг Значение Описание
SERIAL_STATE_FLAG_CORRUPTED 0x00000001 Система лицензирования повреждена. Возможные причины: некорректная настройка проекта защиты, попытка взлома программы.
SERIAL_STATE_FLAG_INVALID 0x00000002 Серийный номер некорректен. Флаг выставляется, если система лицензирования не может расшифровать серийный номер.
SERIAL_STATE_FLAG_BLACKLISTED 0x00000004 Серийный номер подходит к продукту, однако занесен в черный список в VMProtect.
SERIAL_STATE_FLAG_DATE_EXPIRED 0x00000008 Срок действия серийного номера истек. Подробную информацию о сроке действия можно получить вызовом VMProtectGetSerialNumberData()
SERIAL_STATE_FLAG_RUNNING_TIME_OVER 0x00000010 Время работы программы истекло. Подробную информацию о времени работы программы можно получить вызовом VMProtectGetSerialNumberData()
SERIAL_STATE_FLAG_BAD_HWID 0x00000020 Идентификатор оборудования не совпадает с тем, что записан в серийном номере.
SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED 0x00000040 Серийный номер не предназначен для работы с этой версией защищаемой программы. Максимальную дату сборки программы, к которой подходит этот серийный номер, можно узнать вызовом VMProtectGetSerialNumberData().


VMProtectGetSerialNumberData

Функция предназначена для получения информации о содержимом серийного номера, установленного вызовом VMProtectSetSerialNumber(). Формат вызова представлен ниже:

bool VMProtectGetSerialNumberData(VMProtectSerialNumberData *Data, int Size);

Первый параметр - указатель на структуру VMProtectSerialNumberData, в которую будет записана вся необходимая информация. Второй параметр - размер структуры, передаваемой в первом параметре - служит для контроля формата структуры. Функция возвращает FALSE в случаях, если система лицензирования повреждена (см. флаг состояния SERIAL_STATE_FLAG_CORRUPTED), если на вход подан нулевой адрес структуры или если переданный размер структуры некорректен. Во всех остальных случаях функция возвращает TRUE и записывает всю информацию о серийном номере по указанном адресу. Ниже описываются все элементы структуры:

Элемент Тип Описание
nState int Битовая маска флагов проверки ключа. Аналогична той, что возвращает VMProtectGetSerialNumberState().
wUserName wchar_t[256] Имя покупателя в кодировке UNICODE, завершаемое нулем.
wEMail wchar_t[256] E-Mail покупателя в кодировке UNICODE, завершаемый нулем.
dtExpire VMProtectDate Дата окончания срока действия ключа. Формат структуры VMProtectDate описан ниже.
dtMaxBuild VMProtectDate Максимальная дата сборки продукта, с которой будет работать этот ключ. Формат структуры VMProtectDate описан ниже.
bRunningTime int Количество минут, которое программа будет работать (максимальная длина сессии). Измеряется в минутах, отсчитывается с момента запуска программы.
nUserDataLength unsigned char Длина пользовательских данных, размещенных в поле bUserData.
bUserData unsigned char[255] Пользовательские данные, записанные в ключ. Количество актуальных байт указано в поле nUserDataLength.

Структура VMProtectDate предназначена для компактного хранения даты. Ее поля описаны в таблице:

Элемент Тип Описание
wYear unsigned short Год.
bMonth unsigned char Месяц, нумерация начинается с единицы.
bDay unsigned char День, нумерация начинается с единицы.


VMProtectGetCurrentHWID

Функция предназначена для получения идентификатора оборудования, на котором работает программа. Формат вызова следующий:

int VMProtectGetCurrentHWID(char * HWID, int Size);

Первый параметр - указатель на область памяти, куда будет записан идентификатор. Второй параметр - размер области данных. Функция возвращает количество записанных байт с учетом завершающего нуля ('\0'). Если вместо первого параметра подать NULL, то функция вернет необходимое количество байт для записи номера. Наиболее правильный способ вызова функции следующий:

int nSize = VMProtectGetCurrentHWID(NULL, 0); // получим необходимый размер буфера
char *pBuf = new char[nSize]; // выделим буфер
VMProtectGetCurrentHWID(pBuf, nSize); // получим идентификатор
// используем его
delete [] pBuf; // освободим память






© 2006-2015 Copyright VMProtect Software