数据防泄漏(Data Loss Prevention,DLP)是系统提供的系统级的数据防泄漏解决方案,提供跨设备的文件的权限管理、加密存储、授权访问等能力。
数据防泄漏服务关键接口如下表所示。具体API说明详见dlp_permission_api.h
| 名称 | 描述 |
|---|---|
| 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中导入数据防泄漏的共享库,并链接该库。
# the minimum version of CMake.
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; // 表示DLP文件授权类型
uint32_t flags = 0; // 表示DLP文件的详细操作权限
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"; // 表示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); // 处理完后手动释放originalFileName
return result;
} 查询当前应用是否运行在DLP沙箱环境。
static napi_value IsInSandbox(napi_env env, napi_callback_info info)
{
bool isInSandbox = false; // true表示当前应用在沙箱中,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"; // 沙箱应用配置信息,用户可将配置信息json化后传入
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; // 输出json化后的沙箱应用配置信息
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); // 处理完后手动释放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;
}