最近遇到一个问题,之前运行好好的程序,在最近的daily build版本上无法正常运行,后来发现问题是:

我的程序在SDCard中找文件时找不到,而我shell进去后看到文件明明存在,而程序对该文件却视而不见。折腾了颇久,发现了一个问题:

正常版本上 adb shell mount 后:

/dev/block/vold/179:19 /storage/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

不可使用的版本:

/dev/block/vold/179:19 /storage/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

后来问模块owner才知道:

平台做的改进,禁止具有system权限的进程访问sdcard,防止sdcard unmount时,导致system_server进程发生crash,从而被kill掉。

一听到这个理由后,我真是发飙了,为了解决某个问题而对系统做这么大的改变,真想投诉那家伙。

后来到网上搜了一下,发现很多程序员遇到这个问题。看来谷歌也是这么做的,我还能说什么呢,认命了。

访问SDcard成功的要素:

androidManifest..xml中包含:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

不能包含:    android:sharedUserId="android.uid.system"

如果有system权限又想访问sdcard,怎么办?

android2.2以后修改
修改/system/core/vold/Volume.cpp 文件

Fat::doMount(devicePath, "/mnt/secure/staging", false, false, false, 
                1000, 1015, 0702, true))

修改为:

[html]
Fat::doMount(devicePath, "/mnt/secure/staging", false, false, false, 
                1000, 1015, 0002, true)) 
参数含义:
1000代表的是uid,即sytem
1015代表的是gid,
0002:是对权限的掩码
0002:表示 system: rwx-rwxr-x,此时system有读写执行权限
如果system不需要写权限可以将0002改为
0202: 表示 r-xrwxr-x。
默认的0702代表 ---rwxr-x

然后将vold重新编译一下,用adb push 命令push到 /system/bin/目录下。重新启动一下机器就OK了。

对于android 2.1以下:
可以
修改/system/core/vold/volmgr_vfat.c

[html]
rc = mount(devpath, vol->mount_point, "vfat", flags,"utf8,uid=1000,gid=1000,fmask=711,dmask=700,shortname=mixed");

改为

[html]
rc = mount(devpath, vol->mount_point, "vfat", flags,"utf8,uid=1000,gid=1000,fmask=0,dmask=0,shortname=mixed"); 
 这里的dmask和fmask和上面的作用类似。通过改写711和700可以配置出不同的权限。

具有system权限的进程无法访问sdcard相关推荐

  1. 如何在SYSTEM权限下实现屏幕监控

    屏幕监控是远控软件的基本功能之一. 版权声明 作者:iprowq 现在很多远控程序的服务端通常为DLL形式,通过远程线程注入等方法插入到services.svchost等SYSTEM权限的进程中去,而 ...

  2. 获取本地System权限

    作为C++方面的第一片文章,就先说说获取权限方面的东西吧!首先是获取DeBug权限(它是做其他进一步工作的基础),想必大家对这个方法应该很熟悉吧,网上有关这个的文章已经很多了,所以我就直接贴代码了! ...

  3. win10_x64下shellcode提权工具(SYSTEM权限)

    之前写过一篇远线程注入与一篇shellcode编写的文章: Win10_X64远线程注入dll(非CreateRemoteThread) Windows 10_X64环境shellcode编写 上一次 ...

  4. 后台服务显示右下角弹窗 -- system权限创建用户权限进程

    windows编程的人都知道,在其操作系统下,进程被创建,通常被赋予很多属性,其中一项属性就是用户名,及进程所属的权限.打开任务管理器,可查看到(查看不到,点击查看,选择列即可) 通常桌面系统expl ...

  5. system 权限程序不能访问sd卡问题

    在android中有system权限的应用是无法访问sd卡的,这是因为vold在挂接sd卡指定mask的原因,估计是出于安全原因.如果你有android的源代码,可以去除这个限制: 对于android ...

  6. 简单使用系统System(超级管理员)权限运行进程-提权

    获得这个权限,有很多办法: 创建服务,服务本身以System权限运行(这应该也是PsExec的方法) 偷梁换柱,对一些系统程序进行替换,比如将屏幕键盘osk或者放大镜换成cmd,在Alt+Ctrl+D ...

  7. 【报错】python删除图片遇到权限问题:[WinError 32] 另一个程序正在使用此文件,进程无法访问。

    问题: 报错:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问. 修改前代码: img = Image.open(file) if img.size ...

  8. Windows服务器SYSTEM权限Webshell无法添加3389账户情况突破总结

    转自:http://bbs.blackbap.org/thread-2331-1-1.html 近好多Silic的朋友在Windows下SYSTEM权限的php webshell下添加账户,但是却无法 ...

  9. win7系统怎么获取system权限?

    日常使用系统中,经常有一些像恶意顽固程序及无法删除文件.需要高权限操作.丢失密码.要求最高私密性的问题.在本文中,将教你如何使用Windows 7最高权限账户system,解决各位TX的所有此类问题! ...

  10. 奇特的Local System权限(转载)

    转载自:http://mp.weixin.qq.com/s?__biz=MzA3NTM1MzE4Nw==&mid=202597764&idx=1&sn=0cef1a40fb3c ...

最新文章

  1. springmvc学习笔记--Interceptor机制和实践
  2. stm32f030cc 替换 stm32f030c8 后程序下载失败问题
  3. unrecognized font family iconfont2
  4. 利用套接字实现 CS 模型
  5. js压缩图片_Web 性能优化: 图片优化让网站大小减少 62%
  6. 人月神话:微软开发模式和原则[转]
  7. 2018年AI如何发展?普华永道做出了8点预测 | 报告下载
  8. Fixcel电子表格——报表模块(二)
  9. JavaScript小技巧总结
  10. 任务21 :了解ASP.NET Core 依赖注入,看这篇就够了
  11. 【转】Java工程师成神之路
  12. MATLAB 非对称矩阵求逆
  13. python怎样下载numpy_python下载numpy的方法是什么
  14. win10共享打印机搜索不到计算机,Win10系统搜不到共享打印机的解决方法
  15. 包无法更新、相关性或冲突验证解决方案
  16. DeFCN debug记录(训练过程),以及对cvpods框架的分析
  17. 为什么需要Secondary Index
  18. Retrofit 2简单使用教程
  19. 从时间管理到管理情绪,这些自我管理的技巧你知道几个?
  20. 网络重置最详细解决方法

热门文章

  1. c# owc11 双Y轴
  2. java—mediator中介模式
  3. Azure实践之通过automation管理资产
  4. 开发环境、生产环境、测试环境的基本理解和区别
  5. 衰退的爱立信,进击的华为
  6. android textview 设置单行最大宽度和ellipsize省略号时整体变短的问题
  7. 如何将PDF转换成Word
  8. 分布式缓存MemcacheHelper
  9. cactiez的monitor主机名乱码
  10. Idea中找不到Java Application 的xml配置文件问题研究