VMProtect/help/ru/manager/usage/api.htm
VNGhostMans 5ec92ee05e first commit
Version 3.x.x
2023-05-14 20:21:09 +07:00

313 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="Stylesheet" type="text/css" href=
"../../default.css" />
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8" />
<title>Описание функций API лицензирования</title>
<style type="text/css">
/*<![CDATA[*/
th {text-align:left;}
table {border-collapse:collapse; margin-top: 4px;}
td,th {border: 1px solid #B0B0B0; padding-left:10;padding-right:10;}
/*]]>*/
</style>
</head>
<body>
<h1>Описание функций API лицензирования</h1>
<p>API системы лицензирования является продолжением API VMProtect
и входит в его SDK. API позволяет задать серийный номер и
получить информацию о нем: подходит он к программе или нет, истек
ли срок действия, на кого зарегистрирован продукт и т.п. Также API
позволяет получить идентификатор оборудования, на котором
выполняется программа.</p><strong id=
"VMProtectSetSerialNumber">VMProtectSetSerialNumber</strong>
<p>Функция предназначена для загрузки серийного номера в систему
лицензирования. Полный формат вызова представлен ниже:</p>
<pre class="code">int VMProtectSetSerialNumber(const char *SerialNumber);
</pre>
<p>Входной параметр <strong>SerialNumber</strong> должен
содержать указатель на текстовую строку с серийным номером в
кодировке base-64 и завершаемую нулем ('\0'). Функция возвращает
битовую маску флагов состояния серийного номера, аналогичную той,
что возвращает <strong>VMProtectGetSerialNumberState()</strong>,
подробнее о флагах будет написано ниже. Серийный номер считается
"хорошим", если функция вернула значение 0.</p><br />
<strong id=
"VMProtectGetSerialNumberState">VMProtectGetSerialNumberState</strong>
<p>Функция возвращает флаги состояния серийного номера,
предварительно установленного вызовом
<strong>VMProtectSetSerialNumber()</strong>.</p>
<pre class="code">int VMProtectGetSerialNumberState();
</pre>
<p>Наличие хотя бы одного установленного флага говорит о
проблемах с серийным номером: программа не должна работать, если
установлен хотя бы один бит. Подробные значениях флагов описаны в
таблице:</p>
<table border="1" cellspacing="0" cellpadding="2">
<tr>
<th>Флаг</th>
<th>Значение</th>
<th>Описание</th>
</tr>
<tr>
<td>SERIAL_STATE_FLAG_CORRUPTED</td>
<td>0x00000001</td>
<td>Система лицензирования повреждена. Возможные причины:
некорректная настройка проекта защиты, попытка взлома
программы.</td>
</tr>
<tr>
<td>SERIAL_STATE_FLAG_INVALID</td>
<td>0x00000002</td>
<td>Серийный номер некорректен. Флаг выставляется, если
система лицензирования не может расшифровать серийный
номер.</td>
</tr>
<tr>
<td>SERIAL_STATE_FLAG_BLACKLISTED</td>
<td>0x00000004</td>
<td>Серийный номер подходит к продукту, однако занесен в
черный список в VMProtect.</td>
</tr>
<tr>
<td>SERIAL_STATE_FLAG_DATE_EXPIRED</td>
<td>0x00000008</td>
<td>Срок действия серийного номера истек. Подробную
информацию о сроке действия можно получить вызовом
<strong>VMProtectGetSerialNumberData()</strong></td>
</tr>
<tr>
<td>SERIAL_STATE_FLAG_RUNNING_TIME_OVER</td>
<td>0x00000010</td>
<td>Время работы программы истекло. Подробную информацию о
времени работы программы можно получить вызовом
<strong>VMProtectGetSerialNumberData()</strong></td>
</tr>
<tr>
<td>SERIAL_STATE_FLAG_BAD_HWID</td>
<td>0x00000020</td>
<td>Идентификатор оборудования не совпадает с тем, что
записан в серийном номере.</td>
</tr>
<tr>
<td>SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED</td>
<td>0x00000040</td>
<td>Серийный номер не предназначен для работы с этой версией
защищаемой программы. Максимальную дату сборки программы, к
которой подходит этот серийный номер, можно узнать вызовом
<strong>VMProtectGetSerialNumberData()</strong>.</td>
</tr>
</table><br /><br />
<strong id=
"VMProtectGetSerialNumberData">VMProtectGetSerialNumberData</strong>
<p>Функция предназначена для получения информации о содержимом
серийного номера, установленного вызовом
<strong>VMProtectSetSerialNumber()</strong>. Формат вызова
представлен ниже:</p>
<pre class="code">bool VMProtectGetSerialNumberData(VMProtectSerialNumberData *Data, int Size);
</pre>
<p>Первый параметр - указатель на структуру
<strong>VMProtectSerialNumberData</strong>, в которую будет
записана вся необходимая информация. Второй параметр - размер
структуры, передаваемой в первом параметре - служит для контроля
формата структуры. Функция возвращает FALSE в случаях, если система
лицензирования повреждена (см. флаг состояния
SERIAL_STATE_FLAG_CORRUPTED), если на вход подан нулевой адрес
структуры или если переданный размер структуры некорректен. Во
всех остальных случаях функция возвращает TRUE и записывает всю
информацию о серийном номере по указанном адресу. Ниже
описываются все элементы структуры:</p>
<table border="1" cellspacing="0" cellpadding="2">
<tr>
<th>Элемент</th>
<th>Тип</th>
<th>Описание</th>
</tr>
<tr>
<td>nState</td>
<td>int</td>
<td>Битовая маска флагов проверки ключа. Аналогична той, что
возвращает
<strong>VMProtectGetSerialNumberState()</strong>.</td>
</tr>
<tr>
<td>wUserName</td>
<td>wchar_t[256]</td>
<td>Имя покупателя в кодировке UNICODE, завершаемое
нулем.</td>
</tr>
<tr>
<td>wEMail</td>
<td>wchar_t[256]</td>
<td>E-Mail покупателя в кодировке UNICODE, завершаемый
нулем.</td>
</tr>
<tr>
<td>dtExpire</td>
<td>VMProtectDate</td>
<td>Дата окончания срока действия ключа. Формат структуры
VMProtectDate описан ниже.</td>
</tr>
<tr>
<td>dtMaxBuild</td>
<td>VMProtectDate</td>
<td>Максимальная дата сборки продукта, с которой будет
работать этот ключ. Формат структуры VMProtectDate описан
ниже.</td>
</tr>
<tr>
<td>bRunningTime</td>
<td>int</td>
<td>Количество минут, которое программа будет работать
(максимальная длина сессии). Измеряется в минутах,
отсчитывается с момента запуска программы.</td>
</tr>
<tr>
<td>nUserDataLength</td>
<td>unsigned char</td>
<td>Длина пользовательских данных, размещенных в поле
<strong>bUserData</strong>.</td>
</tr>
<tr>
<td>bUserData</td>
<td>unsigned char[255]</td>
<td>Пользовательские данные, записанные в ключ. Количество
актуальных байт указано в поле
<strong>nUserDataLength</strong>.</td>
</tr>
</table><br />
<p>Структура <strong>VMProtectDate</strong> предназначена для
компактного хранения даты. Ее поля описаны в таблице:</p>
<table border="1" cellspacing="0" cellpadding="2">
<tr>
<th>Элемент</th>
<th>Тип</th>
<th>Описание</th>
</tr>
<tr>
<td>wYear</td>
<td>unsigned short</td>
<td>Год.</td>
</tr>
<tr>
<td>bMonth</td>
<td>unsigned char</td>
<td>Месяц, нумерация начинается с единицы.</td>
</tr>
<tr>
<td>bDay</td>
<td>unsigned char</td>
<td>День, нумерация начинается с единицы.</td>
</tr>
</table><br />
<br />
<strong id=
"VMProtectGetCurrentHWID">VMProtectGetCurrentHWID</strong>
<p>Функция предназначена для получения идентификатора
оборудования, на котором работает программа. Формат вызова
следующий:</p>
<pre class="code">int VMProtectGetCurrentHWID(char * HWID, int Size);
</pre>
<p>Первый параметр - указатель на область памяти, куда будет
записан идентификатор. Второй параметр - размер области данных.
Функция возвращает количество записанных байт с учетом
завершающего нуля ('\0'). Если вместо первого параметра подать
NULL, то функция вернет необходимое количество байт для записи
номера. Наиболее правильный способ вызова функции следующий:</p>
<pre class="code"><strong>int</strong> nSize = <strong>VMProtectGetCurrentHWID</strong>(NULL, 0); // получим необходимый размер буфера
<strong>char *</strong>pBuf = <strong>new char</strong>[nSize]; // выделим буфер
<strong>VMProtectGetCurrentHWID</strong>(pBuf, nSize); // получим идентификатор
// используем его
<strong>delete</strong> [] pBuf; // освободим память
</pre><br />
<br />
<br />
<br />
<br />
<hr noshade="noshade" size="1" />
<div align="center">
© 2006-2015 Copyright VMProtect Software
</div>
</body>
</html>