数据防泄漏服务开发指导(C/C++)
数据防泄漏(Data Loss Prevention,DLP)是系统提供的系统级的数据防泄漏解决方案,提供跨设备的文件的权限管理、加密存储、授权访问等能力。
- 权限管理:查询当前DLP沙箱的权限信息。
- 文件信息获取:获取DLP文件的基本信息,如原始文件名。
- 沙箱环境检测:查询当前应用是否运行在DLP沙箱环境。
- 配置管理:设置、获取和清理沙箱应用配置信息。
接口说明
数据防泄漏服务关键接口如下表所示。具体API说明详见API参考
| 名称 | 描述 |
|---|---|
| DLP_ErrCode OH_DLP_GetDlpPermissionInfo(DLP_FileAccess *dlpFileAccess, uint32_t *flags) | 查询当前DLP沙箱的权限信息。 |
| DLP_ErrCode OH_DLP_GetOriginalFileName(const char *fileName, char **originalFileName) | 获取指定DLP文件名的原始文件名。 |
| DLP_ErrCode OH_DLP_IsInSandbox(bool *isInSandbox) | 查询当前应用是否运行在DLP沙箱环境。 |
| DLP_ErrCode OH_DLP_SetSandboxAppConfig(const char *configInfo) | 设置沙箱应用配置信息。 |
| DLP_ErrCode OH_DLP_GetSandboxAppConfig(char **configInfo) | 获取沙箱应用配置信息。 |
| DLP_ErrCode OH_DLP_CleanSandboxAppConfig() | 清理沙箱应用配置信息。 |
开发步骤
-
在CMakeLists.txt中导入数据防泄漏的共享库,并链接该库。
cmake_minimum_required(VERSION 3.5.0) project(DlpApiTest) set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) if(DEFINED PACKAGE_FIND_FILE) include(${PACKAGE_FIND_FILE}) endif() include_directories(${NATIVERENDER_ROOT_PATH} ${NATIVERENDER_ROOT_PATH}/include) add_library(entry SHARED napi_init.cpp) target_link_libraries(entry PUBLIC libace_napi.z.so libohdlp_permission.so) -
导入数据防泄漏服务的头文件和NAPI相关头文件。
#include "napi/native_api.h" #include <cstdint> #include <cstdlib> #include "DataProtectionKit/dlp_permission_api.h" -
查询当前DLP沙箱的权限信息。
static napi_value GetDlpPermissionInfo(napi_env env, napi_callback_info info) { DLP_FileAccess dlpFileAccess = NO_PERMISSION; uint32_t flags = 0; DLP_ErrCode ret = OH_DLP_GetDlpPermissionInfo(&dlpFileAccess, &flags); if (ret == DLP_ErrCode::ERR_OH_SUCCESS) { napi_value result[2] = {nullptr}; napi_create_int32(env, dlpFileAccess, &result[0]); napi_create_int32(env, flags, &result[1]); return result[1]; } napi_value result = nullptr; napi_create_int32(env, ret, &result); return result; } -
获取指定DLP文件名的原始文件名。
static napi_value GetOriginalFileName(napi_env env, napi_callback_info info) { const char *fileName = "test.txt.dlp"; char *originalFileName = nullptr; DLP_ErrCode ret = OH_DLP_GetOriginalFileName(fileName, &originalFileName); if (ret == DLP_ErrCode::ERR_OH_SUCCESS) { napi_value result = nullptr; napi_create_string_utf8(env, originalFileName, NAPI_AUTO_LENGTH, &result); return result; } napi_value result = nullptr; napi_create_int32(env, ret, &result); free(originalFileName); return result; } -
查询当前应用是否运行在DLP沙箱环境。
static napi_value IsInSandbox(napi_env env, napi_callback_info info) { bool isInSandbox = false; DLP_ErrCode ret = OH_DLP_IsInSandbox(&isInSandbox); if (ret == DLP_ErrCode::ERR_OH_SUCCESS) { napi_value result = nullptr; napi_get_boolean(env, isInSandbox, &result); return result; } napi_value result = nullptr; napi_create_int32(env, ret, &result); return result; } -
设置沙箱应用配置信息。
static napi_value SetSandboxAppConfig(napi_env env, napi_callback_info info) { const char *configInfo = "configInfo"; DLP_ErrCode ret = OH_DLP_SetSandboxAppConfig(configInfo); napi_value result = nullptr; napi_create_int32(env, ret, &result); return result; } -
获取沙箱应用配置信息。
static napi_value GetSandboxAppConfig(napi_env env, napi_callback_info info) { char *configInfo = nullptr; DLP_ErrCode ret = OH_DLP_GetSandboxAppConfig(&configInfo); if (ret == DLP_ErrCode::ERR_OH_SUCCESS) { napi_value result = nullptr; napi_create_string_utf8(env, configInfo, NAPI_AUTO_LENGTH, &result); return result; } napi_value result = nullptr; napi_create_int32(env, ret, &result); free(configInfo); return result; } -
清理沙箱应用配置信息。
static napi_value CleanSandboxAppConfig(napi_env env, napi_callback_info info) { DLP_ErrCode ret = OH_DLP_CleanSandboxAppConfig(); napi_value result = nullptr; napi_create_int32(env, ret, &result); return result; }