Binder 机制Native 层 Binder 机制分析 ( 查找 Binder 服务 | svcmgr_handler | do_find_service )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Binder 机制Native 层 Binder 机制分析 ( 查找 Binder 服务 | svcmgr_handler | do_find_service )相关的知识,希望对你有一定的参考价值。
前言
在上一篇博客 【Binder 机制】Native 层 Binder 机制分析 ( binder_loop | svcmgr_handler | binder.c | binder_parse ) 中 , 简单介绍了 在 service_manager.c 中的 main
函数中调用了 binder_loop
方法 , 在 binder_loop
方法中 , 传入了 svcmgr_handler
方法作为回调函数 , svcmgr_handler
中可以接收不同的消息 , 处理不同的业务 ;
一、查找 Binder 服务
在 svcmgr_handler 方法中 , 查找 Binder 服务 , 需要执行如下逻辑 : 接收到 SVC_MGR_CHECK_SERVICE
消息 , 查找 Binder 服务 , 主要调用 do_find_service
方法 ;
int svcmgr_handler(struct binder_state *bs,
struct binder_transaction_data *txn,
struct binder_io *msg,
struct binder_io *reply)
{
// 链表
struct svcinfo *si;
// 根据不同的 txn->code 执行不同的方法
switch(txn->code) {
case SVC_MGR_CHECK_SERVICE:
s = bio_get_string16(msg, &len);
if (s == NULL) {
return -1;
}
handle = do_find_service(s, len, txn->sender_euid, txn->sender_pid);
if (!handle)
break;
bio_put_ref(reply, handle);
return 0;
}
return 0;
}
完整代码参考 /frameworks/native/cmds/servicemanager/service_manager.c
二、service_manager.c | do_find_service
do_find_service
方法 , 主要用于查找之前是否有注册过 Service 服务 ;
uint32_t do_find_service(const uint16_t *s, size_t len, uid_t uid, pid_t spid)
{
// 查找服务
struct svcinfo *si = find_svc(s, len);
if (!si || !si->handle) {
return 0;
}
if (!si->allow_isolated) {
// If this service doesn't allow access from isolated processes,
// then check the uid to see if it is isolated.
uid_t appid = uid % AID_USER;
if (appid >= AID_ISOLATED_START && appid <= AID_ISOLATED_END) {
return 0;
}
}
// 如果没有找到服务 , 返回 0
if (!svc_can_find(s, len, spid, uid)) {
return 0;
}
// 如果找到服务 , 直接返回
return si->handle;
}
完整代码参考 /frameworks/native/cmds/servicemanager/service_manager.c
以上是关于Binder 机制Native 层 Binder 机制分析 ( 查找 Binder 服务 | svcmgr_handler | do_find_service )的主要内容,如果未能解决你的问题,请参考以下文章
Binder 机制Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )(代码片
Binder 机制Native 层 Binder 机制分析 ( 注册 Binder 服务 | svcmgr_handler | do_add_service | find_svc )
Android通信方式篇(七)-Binder机制(Native层(下))
android binder深入分析之承上启下的native层