跳转至

与virbox用户工具交互接口(ss_lm_control API)#

本地运行时中的锁操作API用于对锁进行管理, 可以查询当前设备上的锁(硬件锁、云锁、软锁)的信息, 绑定、解绑软锁,与virbox用户工具进行一些交互等功能。调用逻辑如下:
第一步、通过调用slm_client_open打开IPC句柄
第二步,通过调用slm_get_all_description、slm_get_cloud_description等函数,获取设备描述、云锁描述
第三步、调用其他API,获取其他相关信息
第四步、调用slm_client_close关闭IPC句柄,调用结束

可以在工具盒-> API -> C -> Samples目录下找到相关的调用示例。

头文件:

ss_lm_control.h

动态库:

ss_lm_control.dll

静态库:

ss_lm_runtime_api.lib

结构体、自定义类型#

ST_LOCK_LED_CONTROL#
/** 硬件锁闪灯控制结构*/
typedef struct _ST_LOCK_LED_CONTROL {
    /**  0表示蓝色LED,1表示红色LED  */
    SS_UINT32   index;

    /**  0代表关闭,1代表打开, 2代表闪烁 */
    SS_UINT32   state;

    /**  间隔(毫秒)*/
    SS_UINT32   interval;
} ST_LOCK_LED_CONTROL;

宏定义#

加密锁灯控制#
/** 硬件锁闪灯颜色:蓝色*/
#define SLM_CTRL_LED_COLOR_BLUE      0

/** 硬件锁闪灯颜色:红色*/
#define SLM_CTRL_LED_COLOR_RED       1

/** 硬件锁闪灯控制:关闭*/
#define SLM_CTRL_LED_STATE_CLOSE     0

/** 硬件锁闪灯控制:打开*/
#define SLM_CTRL_LED_STATE_OPEN      1

/** 硬件锁闪灯控制:闪烁*/
#define SLM_CTRL_LED_STATE_SHRINK    2
/** 云锁服务器地址最大长度*/
#define SLM_CTRL_MAX_CLOUD_SERVER_LENGTH    100

/** 云锁用户token最大长度*/
#define SLM_CTRL_MAX_ACCESS_TOKEN_LENGTH    64

API 函数#

slm_client_open#

SS_UINT32 SSAPI slm_client_open(OUT void** ipc);

描述 :

客户端打开 IPC句柄,与Senseshield服务进行通信

参数 :

  • [out] ipc 返回IPC句柄

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

slm_client_open是Control API 最先调用的一个接口,由于打开与SenseShield服务的IPC通信管道所有与SenseShield服务交互的操作,都需要率先打开IPC。

slm_client_close#

SS_UINT32 SSAPI slm_client_close(IN void* ipc);

描述 :

关闭客户端IPC句柄

参数 :

  • [in] ipc IPC句柄

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

IPC打开使用完毕后,必须要关闭,否则会存在资源浪费、内存泄露等问题。

slm_get_all_description#

SS_UINT32 SSAPI slm_get_all_description(
    IN  void*       ipc,
    IN  INFO_FORMAT_TYPE format_type,
    OUT char**      desc
    );

描述 :

获取所有硬件锁设备描述

参数 :

  • [in] ipc IPC句柄
  • [in] format_type 参数类型(JSON)
  • [out] desc 设备描述,json数组,需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

每一个硬件锁都会有相应的设备描述,设备描述也是操作硬件锁设备最为关键的参数,凡是需要与所有关的交互,都需要这把锁相应的设备描述。

- desc json格式(json数组)
 [
     {
         "developer_id":"xxxxxxxxxxxxxxxx",
         "sn":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
         "type":"local/remote/cloud",
         "host_name":"xx-PC",
         "lm":"pub"
     }
 ]
*
 //Sample
 {
     SS_UINT32 status = SS_OK;
     void *ipc = 0;
     char *desc = 0;

     // 1、打开ipc
     status = slm_client_open(&ipc);
     if (status != SS_OK)
     {
         //todo: deal error code!
         return status;
     }
     // 2、获取设备描述
     status = slm_get_all_description(ipc, JSON, &desc);
     if (status == SS_OK && desc)
     {
         // json的解析使用第三方json库:jsoncpp 
         //(下同,下载网址:https://github.com/open-source-parsers/jsoncpp)
         Json::Value  root;
         Json::Reader reader;

         reader.parse(desc, root);

         for (int index = 0; index != root.size(); ++index)
         {
             puts("--------------------------------------------------");
             printf(root[index].toStyledString().c_str());
             //通过得到的设备描述可以执行其他操作
             //... ... 
         }
         slm_free(desc);
     }
     else
     {
         //todo: error code!
     }
     // 3、关闭ipc
     slm_client_close(ipc);
     return status;
 }

参见 :

slm_client_open

slm_get_cloud_description#

SS_UINT32 SSAPI slm_get_cloud_description(
    IN  void*               ipc,
    IN  const SS_CHAR*      access_token,
    IN  const SS_CHAR*      user_guid,
    OUT SS_CHAR**           descriptions
    );

描述 :

获取云锁描述

参数 :

  • [in] ipc IPC句柄
  • [in] access_token 用户token,slm_ctrl_get_cloud_token获取默认token
  • [in] user_guid 用户的GUID(可选)
  • [out] descriptions 云锁描述信息(JSON数组,可以选择其中的一个进行许可查询),需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

云锁的描述,简单来说是当前账户在深思云平台上的一些基本信息,账户可能对应过个开发者,因此当前账户获取到的云锁描述可能有多个开发者ID等内容

- description json内容
  [
      {
          "developer_id":"0300000000000006",    // 开发者ID
          "type":"cloud",                       // 类型为云锁
          "lm":"pub",                           
          "access_token":"667751ce-eeda-44a3-8add-dee83e218228"   
      },
      ... ...
  ]

参见 :

slm_client_open

slm_get_local_description#

SS_UINT32 SSAPI slm_get_local_description(
    IN  void*       ipc,
    IN  INFO_FORMAT_TYPE format_type,
    OUT char**      desc
    );

描述 :

获取本地设备描述

参数 :

  • [in] ipc IPC句柄
  • [in] format_type 参数类型(JSON)
  • [out] desc 设备描述,json数组,需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

硬件锁有本地锁和网络锁两种,获取本地设备描述为硬件锁设备描述获取方式的一种,更为精确的只获取本地锁的硬件锁描述。调用方式参考slm_get_all_description,其desc参数也一致

参见 :

slm_client_open slm_get_all_description

slm_get_remote_description#

SS_UINT32 SSAPI slm_get_remote_description(
    IN  void*       ipc,
    IN  INFO_FORMAT_TYPE format_type,
    OUT char**      desc
    );

描述 :

获取网络设备描述

参数 :

  • [in] ipc IPC句柄
  • [in] format_type 参数类型(JSON)
  • [out] desc 设备描述,json数组,需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

同slm_get_all_description和slm_get_local_description,只获取网络硬件锁设备描述。调用方式参考slm_get_all_description,其desc参数也一致

参见 :

slm_client_open slm_get_all_description

slm_get_license_id#

SS_UINT32 SSAPI slm_get_license_id(
    IN  void *              ipc,
    IN  INFO_FORMAT_TYPE    type,
    IN  const char*         desc,
    OUT char**              result
    );

描述 :

获取指定设备描述下的所有许可ID

参数 :

  • [in] ipc IPC句柄
  • [in] type 参数类型(JSON)
  • [in] desc 设备描述,通过slm_get_all_descritpion等函数获得的设备描述中,取其中需要的描述内容进行查询
  • [out] result 许可ID,json数组,需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

当前接口可以简单的得到指定设备中的许可ID列表,便于统计指定设备中的许可个数。

- 许可ID json结构
  [1,2,3,4]

参见 :

slm_client_open slm_get_all_description

slm_read_brief_license_context#

SS_UINT32  SSAPI slm_read_brief_license_context(
    IN  void                 *ipc,
    IN  INFO_FORMAT_TYPE     type,
    IN  const char           *desc,
    OUT char                 **result
    );

描述 :

读取指定锁和开发者ID下的所有许可信息

参数 :

  • [in] ipc IPC句柄
  • [in] type 参数类型(JSON)
  • [in] desc 设备描述,通过slm_get_all_descritpion等函数获得的设备描述中,取其中需要的描述内容进行查询
  • [out] result 许可信息,需要调用slm_free释放

返回值 :

成功返回SS_OK,否则返回相应的错误码

备注 :

开发者调用此接口来获取指定设备中、所有许可的详细信息,返回值详细的描述了当前许可的产品信息、限制条件、当前状态(是否可用、过期、即将过期、次数用尽)等信息

- 许可信息 json结构
  [
    {
        "license_id": 1405608497, 
        "enable" : true / false, 
        "start_time" : 1405608497,
        "end_time" : 1405608497, 
        "first_use_time" : 1405608497, 
        "span_time" : 23234234, 
        "counter" : 25, 
        "concurrent" : 123, 
        "concurrent_type" : 
        "win_user_session"(Windows用户会话) / "process"(进程), 
        "version" : 342512, 
        "last_update_timestamp": 42342525, 
        "last_update_timesn":2342 ,
        "lock_time" : 23542532    //许可被锁定的时间
        "lic_status":
            {
                "status":0/1/2/4,    // 0:许可正常; 1:许可即将过期; 2:许可已过期; 4:许可次数用尽
                "message":"NORMAL/WILL EXPIRE/EXPIRE/USE UP"     // 许可状态描述
            }
    },
    ... ... 
  ]
*
  //Sample
  {
      SS_UINT32 status = SS_OK;
      char *desc = 0;
      void *ipc = 0;
      char *lic;

      // 1、打开ipc,参考slm_client_open
      // 2、获取设备描述,参考slm_get_all_description等函数
      // 3、获取许可描述
      status = slm_read_brief_license_context(ipc, JSON, description.c_str(), &lic);
      if (status == SS_OK)
      {
          Json::Value json_license;
          Json::Reader reader;

          reader.parse(lic, json_license);

          for (int index = 0; index != json_license.size(); ++index)
          {
              puts("--------------------------------------------------");
              printf(json_license[index].toStyledString().c_str());
          }
          slm_free(lic);
      }
      // 4、关闭ipc
      slm_client_close(ipc);
  }

参见 :

slm_client_open slm_get_all_description

slm_get_pub_size#

SS_UINT32 SSAPI slm_get_pub_size(
    IN  void*           ipc,
    IN  SS_UINT32       license_id,
    IN  const char*     desc,
    OUT SS_UINT32*      len
    );

描述 :

读取公开区大小

参数 :

  • [in] ipc IPC句柄
  • [in] license_id 许可ID
  • [in] desc 设备描述,通过slm_get_all_descritpion等函数获得的设备描述中,取其中需要的描述内容进行查询
  • [out] len 返回公开区的大小

返回值 :

成功返回SS_OK,否则返回相应的错误码

备注 :

通过此接口可以获取到指定设备中、指定许可的公开区大小,公开区的描述请参考相关文档中的描述。

参见 :

slm_read_pub_data slm_get_all_description

slm_read_pub_data#

SS_UINT32 SSAPI slm_read_pub_data(
    IN  void*           ipc,
    IN  SS_UINT32       license_id,
    IN  const char*     desc,       //  设备描述
    OUT SS_BYTE*        readbuf,
    IN  SS_UINT32       offset,
    IN  SS_UINT32       len
    );

描述 :

读取用户公开内容

参数 :

  • [in] ipc IPC句柄
  • [in] license_id 许可ID
  • [in] desc 设备描述
  • [out] readbuf 读取的缓冲区
  • [in] offset 读取的偏移
  • [in] len 读取的长度

返回值 :

成功返回SS_OK,否则返回相应的错误码

备注 :

通过此接口来获取许可公开区内容,公开区大小通过slm_get_pub_size获取,读取长度不应该超过slm_get_pub_size获取到的数据大小。详细解释可参考相关文档。

{
    void *ipc;
    SS_UINT32 size = 0;
    SS_BYTE   *buff = 0;
    SS_UINT32 status = SS_OK;
    SS_UINT32 license_id = 1;   // 需要获取数据区的许可ID
    char *desc;

    // 1、打开IPC
    status = slm_client_open(&ipc);
    if (status != SS_OK)
    {
        //todo: deal error code!
        return status;
    }

    // 2、获取设备描述符请参考 slm_get_all_description中的示例

    // 3、获取公开区大小和数据内容
    status = slm_get_pub_size(ipc, license_id, desc, &size);   // 获取指定许可的公开区内容
    if (status == SS_OK && size > 0)
    {
        buff = (SS_BYTE *)calloc(sizeof(SS_BYTE), size);
        status = slm_user_data_read(slm_handle, license_id, desc, buff, 0, size);
        if(status != SS_OK)
        {
            // todo: deal error code
        }
        // 可在此处理获取到的公开区数据

        free(buff);
        buff = 0;
    }
    // 4、关闭IPC句柄
    slm_client_close(ipc);
}

参见 :

slm_client_open slm_read_pub_data slm_get_all_description

slm_read_license_context#

SS_UINT32 SSAPI slm_read_license_context(
    IN  void                *ipc,
    IN  INFO_FORMAT_TYPE    type,
    IN  SS_UINT32           license_id,
    IN  const char          *desc,
    OUT char                **result
    );

描述 :

获得许可详细信息

参数 :

  • [in] ipc IPC句柄
  • [in] type 参数类型(JSON)
  • [in] license_id 许可ID
  • [in] desc 设备描述,通过slm_get_all_descritpion等函数获得的设备描述中,取其中需要的描述内容进行查询
  • [out] result 接收数据的指针,需要调用slm_free释放

返回值 :

成功返回SS_OK,否则返回相应的错误码

备注 :

此接口类似slm_read_brief_license_context,只是前者获取到指定设备中所有许可的内容,此接口返回的是指定设备、指定许可的许可详细信息。调用方式参考slm_read_brief_license_context,其result 参数结构相同。

slm_read_session_context#

SS_UINT32  SSAPI slm_read_session_context(
    IN  void*               ipc,
    IN  INFO_FORMAT_TYPE    type,
    IN  const char*         desc,
    OUT char**              result
    );

描述 :

获取单个锁的某个开发者ID下的所有session信息

参数 :

  • [in] ipc IPC句柄
  • [in] type 参数类型(JSON)
  • [in] desc 设备描述符,通过slm_get_all_descritpion等函数获得的设备描述中,取其中需要的描述内容进行查询
  • [out] result 获取结果的缓冲区

返回值 :

成功返回SS_OK,否则返回相应的错误码

备注 :

获取指定设备下的所有会话信息。会话信息是指应用程序通过深思RuntimeAPI调用加密锁内许可时产生的临时会话,该回合保存了应用程序与加密锁之间相互通信的一些必要信息,通过此接口可以获取到指定设备下所有许可对应的应用程序的会话信息。开发者也可以通过此接口获取到的结果,调用slm_kick_session 接口来管理当前设备中的会话。一旦应用程序登出许可,或会话被强行踢出,会话信息将会失效。

- 返回JSON示例:
    [{
        "license_id": 1,
            "concurrent_type":  "process",  // 许可为并发许可时有此参数
            "curr_concurrent":  1,          // 许可当前并发数,与concurrent_type参数相关
        "sessions": 
            [{
                "session_id": 1, 
                "max_concurrent": 5000,
                "process_name": "notepad.exe", 
                "process_id": 5234, 
                "win_session_id": 1, 
                "computer_name": "ABC-PC"
                    "license_id":   1,
                    "ip":   "127.0.0.1",
                    "time_stamp":   1234567890
            },
            ... ...
            ]
    },{
        "license_id": 2, 
        "sessions": 
            [{
                "session_id": 2, 
                "max_concurrent": 5000,
                "process_name": "calc.exe", 
                "process_id": 2346, 
                "win_session_id": 1, 
                "computer_name": "DEF-PC"
                    "license_id":   2,
                    "ip":   "127.0.0.1",
                    "time_stamp":   1234567890
            },
            ... ...
            ]
    }]

参见 :

slm_client_open slm_get_all_description

slm_kick_session#

SS_UINT32 SSAPI slm_kick_session(
    IN  void*       ipc,
    IN  const char* desc,
    IN  SS_UINT32   session_id
    );

描述 :

踢除指定的许可会话

参数 :

  • [in] ipc 与服务的连接句柄,可由slm_client_open打开
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] session_id 要踢除的session ID

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

通过slm_read_session_context获取到session_id,通过session_id来对相应的会话进行管理

参见 :

slm_client_open slm_get_all_description slm_read_session_context

slm_clear_history#

SS_UINT32 SSAPI slm_clear_history(
    IN  void*       ipc,
    IN  const char* desc
    );

描述 :

清理锁内许可升级历史记录

参数 :

  • [in] ipc 与服务的连接句柄,可由slm_client_open打开
  • [in] desc 设备描述,可由slm_get_all_description得到

备注 :

此操作将清理锁内升级记录,已失效的升级包可能会重新可用。要谨慎使用!

slm_get_device_info#

SS_UINT32  SSAPI slm_get_device_info(
    IN  void*           ipc,
    IN  const char*     desc,
    OUT char**          result
    );

描述 :

获得硬件锁锁内信息

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [in] result 接收数据的指针,结构为json数组,需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

获取硬件锁设备信息,主要获取锁内时间、锁内存储空间信息、固件版本、生产日期等内容,便于对硬件锁进行管理。

- JSON 字段说明:
    -# "clock":1497927112,                  // 锁内时间(UTC)
    -# "available_space":476160,            // 锁内可用空间
    -# "total_space":524288,                // 锁内总空间大小
    -# "communication_protocol":2,          // 通迅协议
    -# "lock_firmware_version":"3.1.6",     // 锁固件版本
    -# "lm_firmware_version":"2.10.2.1",    // Entry版本
    -# "h5_device_type":0,                  // 硬件锁类型,0代表常规精锐5硬件锁;2代表精锐5时钟锁
    -# "power_drop_times",                  // 精锐5时钟锁特有,表示掉电次数
    -# "clock_type",                        // 锁内时钟类型,0表示虚拟时钟,2表示硬件时钟
    -# "device_model":"e5",                 // 设备型号
    -# "hardware_version":"0.0.2.0",        // 硬件版本号
    -# "manufacture_date":"2016-01-25 17:11:05",        // 生产日期
    -# "lock_sn":"9733c801000702051061000300xxxxxx",    // 硬件锁芯片号
    -# "slave_addr":238,                    // 硬件锁所在的设备总线地址
    -# "shell_num":"099900000054",          // 硬件锁外壳号
    -# "user_info":"string",                // 用户信息(可忽略)
    -# "inner_info":"string"                // 内部信息(可忽略)

slm_ctrl_adjust_time_request#

SS_UINT32 SSAPI slm_ctrl_adjust_time_request(
    IN  void*               ipc,
    IN  const char*         desc,
    OUT SS_BYTE             rand[SLM_FIXTIME_RAND_LENGTH],
    OUT SS_UINT32*          lock_time,
    IN OUT SS_UINT32*       pc_time
    );

描述 :

向硬件锁获取时钟校准请求

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [out] rand 随机数
  • [out] lock_time 锁内设备时间
  • [inout] pc_time 计算机UTC时间

返回值 :

成功返回SS_OK,失败返回相应的错误码

slm_get_filelist_info#

SS_UINT32  SSAPI slm_get_filelist_info(
    IN  void*            ipc,
    IN  const char*      desc,
    OUT char**           result
    );

描述 :

获得硬件锁内文件信息

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [in] result 接收数据的指针,结构为json数组,需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

此接口可以获取到硬件锁内文件的信息,文件将以json列表形式展现,主要包括文件名、文件类型、大小、修改时间等内容,便于开发者梳理和管理锁内文件数量。

- JSON 字段说明:
    -# "validate":number   标志哪些域有效,仅在设置文件属性中使用
    -# "type":number       文件类型,不能修改
    -# "privilege":number   文件访问权限
    -# "size":number        文件大小
    -# "time":number        文件修改时间
    -# "name":""            文件名  当前文件名称长度16字节

slm_ctrl_get_cert#

SS_UINT32 SSAPI slm_ctrl_get_cert(
    IN  void*               ipc,
    IN  const char*         desc,
    IN  CERT_TYPE           cert_type,
    OUT SS_BYTE*            cert,
    IN  SS_UINT32           cert_size,
    OUT SS_UINT32*          cert_len
    );

描述 :

获取加密锁的证书(仅支持本地加密锁)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] cert_type 证书类型,参考 CERT_TYPE_XXXX
  • [out] cert 设备证书缓冲区
  • [in] cert_size 缓冲区大小
  • [out] cert_len 返回的设备证书大小

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

获取设备证书,此处的设备指硬件锁、云锁。如果 cert_type = CERT_TYPE_DEVICE_CERT,其功能与 slm_ctrl_get_device_cert 完全一致; 如果为其他类型,则仅支持硬件锁。 通过此接口可以获取加密锁的根证书、设备子CA和设备,方便合成设备证书链。

参见 :

slm_get_all_description slm_ctrl_get_device_cert

slm_ctrl_get_device_cert#

SS_UINT32 SSAPI slm_ctrl_get_device_cert(
    IN  void*               ipc,
    IN  const char*         desc,
    OUT SS_BYTE*            device_cert,
    IN  SS_UINT32           buff_size,
    OUT SS_UINT32*          return_size
    );

描述 :

获取加密锁的设备证书(当前支持云锁和硬件锁)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [out] device_cert 设备证书缓冲区
  • [in] buff_size 缓冲区大小
  • [out] return_size 返回的设备证书大小

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

获取加密锁证书,此处的加密锁指硬件锁、云锁。如果设备为定制设备,可通过此接口获取到开发者自定义的设备证书;若为非定制设备,此接口可直接获取到深思设备证书。 云锁、软锁不存在定制与非定制问题。 特别说明:深思已不再通过任何渠道提供定制设备,保留slm_ctrl_get_device_certslm_ctrl_get_sense_device_cert接口仅为保证兼容性。

slm_ctrl_get_sense_device_cert#

SS_UINT32 SSAPI slm_ctrl_get_sense_device_cert(
    IN  void*               ipc,
    IN  const char*         desc,
    OUT SS_BYTE*            device_cert,
    IN  SS_UINT32           buff_size,
    OUT SS_UINT32*          return_size
    );

描述 :

获取硬件锁的深思设备证书(云锁、软锁不支持)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [out] device_cert 设备证书缓冲区
  • [in] buff_size 缓冲区大小
  • [out] return_size 返回的设备证书大小

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

通过此接口可以直接获取到深思的设备证书,此接口是深思定制设备特有,若设备为定制设备,slm_ctrl_get_device_cert只能获取到开发者自定义证书,通过此接口才能获取到深思设备证书。 特别说明:深思已不再通过任何渠道提供定制设备,保留slm_ctrl_get_device_certslm_ctrl_get_sense_device_cert接口仅为保证兼容性。

slm_ctrl_sign_by_device#

SS_UINT32 SSAPI slm_ctrl_sign_by_device(
    IN  void*               ipc,
    IN  const char*         desc,
    IN  SS_BYTE*            verify_data,
    IN  SS_UINT32           verify_data_size,
    OUT SS_BYTE*            signature,
    IN  SS_UINT32           signature_buf_size,
    OUT SS_UINT32*          signature_size
    );

描述 :

设备正版验证(仅支持硬件锁)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] verify_data 验证数据(必须以字符"SENSELOCK"(9字节)开头)
  • [in] verify_data_size 验证数据大小,大小必须为 SLM_VERIFY_DATA_SIZE(41)个字节
  • [out] signature 返回的签名结果
  • [in] signature_buf_size 缓冲区大小
  • [out] signature_size 签名结果大小

返回值 :

成功返回SS_OK,失败返回相应的错误码

备注 :

锁内使用设备私钥签名,需要用硬件锁证书公钥验签

{
    SS_UINT32       status = SS_OK;
    SS_BYTE         verify_data[41] = {0};
    SS_BYTE         my_data[32] = {"verify data..."};
    const SS_BYTE   header[9] = {"SENSELOCK"};
    SS_BYTE         signature[2048] = {0};
    SS_UINT32       signature_size = 0;

    ... ...

    memcpy(verify_data, header, sizeof(header));
    memcpy(verify_data + sizeof(header), my_data, sizeof(my_data));

    status = slm_ctrl_sign_by_device(ipc, desc, verify_data, sizeof(verify_data), signature, sizeof(signature), &signature_size);
    if(status != SS_OK)
    {
        // todo: deal error code
    }
    ... ...
}

参见 :

slm_login

slm_ctrl_led_control#

SS_UINT32 SSAPI slm_ctrl_led_control(
    IN  void*               ipc,
    IN  const char*         desc,
    IN  ST_LOCK_LED_CONTROL*     led_ctrl
    );

描述 :

硬件锁设备指示灯控制

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] led_ctrl 控制结构,参考ST_LOCK_LED_CONTROL

返回值 :

成功返回SS_OK,失败返回相应的错误码

参见 :

ST_LOCK_LED_CONTROL

slm_free#

void SSAPI slm_free(
    IN  void*   buffer
    );

描述 :

释放API生成的缓冲区

参数 :

  • [in] buffer API生成的缓冲区

ss_get_service_type#

SS_UINT32 SSAPI ss_get_service_type(SS_UINT32* service_type);

描述 :

获取SenseShield服务类型

参数 :

  • [out] service_type 服务类型,参考SS_SERVICE_TYPE_XXX

返回值 :

成功返回SS_OK,失败返回相应错误码

ss_set_service_type#

SS_UINT32 SSAPI ss_set_service_type(SS_UINT32 service_type);

描述 :

设置SenseShield服务类型

参数 :

  • [in] service_type 服务类型,参考SS_SERVICE_TYPE_XXX

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_ctrl_refresh_license#

SS_UINT32 SSAPI slm_ctrl_refresh_license(
    IN  void*               ipc,
    IN  const char*         desc
    );

描述 :

通知SenseShield服务刷新许可缓存

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_ctrl_bind_or_unbind#

SS_UINT32 SSAPI slm_ctrl_bind_or_unbind(
    IN  void*       ipc,
    IN  const char* desc,
    IN  SS_BOOL     bind,
    OUT SS_CHAR**   result
    );

描述 :

用户绑定或解绑请求(许可转移时的用户绑定,暂不支持)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] bind 是否是绑定(TRUE,解绑为FALSE)
  • [out] result 返回String(内容为HEX String)

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_ctrl_transfer_license#

SS_UINT32 SSAPI slm_ctrl_transfer_license(
    IN  void*       ipc,
    IN  const char* desc,
    IN  SS_UINT32   license_id,
    IN  const SS_CHAR*  guid,
    OUT SS_CHAR**   result
    );

描述 :

转移许可请求(从云向锁转移,暂不支持)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] license_id 要转移的许可ID
  • [in] guid GUID字符串(如"8B633770-0BB5-4764-BEEE-6CAB69F2E040")
  • [out] result 返回String(内容为HEX String)

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_ctrl_cloud_to_dongle#

SS_UINT32 SSAPI slm_ctrl_cloud_to_dongle(
    IN  void*       ipc,
    IN  const char* desc,
    IN  const void* pkg,
    IN  SS_UINT32   pkg_size,
    OUT SS_CHAR**   result
    );

描述 :

云向锁的请求(暂不支持)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] pkg 云向锁的数据内容
  • [in] pkg_size 数据大小
  • [out] result 返回String(内容为HEX String)

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_ctrl_exchange_key_cloud#

SS_UINT32 SSAPI slm_ctrl_exchange_key_cloud(
    IN  void*       ipc,
    IN  const char* desc,
    IN  SS_BYTE*    datain,
    IN  SS_UINT32   datain_len,
    OUT SS_CHAR**   result
    );

描述 :

许可转移时与云锁秘钥交换(暂不支持)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] datain 数据内容,具体与协议的步骤有关
  • [in] datain_len datain的长度
  • [out] result 返回String(内容为HEX String)

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_ctrl_get_account_info#

SS_UINT32 SSAPI slm_ctrl_get_account_info(
    IN  void*               ipc,
    IN  const char*         desc,
    OUT  SS_CHAR**          account_info
    );

描述 :

获取账户信息(硬件锁中绑定的账户信息,暂不支持)

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [out] account_info 账户信息(JSON)

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

如果硬件锁内未存储账户,则account_info的内容为空

slm_ctrl_store_cert#

SS_UINT32 SSAPI slm_ctrl_store_cert(
    IN  void*                   ipc,
    IN  const char*             desc,
    IN  ENUM_STORE_CERT_TYPE    cert_type,
    IN  SS_BYTE*                sub_cert,
    IN  SS_UINT32               sub_cert_size,
    IN  SS_BYTE*                cert,
    IN  SS_UINT32               cert_size
    );

描述 :

向锁内存储相应证书

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述,由slm_get_all_description得到
  • [in] cert_type 证书类型,参考ENUM_STORE_CERT_TYPE
  • [in] sub_cert 子证书数据缓冲区
  • [in] sub_cert_size 子证书数据缓冲区大小
  • [in] cert 证书数据缓冲区
  • [in] cert_size 证书数据缓冲区

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

不赞成开发者调用,若需要调用,需联系深思技术服务

slm_ctrl_get_cloud_token#

SS_UINT32 SSAPI slm_ctrl_get_cloud_token(OUT SS_CHAR** access_token);

描述 :

获取已登录的,默认用户的token

参数 :

  • [out] access_token 默认登录用户的token

返回值 :

成功返回SS_OK,失败返回相应的错误码

slm_query_bind_info#

SS_UINT32 SSAPI slm_query_bind_info(
    IN  void*           ipc,          
    IN  const char*     desc, 
    IN  SS_UINT32       license_id,
    OUT char**          result
    );

描述 :

查询软锁许可的安装信息

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [in] license_id 需要查询的软许可ID
  • [out] result 软许可安装信息,需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应错误码

[{
    "pc_name":"SENSE-PC", 
    "os":"Windows 10 Professional 64 Edition", 
    "inet_ip": "123.45.23.23", 
    "ip_mac":
        [
            {"ip":"192.168.1.1", "mac":"00-00-00-00-00-00"},
            {"ip":"10.10.9.6", "mac":"11-11-11-11-11-11"}
        ]
 },{
    "pc_name":"SENSE-PC", 
    "os":"Windows 10 Professional 32 Edition", 
    "inet_ip": "123.45.23.23", 
    "ip_mac":
        [
            {"ip":"192.168.1.1", "mac":"00-00-00-00-00-00"},
            {"ip":"10.10.9.6", "mac":"11-12-11-11-11-11"}
        ]
}]

slm_bind_offline_license#

SS_UINT32 SSAPI slm_bind_offline_license(
    IN void*        ipc, 
    IN const char*  desc, 
    IN SS_UINT32    license_id
    );

描述 :

绑定软锁许可

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述(必须是智能离线)
  • [in] license_id 需要绑定的软许可ID

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_get_offline_desc#

SS_UINT32 SSAPI slm_get_offline_desc(IN void* ipc, OUT char** desc);

描述 :

枚举已绑定的软锁设备描述

参数 :

  • [in] ipc IPC句柄
  • [out] desc 设备描述

返回值 :

成功返回SS_OK,失败返回相应错误码

[
    {
        "type":"slock", 
        "user_guid":"00000000-0000000-xxx", 
        "account_name":"xxxx@sense.com.cn", 
        "developer_id":"0300000000000009"
    }
    {
        "type":"slock", 
        "user_guid":"00000000-0000000-xxx", 
        "account_name":"xxxx@sense.com.cn", 
        "developer_id":"0300000000000009"
    }
]

slm_unbind_offline_license#

SS_UINT32 SSAPI slm_unbind_offline_license(IN void* ipc, IN const char* desc, IN SS_UINT32 license_id);

描述 :

解绑软锁许可

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [in] license_id 需要解绑的软许可ID

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_offline_bind_c2d#

SS_UINT32 SSAPI slm_offline_bind_c2d(
    IN void         *ipc, 
    OUT SS_BYTE     *bind_c2d,
    IN SS_UINT32    c2d_buf_size,
    OUT SS_UINT32   *c2d_length);

描述 :

在离线计算机上调用,获取离线绑定c2d信息

参数 :

  • [in] ipc IPC句柄
  • [out] bind_c2d 离线绑定用的C2D信息
  • [in] c2d_buf_size C2D缓冲区大小
  • [out] c2d_length C2D实际长度

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_offline_unbind_c2d#

SS_UINT32 SSAPI slm_offline_unbind_c2d(
    IN void         *ipc, 
    IN const char   *desc, 
    IN SS_UINT32    license_id,    
    OUT SS_BYTE     *unbind_c2d,
    IN SS_UINT32    c2d_buf_size,
    OUT SS_UINT32   *c2d_length
    );

描述 :

在离线计算机上调用,获取离线解绑c2d信息

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [out] unbind_c2d 离线绑定用的C2D信息
  • [in] c2d_buf_size C2D缓冲区大小
  • [out] c2d_length C2D实际长度

返回值 :

成功返回SS_OK,失败返回相应错误码

slm_offline_bind_d2c#

SS_UINT32 SSAPI slm_offline_bind_d2c(
    IN void         *ipc, 
    IN char         *d2c
    );

描述 :

在离线计算机上调用,离线升级软锁许可

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [in] d2c 包含许可内容的D2C包

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

离线机器上调用,可以在离线的机器上调用此接口,升级已经获取到的离线d2c包到本地计算机软锁中

slm_cloud_offline_get_d2c#

SS_UINT32 SSAPI slm_cloud_offline_get_d2c(
    IN  void            *ipc, 
    IN  const char      *desc,
    IN  SS_UINT32       license_id,
    IN  SS_BYTE         *bind_c2d, 
    IN  SS_UINT32       c2d_length,
    OUT char            **result
    );

描述 :

在联网计算机上调用,从云平台获取离线许可升级包

参数 :

  • [in] ipc IPC句柄
  • [in] desc 设备描述
  • [in] license_id 要绑定定许可ID
  • [in] bind_c2d 绑定C2D信息
  • [in] c2d_length C2D长度
  • [out] result 包含许可内容的D2C包,需要调用slm_free释放

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

在联网的机器上调用此接口,将c2d上传给云平台,同时兑换到离线许可升级包。result在不需要的时候,需要调用slm_free释放资源

slm_cloud_offline_unbind#

SS_UINT32 SSAPI slm_cloud_offline_unbind(
    IN  void            *ipc,
    IN  const char      *user_guid,
    IN  SS_BYTE         *unbind_c2d,
    IN  SS_UINT32       c2d_length
    );

描述 :

在联网计算机上调用,从云平台获解绑离线许可

参数 :

  • [in] ipc IPC句柄
  • [in] user_guid 已登录用户的guid,通过ss_user_login库获取
  • [in] bind_c2d 解绑C2D信息
  • [in] c2d_length C2D长度

返回值 :

成功返回SS_OK,失败返回相应错误码

备注 :

此函数通过错误码判断许可解绑是否成功,SS_OK表示解绑成功,其他表示解绑失败。如果解绑失败,可在深思开发者中心进行手动解绑