当前位置: 首页 > news >正文

【OpenHarmony】存储管理服务模块架构

存储管理服务模块架构

1. 模块概述

源码:https://gitee.com/openharmony/filemanagement_storage_service

1.1 功能与目标

主要功能:
存储管理服务模块(Storage Service)是OpenHarmony系统中提供基础存储查询和管理能力的核心模块,为系统和应用提供统一的存储管理接口。该模块的主要功能包括:

  • 外置存储卡管理:提供外置存储卡的挂载、卸载、格式化等管理功能
  • 文件加解密:提供文件系统的加密和解密能力,支持用户数据保护
  • 磁盘和卷管理:提供磁盘和卷的查询、创建、删除等管理功能
  • 用户目录管理:提供多用户环境下的目录创建、删除、权限管理
  • 存储空间统计:提供以应用或用户为维度的存储空间统计查询能力
  • 文件共享:提供应用间文件共享和分布式文件共享功能
  • MTP支持:提供MTP(Media Transfer Protocol)设备支持
  • 配额管理:提供应用存储配额限制和管理功能
  • 媒体FUSE:提供媒体文件的FUSE文件系统支持
  • 云存储FUSE:提供云存储的FUSE文件系统支持

使用场景:

  • 系统存储管理
  • 应用存储空间管理
  • 用户数据目录管理
  • 外置存储设备管理
  • 文件加密和安全保护
  • 分布式文件共享
  • 媒体文件管理
  • 云存储集成

1.2 系统位置

系统架构位置:
存储管理服务模块位于OpenHarmony系统的foundation/filemanagement子系统下,是文件管理框架的核心组件。

模块关系:

  • 上层对接:为应用层和其他系统服务提供存储管理API
  • 下层对接:对接底层文件系统、加密框架、硬件驱动等
  • 横向协作:与多用户管理、包管理、媒体库服务、公共文件访问框架等模块协作
  • 系统集成:集成到系统能力管理器中,提供系统级存储管理能力

核心模块地位:
该模块是文件管理子系统的核心模块,承担着统一存储管理接口的重要职责,是连接应用和底层存储系统的重要桥梁。

1.3 设计思路与模式

设计思路:

  • 分层架构设计:采用storage_api、storage_manager、storage_daemon三层架构
  • 服务分离:将常驻daemon服务和非常驻manager服务分离,提高系统效率
  • 统一接口设计:通过统一的API接口屏蔽底层存储差异
  • 安全优先:集成文件加密和权限控制机制,确保数据安全
  • 多用户支持:支持多用户环境下的存储隔离和管理
  • 异步处理机制:采用异步处理模式,提高系统响应性能

设计模式:

  • 单例模式:VolumeManager、KeyManager等核心组件采用单例模式
  • 代理模式:StorageManager作为代理,管理StorageDaemon连接和请求转发
  • 观察者模式:存储状态变化通知机制
  • 工厂模式:Volume和Disk对象的创建和管理
  • 策略模式:不同存储类型的处理策略

1.4 系统框图

外部依赖
Storage Daemon组件
Storage Manager组件
存储管理服务模块
应用层
多用户管理
包管理
媒体库服务
公共文件访问框架
加密框架
文件系统
卷挂载
磁盘监听
文件加密
用户目录
MTP支持
FUSE支持
卷管理
磁盘管理
用户管理
空间统计
加密管理
Storage API
Storage Manager
Storage Daemon
文件管理器
媒体应用
第三方应用
系统服务

2. 模块结构

2.1 源文件与头文件

核心服务文件:

Storage Manager服务:

  • services/storage_manager/include/storage/storage_manager.h - 存储管理器主类定义
  • services/storage_manager/include/volume/volume_manager.h - 卷管理器
  • services/storage_manager/include/disk/disk_manager.h - 磁盘管理器
  • services/storage_manager/include/user/user_manager.h - 用户管理器
  • services/storage_manager/include/crypto/crypto_manager.h - 加密管理器

Storage Daemon服务:

  • services/storage_daemon/include/volume/volume_manager.h - 卷管理器
  • services/storage_daemon/include/crypto/key_manager.h - 密钥管理器
  • services/storage_daemon/include/disk/disk_manager.h - 磁盘管理器
  • services/storage_daemon/include/user/user_manager.h - 用户管理器
  • services/storage_daemon/include/mtp/mtp_manager.h - MTP管理器

接口定义文件:

  • interfaces/innerkits/storage_manager/native/volume_core.h - 卷核心信息
  • interfaces/innerkits/storage_manager/native/disk.h - 磁盘信息
  • interfaces/innerkits/storage_manager/native/storage_stats.h - 存储统计
  • interfaces/innerkits/storage_manager/native/bundle_stats.h - 应用统计
  • services/storage_daemon/IStorageDaemon.idl - Daemon服务接口
  • services/storage_manager/IStorageManager.idl - Manager服务接口

JS API文件:

  • interfaces/kits/js/storage_manager/include/volumemanager_napi.h - 卷管理JS接口
  • interfaces/kits/js/storage_manager/include/storage_statistics_napi.h - 存储统计JS接口
  • interfaces/kits/js/storage_manager/include/keymanager_napi.h - 密钥管理JS接口

工具和辅助文件:

  • services/common/include/storage_service_constant.h - 服务常量定义
  • services/common/include/storage_service_log.h - 日志工具
  • services/common/include/storage_rl_map.h - 读写锁映射

2.2 类、结构体、函数与方法

核心类定义:

VolumeManager类(Daemon)
class VolumeManager final {
public:virtual ~VolumeManager() = default;static VolumeManager &Instance();// 卷管理std::string CreateVolume(const std::string diskId, dev_t device, bool isUserdata);int32_t DestroyVolume(const std::string volId);// 卷操作int32_t Check(const std::string volId);int32_t Mount(const std::string volId, uint32_t flags);int32_t UMount(const std::string volId);int32_t MountUsbFuse(std::string volumeId, std::string &fsUuid, int &fuseFd);int32_t TryToFix(const std::string volId, uint32_t flags);int32_t Format(const std::string volId, const std::string fsType);int32_t SetVolumeDescription(const std::string volId, const std::string description);int32_t QueryUsbIsInUse(const std::string &diskPath, bool &isInUse);private:VolumeManager() = default;DISALLOW_COPY_AND_MOVE(VolumeManager);bool IsMtpDeviceInUse(const std::string &diskPath);StorageService::StorageRlMap<std::string, std::shared_ptr<VolumeInfo>> volumes_;std::shared_ptr<VolumeInfo> GetVolume(const std::string volId);int32_t CreateMountUsbFusePath(std::string fsUuid);int32_t ReadVolumeUuid(std::string volumeId, std::string &fsUuid);std::string mountUsbFusePath_;
};
KeyManager类
class KeyManager {
public:static KeyManager &GetInstance(void);// 全局密钥管理int InitGlobalDeviceKey(void);int InitGlobalUserKeys(void);// 用户密钥管理int GenerateUserKeys(unsigned int user, uint32_t flags);int DeleteUserKeys(unsigned int user);int UpdateUserAuth(unsigned int user, struct UserTokenSecret &userTokenSecret);int ActiveCeSceSeceUserKey(unsigned int user, KeyType type, const std::vector<uint8_t> &token,const std::vector<uint8_t> &secret);int InActiveUserKey(unsigned int user);// 应用密钥管理int GenerateAppkey(uint32_t user, uint32_t hashId, std::string &keyId, bool needReSet = false);int DeleteAppkey(uint32_t user, const std::string keyId);// 屏幕锁定管理int LockUserScreen(uint32_t user);int UnlockUserScreen(uint32_t user, const std::vector<uint8_t> &token,const std::vector<uint8_t> &secret);int GetLockScreenStatus(uint32_t user, bool &lockScreenStatus);// 文件加密状态int GetFileEncryptStatus(uint32_t userId, bool &isEncrypted, bool needCheckDirMount = false);// 恢复密钥管理int CreateRecoverKey(uint32_t userId, uint32_t userType, const std::vector<uint8_t> &token,const std::vector<uint8_t> &secret);int SetRecoverKey(const std::vector<uint8_t> &key);private:KeyManager();~KeyManager() {}DISALLOW_COPY_AND_MOVE(KeyManager);using KeyMap = std::map<KeyType, std::shared_ptr<BaseKey>>;std::map<unsigned int, KeyMap> userElKeys_;std::map<unsigned int, std::shared_ptr<DelayHandler>> userLockScreenTask_;std::shared_ptr<BaseKey> globalEl1Key_ { nullptr };std::mutex keyMutex_;bool hasGlobalDeviceKey_;
};

重要结构体:

VolumeCore结构体
class VolumeCore : public Parcelable {
public:VolumeCore();VolumeCore(std::string id, int32_t type, std::string diskId);VolumeCore(std::string id, int32_t type, std::string diskId, int32_t state);// 属性访问std::string GetId() const;int32_t GetType();std::string GetDiskId();int32_t GetState();void SetState(int32_t state);// 序列化支持bool Marshalling(Parcel &parcel) const override;static VolumeCore *Unmarshalling(Parcel &parcel);private:std::string id_;           // 卷IDint32_t type_;            // 卷类型(EMULATED/EXTERNAL)std::string diskId_;       // 磁盘IDint32_t state_;           // 卷状态bool errorFlag_;          // 错误标志
};
Disk结构体
class Disk : public Parcelable {
public:Disk();Disk(std::string diskId, int64_t sizeBytes, std::string sysPath, std::string vendor, int32_t flag);// 属性访问std::string GetDiskId() const;int64_t GetSizeBytes();std::string GetSysPath();std::string GetVendor();int32_t GetFlag();void SetFlag(int32_t flag);// 序列化支持bool Marshalling(Parcel &parcel) const override;static Disk *Unmarshalling(Parcel &parcel);private:std::string diskId_;       // 磁盘IDint64_t sizeBytes_;       // 磁盘大小std::string sysPath_;      // 系统路径std::string vendor_;       // 厂商信息int32_t flag_;            // 磁盘标志(SD_FLAG/USB_FLAG)
};
StorageStats结构体
class StorageStats final : public Parcelable {
public:StorageStats() {}StorageStats(int64_t total, int64_t audio, int64_t video, int64_t image, int64_t file, int64_t app): total_(total), audio_(audio), video_(video), image_(image), file_(file), app_(app) {}~StorageStats() {}// 存储统计信息int64_t total_ {0};        // 总大小int64_t audio_ {0};       // 音频大小int64_t video_ {0};       // 视频大小int64_t image_ {0};       // 图片大小int64_t file_ {0};        // 文件大小int64_t app_ {0};         // 应用大小// 序列化支持bool Marshalling(Parcel &parcel) const override;static StorageStats *Unmarshalling(Parcel &parcel);
};

2.3 继承与多态

继承关系:

  • VolumeCoreDiskStorageStats等结构体继承自Parcelable,支持跨进程序列化
  • VolumeManagerKeyManager等管理器类采用单例模式
  • 各种回调类继承自相应的接口基类

多态设计:

  • 通过接口抽象实现不同存储类型的统一管理
  • 回调机制支持多种事件类型的统一处理
  • 策略模式实现不同存储策略的动态切换
  • 工厂模式支持不同存储对象的创建

2.4 类图

manages
creates
uses
manages
references
«interface»
Parcelable
+Marshalling() : bool
+Unmarshalling()
VolumeCore
-id_: string
-type_: int32_t
-diskId_: string
-state_: int32_t
-errorFlag_: bool
+GetId() : string
+GetType() : int32_t
+GetDiskId() : string
+GetState() : int32_t
+SetState() : void
+Marshalling() : bool
+Unmarshalling()
Disk
-diskId_: string
-sizeBytes_: int64_t
-sysPath_: string
-vendor_: string
-flag_: int32_t
+GetDiskId() : string
+GetSizeBytes() : int64_t
+GetSysPath() : string
+GetVendor() : string
+GetFlag() : int32_t
+SetFlag() : void
+Marshalling() : bool
+Unmarshalling()
StorageStats
-total_: int64_t
-audio_: int64_t
-video_: int64_t
-image_: int64_t
-file_: int64_t
-app_: int64_t
+Marshalling() : bool
+Unmarshalling()
VolumeManager
-volumes_: StorageRlMap
-mountUsbFusePath_: string
+Instance()
+CreateVolume() : string
+DestroyVolume() : int32_t
+Check() : int32_t
+Mount() : int32_t
+UMount() : int32_t
+MountUsbFuse() : int32_t
+TryToFix() : int32_t
+Format() : int32_t
+SetVolumeDescription() : int32_t
+QueryUsbIsInUse() : int32_t
-GetVolume() : shared_ptr<VolumeInfo>
-IsMtpDeviceInUse() : bool
KeyManager
-userElKeys_: map<unsigned int, KeyMap>
-userLockScreenTask_: map<unsigned int, DelayHandler>
-globalEl1Key_: shared_ptr<BaseKey>
-keyMutex_: mutex
-hasGlobalDeviceKey_: bool
+GetInstance()
+InitGlobalDeviceKey() : int
+InitGlobalUserKeys() : int
+GenerateUserKeys() : int
+DeleteUserKeys() : int
+UpdateUserAuth() : int
+ActiveCeSceSeceUserKey() : int
+InActiveUserKey() : int
+GenerateAppkey() : int
+DeleteAppkey() : int
+LockUserScreen() : int
+UnlockUserScreen() : int
+GetLockScreenStatus() : int
+GetFileEncryptStatus() : int
+CreateRecoverKey() : int
+SetRecoverKey() : int
«abstract»
BaseKey
+Generate() : int
+Install() : int
+Restore() : int
+Delete() : int
DelayHandler
+HandleDelay() : void
+CancelDelay() : void
VolumeInfo
+GetVolumeId() : string
+GetMountPath() : string
+GetFsType() : string
+GetState() : int32_t
+SetState() : void

2.5 模块内部依赖框图

工具类
数据结构
Storage Daemon组件
Storage Manager组件
存储管理服务模块内部结构
StorageRlMap
DelayHandler
BaseKey
VolumeInfo
VolumeCore
Disk
StorageStats
BundleStats
VolumeManager
DiskManager
KeyManager
UserManager
MtpManager
FuseManager
VolumeManager
DiskManager
UserManager
StorageStatisticsManager
CryptoManager
Storage API
Storage Manager
Storage Daemon

3. 模块间交互

3.1 交互描述

与系统模块的交互:

  • 多用户管理:通过os_account模块管理用户,调用storage_manager提供的能力管理相应用户的数据目录
  • 包管理:通过bundle_framework模块提供包的管理功能,为storage_manager提供指定用户、指定包名对应的空间大小
  • 媒体库服务:通过media_library模块提供媒体文件信息,为storage_manager提供指定用户的各类媒体文件的空间大小
  • 公共文件访问框架:通过user_file_service模块提供对文件的管理功能,需要storage_manager提供的卷信息
  • 加密框架:通过crypto_framework和huks模块提供加密和密钥管理能力
  • 文件系统:通过底层文件系统提供存储操作能力

外部库依赖:

  • 系统框架:SAMGR、SAFWK、AAFwk等系统框架
  • 加密库:OpenSSL、Huks等加密相关库
  • 文件系统工具:e2fsprogs、f2fs-tools、exfatprogs、ntfs-3g等文件系统工具
  • USB和MTP:libusb、libmtp等USB和MTP相关库
  • FUSE:libfuse提供用户空间文件系统支持
  • 工具库:cJSON、c_utils、zlib等基础工具库

异步处理机制:

  • 使用IPC机制进行跨进程通信
  • 通过事件循环机制处理存储状态变化
  • 支持多线程并发处理存储操作请求
  • 采用观察者模式处理存储事件通知

3.2 事件驱动机制

事件类型:

  • 磁盘创建/销毁事件
  • 卷创建/销毁事件
  • 卷挂载/卸载事件
  • 用户创建/删除事件
  • 文件加密状态变化事件
  • MTP设备连接/断开事件
  • 存储空间变化事件

事件处理流程:

  1. 注册事件监听器
  2. 接收系统或硬件事件通知
  3. 解析事件参数
  4. 更新内部状态
  5. 通知相关回调
  6. 执行相应的存储操作

3.3 外部依赖框图

应用层
外部库
系统框架
系统服务
存储管理服务模块
文件管理器
媒体应用
第三方应用
系统服务
OpenSSL
libusb
libmtp
libfuse
e2fsprogs
f2fs-tools
SAMGR
SAFWK
IPC
权限管理
多用户管理
包管理
媒体库服务
公共文件访问框架
加密框架
文件系统
Storage Manager
Storage Daemon

4. 状态机转换图

4.1 状态机模型

存储管理服务模块的状态机包含以下主要状态:

服务状态:

  • SERVICE_NOT_START - 服务未启动
  • SERVICE_RUNNING - 服务运行中
  • SERVICE_STOPPING - 服务停止中
  • SERVICE_EXIT - 服务已退出

卷状态:

  • VOLUME_UNMOUNTED - 卷未挂载
  • VOLUME_CHECKING - 卷检查中
  • VOLUME_MOUNTED - 卷已挂载
  • VOLUME_EJECTING - 卷弹出中
  • VOLUME_REMOVED - 卷已移除
  • VOLUME_BAD_REMOVAL - 卷异常移除
  • VOLUME_DAMAGED - 卷损坏
  • VOLUME_FUSE_REMOVED - FUSE卷已移除

磁盘状态:

  • DISK_UNKNOWN - 磁盘未知
  • DISK_CONNECTED - 磁盘已连接
  • DISK_DISCONNECTED - 磁盘已断开
  • DISK_FORMATTING - 磁盘格式化中
  • DISK_FORMATTED - 磁盘已格式化

用户状态:

  • USER_NOT_CREATED - 用户未创建
  • USER_CREATING - 用户创建中
  • USER_CREATED - 用户已创建
  • USER_STARTING - 用户启动中
  • USER_RUNNING - 用户运行中
  • USER_STOPPING - 用户停止中
  • USER_DELETED - 用户已删除

加密状态:

  • ENCRYPTION_DISABLED - 加密未启用
  • ENCRYPTION_ENABLING - 加密启用中
  • ENCRYPTION_ENABLED - 加密已启用
  • ENCRYPTION_DISABLING - 加密禁用中
  • ENCRYPTION_ERROR - 加密错误

4.2 状态切换规则

服务启动流程:

  1. 服务初始状态为SERVICE_NOT_START
  2. 收到启动事件后,进入SERVICE_RUNNING状态
  3. 初始化各个子模块和事件监听器
  4. 注册到系统能力管理器

卷状态转换:

  1. 卷初始状态为VOLUME_UNMOUNTED
  2. 收到挂载请求时,进入VOLUME_CHECKING状态
  3. 检查完成后,进入VOLUME_MOUNTED状态
  4. 收到卸载请求时,进入VOLUME_EJECTING状态
  5. 卸载完成后,回到VOLUME_UNMOUNTED状态
  6. 发生错误时,进入相应的错误状态

磁盘状态转换:

  1. 磁盘初始状态为DISK_UNKNOWN
  2. 检测到磁盘连接时,进入DISK_CONNECTED状态
  3. 收到格式化请求时,进入DISK_FORMATTING状态
  4. 格式化完成后,进入DISK_FORMATTED状态
  5. 磁盘断开时,进入DISK_DISCONNECTED状态

用户状态转换:

  1. 用户初始状态为USER_NOT_CREATED
  2. 收到创建请求时,进入USER_CREATING状态
  3. 创建完成后,进入USER_CREATED状态
  4. 收到启动请求时,进入USER_STARTING状态
  5. 启动完成后,进入USER_RUNNING状态
  6. 收到停止请求时,进入USER_STOPPING状态
  7. 停止完成后,回到USER_CREATED状态
  8. 收到删除请求时,进入USER_DELETED状态

加密状态转换:

  1. 加密初始状态为ENCRYPTION_DISABLED
  2. 收到启用请求时,进入ENCRYPTION_ENABLING状态
  3. 启用完成后,进入ENCRYPTION_ENABLED状态
  4. 收到禁用请求时,进入ENCRYPTION_DISABLING状态
  5. 禁用完成后,回到ENCRYPTION_DISABLED状态
  6. 发生错误时,进入ENCRYPTION_ERROR状态

事件触发条件:

  • 系统启动/停止事件
  • 磁盘连接/断开事件
  • 卷挂载/卸载事件
  • 用户创建/删除事件
  • 加密启用/禁用事件
  • 硬件状态变化事件

4.3 状态机转换图

系统启动
OnStart()
OnStop()
停止完成
重启服务
初始化卷
Mount()调用
挂载成功
挂载失败
UMount()调用
卸载完成
修复完成
初始化磁盘
磁盘连接
Format()调用
格式化完成
磁盘断开
重新检测
初始化用户
CreateUser()调用
创建完成
StartUser()调用
启动完成
StopUser()调用
停止完成
DeleteUser()调用
初始化加密
EnableEncryption()调用
启用完成
启用失败
DisableEncryption()调用
禁用完成
错误恢复
ServiceNotStart
ServiceRunning
ServiceStopping
ServiceExit
VolumeUnmounted
VolumeChecking
VolumeMounted
VolumeDamaged
VolumeEjecting
DiskUnknown
DiskConnected
DiskFormatting
DiskFormatted
DiskDisconnected
UserNotCreated
UserCreating
UserCreated
UserStarting
UserRunning
UserStopping
UserDeleted
EncryptionDisabled
EncryptionEnabling
EncryptionEnabled
EncryptionError
EncryptionDisabling
服务运行状态,可以处理
各种存储管理操作
卷已挂载状态,可以执行
文件操作和空间统计
用户运行状态,可以访问
用户数据和执行操作
加密已启用状态,所有
用户数据都经过加密保护

5. 接口设计

5.1 公共接口

存储管理接口:

获取卷信息
// IDL接口
void GetAllVolumes([out] VolumeExternal[] vecOfVol);
void GetVolumeByUuid([in] String fsUuid, [out] VolumeExternal vc);
void GetVolumeById([in] String volumeId, [out] VolumeExternal vc);
  • 功能:获取系统中的卷信息
  • 参数
    • fsUuid - 文件系统UUID
    • volumeId - 卷ID
    • vecOfVol - 输出参数,卷信息列表
    • vc - 输出参数,卷信息
  • 返回值:操作结果码
  • 异常处理:卷不存在时返回错误码
挂载/卸载卷
// IDL接口
void Mount([in] String volumeId);
void Unmount([in] String volumeId);
  • 功能:挂载或卸载指定的卷
  • 参数volumeId - 卷ID
  • 返回值:操作结果码
  • 权限要求:系统级权限
  • 异常处理:卷不存在或权限不足时返回错误码
格式化卷
// IDL接口
void Format([in] String volumeId, [in] String fsType);
  • 功能:格式化指定的卷
  • 参数
    • volumeId - 卷ID
    • fsType - 文件系统类型
  • 返回值:操作结果码
  • 权限要求:系统级权限
  • 异常处理:卷不存在或格式化失败时返回错误码

磁盘管理接口:

获取磁盘信息
// IDL接口
void GetAllDisks([out] Disk[] vecOfDisk);
void GetDiskById([in] String diskId, [out] Disk disk);
  • 功能:获取系统中的磁盘信息
  • 参数
    • diskId - 磁盘ID
    • vecOfDisk - 输出参数,磁盘信息列表
    • disk - 输出参数,磁盘信息
  • 返回值:操作结果码
  • 异常处理:磁盘不存在时返回错误码
分区磁盘
// IDL接口
void Partition([in] String diskId, [in] int type);
  • 功能:对磁盘进行分区
  • 参数
    • diskId - 磁盘ID
    • type - 分区类型
  • 返回值:操作结果码
  • 权限要求:系统级权限
  • 异常处理:磁盘不存在或分区失败时返回错误码

存储统计接口:

获取存储统计
// IDL接口
void GetUserStorageStats([out] StorageStats storageStats);
void GetUserStorageStats([in] int userId, [out] StorageStats storageStats);
void GetUserStorageStatsByType([in] int userId, [out] StorageStats storageStats, [in] String type);
  • 功能:获取用户存储统计信息
  • 参数
    • userId - 用户ID
    • type - 统计类型
    • storageStats - 输出参数,存储统计信息
  • 返回值:操作结果码
  • 异常处理:用户不存在时返回错误码
获取应用统计
// IDL接口
void GetBundleStats([in] String pkgName, [out] BundleStats bundleStats, [in] int appIndex, [in] unsigned int statFlag);
void GetCurrentBundleStats([out] BundleStats bundleStats, [in] unsigned int statFlag);
  • 功能:获取应用存储统计信息
  • 参数
    • pkgName - 应用包名
    • appIndex - 应用索引
    • statFlag - 统计标志
    • bundleStats - 输出参数,应用统计信息
  • 返回值:操作结果码
  • 异常处理:应用不存在时返回错误码

用户管理接口:

用户生命周期管理
// IDL接口
void PrepareAddUser([in] int userId, [in] unsigned int flags);
void RemoveUser([in] int userId, [in] unsigned int flags);
void PrepareStartUser([in] int userId);
void StopUser([in] int userId);
void CompleteAddUser([in] int userId);
  • 功能:管理用户的生命周期
  • 参数
    • userId - 用户ID
    • flags - 操作标志
  • 返回值:操作结果码
  • 权限要求:系统级权限
  • 异常处理:用户操作失败时返回错误码

加密管理接口:

用户密钥管理
// IDL接口
void DeleteUserKeys([in] unsigned int userId);
void UpdateUserAuth([in] unsigned int userId, [in] unsigned long secureUid,[in] List<unsigned char> token, [in] List<unsigned char> oldSecret,[in] List<unsigned char> newSecret);
void ActiveUserKey([in] unsigned int userId, [in] unsigned char[] token, [in] unsigned char[] secret);
void InactiveUserKey([in] unsigned int userId);
  • 功能:管理用户的加密密钥
  • 参数
    • userId - 用户ID
    • secureUid - 安全用户ID
    • token - 认证令牌
    • oldSecret - 旧密钥
    • newSecret - 新密钥
  • 返回值:操作结果码
  • 权限要求:系统级权限
  • 异常处理:密钥操作失败时返回错误码
屏幕锁定管理
// IDL接口
void LockUserScreen([in] unsigned int userId);
void UnlockUserScreen([in] unsigned int userId, [in] unsigned char[] token, [in] unsigned char[] secret);
void GetLockScreenStatus([in] unsigned int userId, [out] boolean lockScreenStatus);
  • 功能:管理用户的屏幕锁定状态
  • 参数
    • userId - 用户ID
    • token - 认证令牌
    • secret - 密钥
    • lockScreenStatus - 输出参数,锁定状态
  • 返回值:操作结果码
  • 异常处理:锁定操作失败时返回错误码

5.2 数据交换接口

IPC接口定义:

  • 使用IDL定义跨进程接口
  • 支持Parcelable对象序列化
  • 提供异步回调机制

数据格式:

  • VolumeCore、Disk、StorageStats等结构体支持序列化
  • 使用MessageParcel进行数据传递
  • 支持大数据量的传输

5.3 接口调用时序图

应用程序StorageManagerStorageDaemonVolumeManagerKeyManager文件系统回调函数GetAllVolumes()查询卷信息GetVolumeList()读取卷状态返回卷信息返回卷列表返回卷信息返回卷列表Mount(volumeId)Mount(volumeId)Mount(volumeId)mount()系统调用挂载结果挂载完成挂载结果返回结果GetUserStorageStats(userId)查询存储统计统计用户数据返回统计信息返回统计数据返回统计结果ActiveUserKey(userId, token, secret)ActiveUserKey(userId, token, secret)ActiveUserKey(userId, token, secret)验证密钥激活结果激活结果返回结果卷状态变化通知状态变化事件通知状态变化状态变化回调应用程序StorageManagerStorageDaemonVolumeManagerKeyManager文件系统回调函数

6. 总结

存储管理服务模块是OpenHarmony系统中文件管理框架的核心组件,通过分层架构设计为系统和应用提供统一的存储管理能力。该模块采用storage_api、storage_manager、storage_daemon三层架构,实现了常驻daemon服务和非常驻manager服务的分离,提高了系统效率。

主要特点:

  • 分层架构设计,职责清晰
  • 支持多用户环境下的存储隔离
  • 完善的加密和安全保护机制
  • 统一的存储管理接口
  • 高效的异步处理能力

技术优势:

  • 基于IPC的跨进程通信机制
  • 完善的错误处理和异常管理
  • 支持多种存储类型和设备
  • 灵活的模块化架构设计
  • 高效的存储空间统计能力

该模块为OpenHarmony系统的存储管理提供了坚实的基础,支持各种存储操作需求,是构建存储管理应用的重要基础设施。通过分层设计和多用户支持,为开发者提供了灵活、安全、高效的存储管理能力。

http://www.dtcms.com/a/481684.html

相关文章:

  • 网站做报表网站维护是谁做的
  • 阿里云k8s部署微服务yaml和Dockerfile文件脚本
  • [Backstage] 后端插件 | 包架构 | 独立微服务 | by HTTP路由
  • java微服务-尚医通-编写接口
  • Go|sync.Pool|临时对象池,实现临时对象的复用,降低GC压力
  • go语言了解
  • 网站页面高度福建住房城乡建设部网站
  • 【Go】--数组和切片
  • 李宏毅机器学习笔记22
  • 重排反应是什么?从分子变化到四大关键特征解析
  • 服务治理与 API 网关:微服务流量管理的艺术
  • 怎样做企业的网站首页网站开发求职简历
  • 程序设计基础第2周上课前预习
  • 谷歌 chrome 浏览器安装crx插件(hackbar为例)
  • 分布式专题——43 ElasticSearch概述
  • Tomcat 启动后只显示 index.jsp,没有进入你的 Servlet 逻辑
  • 分布式之RabbitMQ的使用(3)QueueBuilder
  • 建立自己网站的好处抖音代运营可以相信吗
  • Flink 状态和 CheckPoint 的区别和联系(附源码)
  • QML学习笔记(三十六)QML的ComboBox
  • 媒介宣发的技术革命:Infoseek如何用AI重构企业传播全链路
  • uniapp开发小程序
  • 浦江县建设局网站国家企业信息信用信息公示网址
  • 2025年燃气从业人员考试真题分享
  • SuperMap iServer 数据更新指南
  • C++基础:(十三)list类的模拟实现
  • 【网络编程】从数据链路层帧头到代理服务器:解析路由表、MTU/MSS、ARP、NAT 等网络核心技术
  • 北京网站seowyhseo网站模板但没有后台如何做网站
  • 对接世界职业院校技能大赛标准,唯众打造高质量云计算实训室
  • 利用人工智能、数字孪生、AR/VR 进行军用飞机维护