您的位置:首页 > 移动开发 > Android开发

对属性的保护---- 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())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: