Android之IPC通信中的UID和PID识别

PCThreadState对象维护了2个变量

            pid_t               mCallingPid;

            uid_t               mCallingUid;

    从变量名称来看,这2个变量保存了进程的PID和UID,并且由于这两个变量由IPCThreadState对象维护,可见它们是与IPC相关的。具体它们保存的是IPC发送方的PID和UID还是当前进程的IPD和UID,视情况而定。

    在IPC调用过程中,被调用方需要知道调用方的UID和PID,以便被调用方用于权限检测;所以需要一种方式来提供调用方的UID和PID,因此上述2个变量的主要作用就是用于权限检测。

    那么我们想象一下,下面描述的情况下,mCallingPid和mCallingUid又应该保存谁的UID和PID?假如有2个进程process A和process B,我们站在process B的角度来分析,process A IPC调用process B, 而process B 又调用同样处于process B的Service的接口(尽管此时实际上不是远程调用,并且开发者是知道的,但是对于Binder调用机制来说,它本身并不知道当前的调用是否为远程调用,前几篇文章中有分析系统如何确定是否为远程调用,这个过程是在binder driver中实现的),那么此时mCallingPid和mCallingUid是不是应该保存process B的UID和PID?

1.       process B在被process A IPC调用时, process B需知道process A的UID和PID,来检查process A的访问权限,此时mCallingUid和mCallingPid保存的是process A的UID和PID。

2.       在IPC远程调用process B的过程中,process B的方法调用了同进程中的service的接口,process B既是调用方也是被调用方,虽然这个过程比较无聊,但是鉴于IPC过程的不透明性,因此process B仍然需要进行权限检测。


前面的文章中分析过,binder driver会判断当前的Binder调用是否为远程调用,如果是同进程调用的话,BD就不会再向应用提供进程的PID和UID。因此在process B中需要显示的设置当前的PID和UID。

    为实现以上case, Android提供了一组函数

    public static final native long clearCallingIdentity();

    public static final native void restoreCallingIdentity(long token);

    process B的方法调用了同进程中的service的接口前,clearCallingIdentity()方法会清除process A的UID和PID,重置为process B的UID和PID。

    process B的方法调用了同进程中的service的接口后,此时仍然处在process A远程调用process B方法的过程中,此时需要restore  process A的UID和PID。

    本文描述的case,虽然在application 开发中并不常见,但是在system_server中很常见,比如client调用ActivityManagerService的方法,而ActivityManagerService又调用了PackageManagerService的方法,并且ActivityManagerService和PackageManagerService均会运行在system_server进程中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Framer – 将视觉搞转换为更真实的动态原型

Framer 是一个 JavaScript 框架,简化了创建现实原型,实现完整的3D效果。以一种简单,可读的和强大的方式定义交互和创建动画。 另外还有 Framer Generator 是一个桌面应用程序,从 Photoshop 文件导入资源和和文件夹层次结构。你的…

现在相亲还要体检报告了?

1 伤害性极大(素材来源网络,侵删)▼2 相亲还要看体检报告?(素材来源网络,侵删)▼3 难以启齿的地名(素材来源网络,侵删)▼4 当知道你不回家之后&#xff08…

.NET 6新特性试用 | System.Text.Json序列化代码自动生成

前言几乎所有.NET序列化程序的实现基础都是反射。下列代码是Newtonsoft.Json的实现:protected virtual JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) {JsonProperty property new JsonProperty();property.PropertyT…

UVa 264 - Count on Cantor

《算法竞赛入门经典》5.4.1的题目,大意是,给出一个数表,如下: 第一项是1/1, 第二项是1/2, 第三项是2/1, 第四项是3/1, 第五项是2/2.....给一个正整数n,求第n项。 设第n个…

他解决了物理学千年争端,成就肩比牛顿、爱因斯坦,但却鲜有人知......

全世界只有3.14 % 的人关注了爆炸吧知识电磁学是经典物理学的一部分,提到电磁学就不得不提经典电动力学创始人-麦克斯韦。麦克斯韦的名气好像并不如牛顿、爱因斯坦那样家喻户晓,毕竟当提到牛顿的时候,这个公式就如同条件反射似得浮现出来&…

Windows 11 全新 4K 壁纸发布

微软近日发布 Windows 11 全新主题包 「Pantone Color of the Year 2022」,包含 4 张经重塑的壁纸。微软表示:通过这四张使用 Pantone Color of the Year 2022,,PANTONE 17-3938 Very Peri 颜色,重新定制的 Windows 11 Bloom 壁纸…

CCNA综合实验(一):实验拓扑与要求

一、实验拓扑 屏幕剪辑的捕获时间: 2013/5/5 星期日 16:49 IP地址分配 IP地址为192.168.1.0/24 ,,根据本地网络的需求制定子网划分方案。要求如下: R2(带有WIC-2T模块)上开启环回接口loopback 0 地址为 192.168.X.20;R…

C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用开发过程。…

一个娃娃竟然拍出50万......

1 瞎说什么大实话(素材来源网络,侵删)▼2 这个娃娃50万用来求婚用(素材来源网络,侵删)▼3 当代年轻人的特别祝福▼4 在福字底下加一横(素材来源网络,侵删)▼5 冰激凌…

使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能。细化了很多权限操作。 今天对这一块做个介绍。 要做一个认证管理,大概分为以下5步: 1. 定义你要保护的资源,一般是服务、函数,…

算法分析笔记

2019独角兽企业重金招聘Python工程师标准>>> 定义 定义&#xff1a; 若存在正常数 c 和 n<sub>0</sub> 使得当 N ≥ n<sub>0</sub> 时 T(N) ≤ cf(N)&#xff0c;则记为 T(N) O(f(N))若存在正常数 c 和 n<sub>0</sub> 使得当 …

C++指针详解

C指针详解指针的概念 指针是一个特殊的变量&#xff0c;它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容&#xff1a;指针的类型&#xff0c;指针所指向的类型&#xff0c;指针的值或者叫指针所指向的内存区&#xff0c;还有指针本身所…

数字效率Evernote超效率数字笔记术

文章结束给大家来个程序员笑话&#xff1a;[M] 每日一道理 古人云&#xff1a;“海纳百川&#xff0c;有容乃大。”人世间&#xff0c;不可能没有矛盾和争吵&#xff0c;我们要以磊落的胸怀和宽容的微笑去面对它 。哈伯德也曾说过&#xff1a;“宽恕和受宽恕的难以言喻的快乐&a…

千万别让爸妈帮你P图......

1 如何把外来称呼本土化&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 奇奇怪怪的知识又增加了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 好家伙&#xff01;洪世贤家烛台上插的是火腿肠▼4 妨碍公务的下场&#xff08;素材来源网络&#xff0c…

WPF 不遮挡任务栏最大化和全屏显示

在窗体不去边框的情况下&#xff0c;不遮挡任务栏最大化MainWindow.xaml.csusing System; using System.Windows; using System.Windows.Threading;namespace thzSoftware {/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWi…

看完后震惊!清华“姚班”创始人的老师究竟有多牛?他说孩子最应该培养这几个思维……...

▲ 点击查看相信很多人都挺听说过清华有个“姚班”&#xff0c;致力于培养与美国麻省理工学院等世界一流高校本科生具有同等、甚至更高竞争力的计算机科学人才。“姚班”是我国著名科学家姚期智所创&#xff0c;因此得名“姚班”。姚期智教授是2000年图灵奖得主&#xff0c;也是…

2021,我在枯燥乏味中寻找坚持下去的理由

这是头哥侃码的第248篇原创2021年&#xff0c;因为疫情和工作变更的关系&#xff0c;不仅我的工作方式被彻底改变&#xff08;居家远程办公&#xff09;&#xff0c;而且还在健身房悟出一个心得体会。啥心得&#xff1f;啥体会&#xff1f;那就是觉得人生逐渐变得没有意思。不知…

OM 延交訂單

如訂單扣數後要延交, 請按以下步驟: 1) 先取消要延交的ITEM 的DELIVERY NO. ACTION: Unassign from Dlivery 2) 要重新給DELIVERY NO ACTION: Auto-create Trip 3) 延交訂單item - Ship confirm - 選backorder all - OK 已完成延交, 可重新取move order