diff --git a/BUILD.gn b/BUILD.gn index a3c75e3f523d0638bbba55019c39992f0ddaeb7d..971365a4a407bdaf1b3724ea3c6300a6a9c05080 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -79,6 +79,9 @@ executable("wms_server") { include_dirs = [ "frameworks/ims", "interfaces/innerkits", + "//base/security/permission_lite/services/pms_client/include", + "//base/security/permission_lite/interfaces/innerkits", + "//base/security/permission_lite/interfaces/kits", "//drivers/peripheral/input/interfaces/include", "//third_party/FreeBSD/sys/dev/evdev", ] @@ -91,6 +94,7 @@ executable("wms_server") { "-ldisplay_layer", ] deps = [ + "//base/security/permission_lite/services/pms_client:pms_client", "//drivers/peripheral/input/hal:hdi_input", "//foundation/graphic/utils:lite_graphic_hals", ] diff --git a/services/wms/lite_wms.cpp b/services/wms/lite_wms.cpp index 099feb9ebe1faeec1e97dcdd75a5ca3c4ca3469c..8508dc604623c064a8f704097602bbe41fc066ec 100644 --- a/services/wms/lite_wms.cpp +++ b/services/wms/lite_wms.cpp @@ -17,6 +17,7 @@ #include "gfx_utils/graphic_log.h" #include "lite_wm.h" #include "lite_wm_type.h" +#include "pms_interface.h" #include "surface.h" #include "surface_impl.h" @@ -214,6 +215,13 @@ void LiteWMS::GetEventData(IpcIo* req, IpcIo* reply) void LiteWMS::Screenshot(IpcIo* req, IpcIo* reply) { + const char *writeMediaImagePermissionName = "ohos.permission.WRITE_MEDIA_IMAGES"; + pid_t uid = GetCallingUid(); + if (CheckPermission(uid, writeMediaImagePermissionName) != GRANTED) { + GRAPHIC_LOGE("permission denied"); + WriteInt32(reply, LiteWMS_EUNKNOWN); + return; + } Surface* surface = SurfaceImpl::GenericSurfaceByIpcIo(*req); bool ret = LiteWM::GetInstance()->OnScreenshot(surface); WriteInt32(reply, ret ? LiteWMS_EOK : LiteWMS_EUNKNOWN);