客户端那些事儿(2)

前情回顾

在上一篇博客中,我们介绍了客户端里的注册表初始化操作,简要介绍了其他函数的功能。
今天我们将深层次的解析各个功能的实现流程,并以一个简单的流程图的形式将流程描述出来。

功能实现

因为每个函数的功能都需要调用初始化操作,所以就不再介绍了,初始化操作流程可参考上一篇博客:客户端那些事儿

SAMGR_RegisterServiceApi

该函数的功能是构建一个远程寄存器服务应用程序编程接口,步骤如下:
①注册表初始化(InitializeRegistry)
②添加一个路由器(SAMGR_AddRouter)
③返回进程的策略(SAMGR_ProcPolicy)

SAMGR_AddRouter

添加路由器同样分为如下几个步骤:
①查询接口(QueryInterface)
②锁定多重写入,采用按键查找的方式(VECTOR_FindByKey)
③申请一个临时空间(SAMGR_Malloc)
④将元素添加到向量(VECTOR_Add)
⑤释放空间(SAMGR_Free)

SAMGR_ProcPolicy

进程策略的实现也分为几个步骤:
①先获取一个用户的注册身份(RegisterIdentity)

  • 在获取身份的过程中获取远程策略(GetRemotePolicy)

②将进程的策略添加到路由器中(AddPolicyToRouter)

构建该远程寄存器服务应用程序编程接口的步骤流程图如下:
在这里插入图片描述

SAMGR_FindServiceApi

该函数的功能是查找服务Api,其功能的实现过程分为如下几个步骤:
①注册表初始化(InitializeRegistry)
②采用矢量按键查找的方式,在指定位置获取元素(VECTOR_FindByKey、VECTOR_At)
③创建代理服务器(SAMGR_CreateIProxy)
④再次采用矢量按键查找的方式,在指定位置获取元素(VECTOR_FindByKey、VECTOR_At)
⑤将元素添加到向量(VECTOR_Add)

SAMGR_CreateIProxy

创建代理服务器也需要进行一些步骤:
①查询用户身份(QueryIdentity)
②创建客户端(SAMGR_CreateIClient)
③申请一个临时空间(SAMGR_Malloc)
④注册死亡回调(RegisterDeathCallback)

    entry->iUnknown.Invoke = ProxyInvoke;   //代理调用
    entry->iUnknown.AddRef = AddRef;    //添加参考项
    entry->iUnknown.Release = Release;  //释放空间

该函数功能的实现流程图如下:
在这里插入图片描述
如果上面介绍的两个函数的功能是为了验证用户的身份,给用户提供操控的平台,那么接下来的函数功能则是给用户提供了获取功能的能力

这三个函数我称它为服务函数,分别提供了三个服务功能:

SAMGR_RegisterSystemCapabilityApi	//注册系统能力Api
SAMGR_QuerySystemCapabilityApi	//查询系统功能Api
SAMGR_GetSystemCapabilitiesApi	//获取系统功能Api

具体函数功能可以查看前面的代码标注博客:OpenHarmony模块二samgr_client文件下头文件和源文件解析

下期预告

下期我们将开始对服务端进行深层次分析,主要以模块二的samgr_server文件为对象,仔细分析服务端的搭建流程和服务功能的构建实现步骤。

欲知后事如何,且听下回分解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值