激活 API
激活 API 仅包含 4 个函数。两个用于在线激活,另外两个用于计算机无法访问 Internet 时的离线激活。激活 API 旨在与 Web License Manager 配合使用,因此开发人员仍应调用授权系统 API 以使用从 WebLM 获得的序列号。
VMProtectActivateLicense
该函数将激活码传递给服务器并返回此特定计算机的序列号。否则,返回 错误代码 。
int VMProtectActivateLicense(const char *code, char *serial, int size);
code 参数保存在授权购买过程中从 Web License Manager 获得的激活码。 serial 参数指定给定 size 的内存块,WebLM 生成的序列号被放入其中。
VMProtectDeactivateLicense
此函数将序列号传递给服务器以进行停用。 下面 列出了可能的返回代码。
int VMProtectDeactivateLicense(const char *serial);
序列号 参数包含之前激活期间从 WebLM 获得的序列号(不是激活码)。
VMProtectGetOfflineActivationString
VMProtectGetOfflineDeactivationString
这两个函数的工作方式与前两个类似,只是它们不尝试连接到 WebLM 服务器。相反,他们返回一个文本块,用户应将其复制到连接到 Internet 的计算机上,打开 WebLM 离线激活表单并将文本粘贴到那里。
int VMProtectGetOfflineActivationString(const char *code, char *buf, int size); int VMProtectGetOfflineDeactivationString(const char *serial, char *buf, int size);
代码 和 串口 参数与这些功能的在线版本类似。 buf 参数应指向一个 1000 字节或更多字节的缓冲区,离线激活表单的文本块将被复制到该缓冲区。 下面 列出了可能的错误代码。
可能的错误代码
代码 | 值 | 描述 |
---|---|---|
ACTIVATION_OK | 0 | 激活成功。序列号被放入 序列 变量中。 |
ACTIVATION_SMALL_BUFFER | 1 | 缓冲区太小,无法保存序列号。最小缓冲区大小计算为:bits / 8 * 3 / 2 + N,其中 bits 是 RSA 密钥的长度(以位为单位),N 是“安全常数” – 可能的换行符和其他特殊符号的额外字节。我们建议至少使用 10 个。 |
ACTIVATION_NO_CONNECTION | 2 | 激活模块无法连接到 Web License Manager。 |
ACTIVATION_BAD_REPLY | 3 | 激活服务器返回了意外的结果。这意味着服务器上的一些配置问题、错误的服务器 URL 或遭遇破解尝试。 |
ACTIVATION_BANNED | 4 | 软件供应商通过 WebLM 接口在服务器上禁止此激活码(例如,如果密钥泄露或盗版)。不要与 ACTIVATION_ALREADY_USED 混淆。 |
ACTIVATION_CORRUPTED | 5 | 有些事情完全出错了。该错误是由激活模块自检系统产生的,通常意味着破解者攻击。如果您遇到此错误,则所有使用序列号和激活的进一步操作都是不安全的。 |
ACTIVATION_BAD_CODE | 6 | 在激活服务器的数据库中找不到指定的代码。也许,用户在输入代码时出错了,所以我们可以让他或她检查是否一切正常。 |
ACTIVATION_ALREADY_USED | 7 | 此代码的激活计数器已用完,所有进一步的激活都是不可能的。这并不意味着代码不好或被禁止。代码很好,但它不能再激活了。用户应联系软件供应商并购买额外的授权或卸载其他计算机上的软件,以增加服务器上激活计数器的值。 |
ACTIVATION_SERIAL_UNKNOWN | 8 | 激活错误。在服务器上的数据库中找不到给定的序列号。因此,停用是不可能的。 |
ACTIVATION_EXPIRED | 9 | 激活错误。表示代码的激活期已过。 |
ACTIVATION_NOT_AVAILABLE | 10 | 此错误表示激活/停用不可用。 |
提示和技巧
激活 API 非常简单,因此您应该不会遇到困难。不要忘记为有互联网问题的用户提供一种离线激活程序的方法。另外,不要忘记,激活 API 不会保存它收到的序列号,也不会将其传递给许可模块 – 这应该由开发人员完成。您不必在每次启动应用程序时调用 激活 API。您只需调用一次,从 WebLM 获取序列号,将其保存在适当的位置,然后使用此保存的副本。