云软许可数据区及子模块说明


云软许可高级属性中,主要包含两个功能:数据区及模块。

一、数据区:

每条许可都包含三个数据区

  1. 只读区:只读区内的数据,只有软件用户在登录许可成功后才能使用,无法通过 Virbox LM 平台“新建产品”或者“新建模板”时点击 “浏览”,将只读区内容导入,但是可以通过函数写入(写入只读区方法详见例子sample_07)

    例子路径:SDK 安装目录:\Program Files(x86)\senseshield\ss_dev\SDK\C\Sample\sample_07

  2. 读写区:只有在软件用户登录许可成功后才能使用,可以通过 Virbox LM 平台“新建产品”或者“新建模板”时点击 “浏览”将读写区内容导入。

  3. 公开区:只有在软件用户登录许可成功后才能查看,软件开发者可以通过 Virbox LM 平台新建产品或者新建模板时点击 “浏览” 将公开区内容导入。软件用户通过 Virbox 用户工具即可查看公开区内容,可以写入软件开发商公告信息。

注:每条许可有三个数据区,每区大小为64K。

二、模块

背景:

很多开发商会有将软件所有功能或者部分功能编译在一个大的 exe 中的场景,如果软件是根据功能区分版本,并且软件是根据版本进行销售的,那么就需要软件开发商对相应的模块进行设置,根据版本的不同对软件进行区分销售,Virbox LM 平台基于这种业务模式提供"模块绑定"的功能。

功能描述:

检查模块区,子模块存在于每条许可中,在每个函数前绑定 slm_check_module 函数,在发布许可时勾选对应的授权,软件用户即有相应模块的使用权限。

参数:
[in] slm_handle
[in] module_id 模块ID,范围由(0 ~ 63)
[out] b_exist 模块是否存在

返回值 :
成功返回SS_OK,否则返回其它错误码
SS_UINT32 SSAPI slm_check_module
(
IN SLM_HANDLE_INDEX slm_handle,
IN SS_UINT32 module_id,
OUT SS_BOOL* b_exist
;

使用流程

1、添加子模块

1.1 选中“产品管理”,点击“+新建”

1.2 将“高级属性展开”,选择“模块”功能的“定义”

1.3 点击“新建”,定义子模块 ID 和名称

2、分发子模块

2.1 选中“销售模板”,点击“+新建”,展开“高级属性”,点击“模块”功能下“选择”功能

2.2 勾选要授权给用户的模块,将此模板发到用户的账号中即可

详细添加产品、新建销售模板、添加用户、发布许可流程详见 发布许可流程

3、代码中调用函数

在相应位置嵌入软件开发商的函数,以下是部分代码

       //check module  检查模块是否存在

        uint moduleid1 = 1;//锁内许可需要存在此子模块ID
        Ret = SlmRuntime.SlmCheckModuleEasy(Handle, moduleid1);
        if (Ret != SSErrCode.SS_OK)
        {
            StrMsg = string.Format("SlmCheckModuleEasy [LICENSE] Failure:0x{0:X8}此模块没有权限", Ret);
            WriteLineRed(StrMsg);
            System.Diagnostics.Debug.Assert(true);
        }
        else
        {
            StrMsg ="SlmCheckModuleEasy moudle "+ moduleid1 + " Success";
            WriteLineGreen(StrMsg);
        }
        uint moduleid2 = 2;//锁内许可需要存在此子模块ID
        Ret = SlmRuntime.SlmCheckModuleEasy(Handle, moduleid2);
        if (Ret != SSErrCode.SS_OK)
        {
            StrMsg = string.Format("SlmCheckModuleEasy [LICENSE] Failure:0x{0:X8}此模块没有权限", Ret);
            WriteLineRed(StrMsg);
            System.Diagnostics.Debug.Assert(true);
        }
        else
        {
            StrMsg = "SlmCheckModuleEasy moudle " + moduleid2 + " Success";
            WriteLineGreen(StrMsg);
        }
        uint moduleid3 = 3;//锁内许可需要存在此子模块ID
        Ret = SlmRuntime.SlmCheckModuleEasy(Handle, moduleid3);
        if (Ret != SSErrCode.SS_OK)
        {
            StrMsg = string.Format("SlmCheckModuleEasy [LICENSE] Failure:0x{0:X8}此模块没有权限", Ret);
            WriteLineRed(StrMsg);
            System.Diagnostics.Debug.Assert(true);
        }
        else
        {
            StrMsg = "SlmCheckModuleEasy moudle " + moduleid3 + " Success";
            WriteLineGreen(StrMsg);
        }
        uint moduleid4 = 4;//锁内许可需要存在此子模块ID
        Ret = SlmRuntime.SlmCheckModuleEasy(Handle, moduleid4);
        if (Ret != SSErrCode.SS_OK)
        {
            StrMsg = string.Format("SlmCheckModuleEasy [LICENSE] Failure:0x{0:X8}此模块没有权限", Ret);
            WriteLineRed(StrMsg);
            System.Diagnostics.Debug.Assert(true);
        }
        else
        {
            StrMsg = "SlmCheckModuleEasy moudle " + moduleid4 + " Success";
            WriteLineGreen(StrMsg);
        }

results matching ""

    No results matching ""