对属性的保护---- SEAndroid in Android5.x
2015-12-16 11:17
405 查看
一. 属性内存区域的创建和初始化
属性内存区域是由init进程在启动的过程中创建和初始化。创建和初始化完成之后,其它进程可以将这块属性内存区域以只读的方式映射到自己的地址空间去,这样其它进程就可以直接从自己的地址空间读出属性值。另一方面,如果其它进程需要增加或者修改属性的值,那么就必须要通过init进程来进行。Init进程在启动的时候,会创建一个属性管理服务。这个属性管理服务会创建一个Server端Socket,用来接收其它进程发送过来的增加或者修改属性的请求。
查看system/core/init/init.c中的main函数:
int main(int argc, char **argv)
{
........
property_init();
........
property_load_boot_defaults();
........
queue_builtin_action(property_service_init_action,"property_service_init");
........
queue_builtin_action(queue_property_triggers_action,"queue_property_triggers");
for(;;){
........
execute_one_command();
........
if (!property_set_fd_init && get_property_set_fd() > 0){
ufds[fd_count].fd = get_property_set_fd();
ufds[fd_count].events = POLLIN;
ufds[fd_count].revents = 0;
fd_count++;
property_set_fd_init = 1;
}
........
nr = poll(ufds, fd_count, timeout);
........
for (i = 0; i < fd_count; i++) {
if (ufds[i].revents & POLLIN) {
if (ufds[i].fd == get_property_set_fd())
handle_property_set_fd();
else if (ufds[i].fd == get_keychord_fd())
属性内存区域是由init进程在启动的过程中创建和初始化。创建和初始化完成之后,其它进程可以将这块属性内存区域以只读的方式映射到自己的地址空间去,这样其它进程就可以直接从自己的地址空间读出属性值。另一方面,如果其它进程需要增加或者修改属性的值,那么就必须要通过init进程来进行。Init进程在启动的时候,会创建一个属性管理服务。这个属性管理服务会创建一个Server端Socket,用来接收其它进程发送过来的增加或者修改属性的请求。
查看system/core/init/init.c中的main函数:
int main(int argc, char **argv)
{
........
property_init();
........
property_load_boot_defaults();
........
queue_builtin_action(property_service_init_action,"property_service_init");
........
queue_builtin_action(queue_property_triggers_action,"queue_property_triggers");
for(;;){
........
execute_one_command();
........
if (!property_set_fd_init && get_property_set_fd() > 0){
ufds[fd_count].fd = get_property_set_fd();
ufds[fd_count].events = POLLIN;
ufds[fd_count].revents = 0;
fd_count++;
property_set_fd_init = 1;
}
........
nr = poll(ufds, fd_count, timeout);
........
for (i = 0; i < fd_count; i++) {
if (ufds[i].revents & POLLIN) {
if (ufds[i].fd == get_property_set_fd())
handle_property_set_fd();
else if (ufds[i].fd == get_keychord_fd())
相关文章推荐
- Android录音MediaRecord
- Android的ViewFlipper与GestureDetector
- android bug report tools
- Android LayoutInflater详解
- android 里面对图片的不同压缩处理 以及简单拍照功能实现加设置闪光灯效果
- Android studio项目发布到Maven中央库
- 【转】Android点击空白区域,隐藏输入法软键盘
- Ubuntu:Android编译环境设置和编译
- Android初识-菜单的用法
- android 自定义对话框
- android studio 代码混淆如何忽略第三方jar包
- zhu的工作日记:图片三级缓存的工具类(android)
- 关于常量,枚举和注解
- Android对齐属性大全
- Android 屏幕适配方案
- Android - 文件读写操作 总结
- 详解Android中IntentService的使用方法
- (Bitmap OOM) BitmapFactory.nativeDecodeStream
- Android项目使用support v7时遇到的问题
- Android编程之在SD卡上进行文件读写操作实例详解