313 lines
12 KiB
HTML
313 lines
12 KiB
HTML
|
<!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>
|