# 查询设备安全模式(C/C++)

## 场景介绍

Device Security Kit提供了系统安全模式的查询能力。通过调用Device Security Kit的接口，可以判断设备当前的安全模式（包含普通模式、坚盾守护模式），应用可根据设备当前的安全模式提供差异化的服务。

* 普通模式：操作系统默认模式，适用于绝大部分用户使用。

* 坚盾守护模式：提供给高安全需求用户的系统级别安全模式。该模式通过限制设备基础功能，增强安全性，有效抵御远程攻击面的针对性攻击。

  坚盾守护模式下，操作系统禁止应用申请获取匿名内存可执行权限。

  应用应当根据系统安全模式进行自主适配，停用即时编译（JIT，Just-in-time compilation）功能或切换为解释执行。

## 开发步骤

1. 在CMakeLists.txt中导入设备安全模式共享库，并链接该库。

   ```cmake
   find_library(dsm-lib libdevice_security_mode.z.so)
   target_link_libraries(entry PUBLIC libace_napi.z.so ${dsm-lib})
   ```

2. 导入设备安全模式的头文件。

   ```cpp
   #include <DeviceSecurityKit/device_security_mode.h>
   ```

3. 调用接口查询设备当前的安全模式。

   ```cpp
   int32_t IsSecureShieldModeOn(void)
   {
       DSM_DeviceSecurityMode mode = HMS_DSM_GetDeviceSecurityMode();
       return mode & DSM_SECURE_SHIELD_MODE;
   }
   ```

> 说明
>
> 若应用使用到ArkWeb组件，需进一步参考[说明](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-secure-shield-mode)，进行Web特性的兼容性评估。

