众所周知,win7下经常有权限问题,弹出无法操作的框,后来就有人做了“管理员取得所有权.reg”解决权限问题,每次遇到操作不了的文件,就右键来“夺个权”。但每个用户都有一个sid,重装系统后sid变更了,又要重新“夺个权”。最近换了Win10,连“夺权”都夺不了了。
首先,在一些目录用记事本编辑,编辑完保存不了,弹一个“拒绝访问”,网上给出的答案居然说存到桌面上,再复制回来。也是太麻烦。就算取得了管理员权限还是不能覆写。
其次,WinRAR完全处于瘫痪的程度,想解压,弹出一个“系统找不到指定的路径”,想打压缩包,又弹一个“拒绝访问”。网络上的解答是,解压到桌面去,再复制回来。桌面简直成万能中转站了啊!这种问题不解决我简直要疯掉。
我首先的思路是,“管理员取得所有权.reg”实质上是把所有权赋给了Administrators组,用户也在管理员组下面,这样每次操作文件,应用要有管理员权限,再进行操作。WinRAR是外来户,没有权限操作不了可以理解,Notepad是微软你的亲儿子啊,虎毒还不食子呢,连Notepad要保存文件都不让,什么爹啊。
之后我给文件夹右键-属性-安全-编辑-everyone-完全控制,保存。之后就可以正常操作了,想干嘛干嘛。但总不能让我每个文件夹都这么来一通。剖开“管理员取得所有权.reg”看看能动什么手脚。原版的长这样:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\*\shell\runas]
[HKEY_CLASSES_ROOT\*\shell\runas]
@="管理员取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
[-HKEY_CLASSES_ROOT\Directory\shell\runas]
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="管理员取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
[-HKEY_CLASSES_ROOT\dllfile\shell]
[HKEY_CLASSES_ROOT\dllfile\shell\runas]
@="管理员取得所有权"
"HasLUAShield"=""
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\dllfile\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
[-HKEY_CLASSES_ROOT\Drive\shell\runas]
[HKEY_CLASSES_ROOT\Drive\shell\runas]
@="管理员取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Drive\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
看来是利用takeown和icacls命令来提权,把里面所有的administrators全部换成everyone,再在每句后面加个 & pause来个暂停,以免每次一闪而过都看不清成功没有。利用条件判断加字符检测应该可以做到成功了不暂停,失败才暂停,不过懒得研究了。得到“everyone取得所有权.reg”:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\*\shell\runas]
[HKEY_CLASSES_ROOT\*\shell\runas]
@="everyone取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant everyone:F & pause"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant everyone:F & pause"
[-HKEY_CLASSES_ROOT\Directory\shell\runas]
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="everyone取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant everyone:F /t & pause"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant everyone:F /t & pause"
[-HKEY_CLASSES_ROOT\dllfile\shell]
[HKEY_CLASSES_ROOT\dllfile\shell\runas]
@="everyone取得所有权"
"HasLUAShield"=""
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\dllfile\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant everyone:F & pause"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant everyone:F & pause"
[-HKEY_CLASSES_ROOT\Drive\shell\runas]
[HKEY_CLASSES_ROOT\Drive\shell\runas]
@="everyone取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Drive\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant everyone:F /t & pause"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant everyone:F /t & pause"
运行。完美!现在想怎么整怎么整了。
这样搞也有一个弊端,之前每操作一个文件就要弹个框,现在不弹框了可能影响到了文件的安全性,但也懒得管了,之前那种情况就应该给用户弹个框“要不要修改文件?”,而不是干脆来个“拒绝访问”。应该是我对windows的权限管理理解不够吧。总之现在这么搞了就一劳永逸了,文件所有者变成了everyone,这样就算以后重装系统也不用再来“夺个权”了。
更新:
用了一会儿,我发现上面的批处理还是用不了。右键看属性,文件夹上面的everyone里面没有“完全控制”,点开详情,看到everyone的属性上有个“此文件夹”,而没有对文件夹下面的文件生效。详细阅读了icacls的说明,也没找到怎么改。
转机在cacls上面。改用cacls命令:
cacls c:\a.txt /E /G everyone:F
bingo! 生效了。实践发现,不加/E的话会出现一行字让选择Y或N。/G的意思是指定用户和权限。
对于文件夹,还要在最后加个/T以对文件夹下面的文件生效,/T只能加在最后。
改动后命令长这样:
cmd.exe /c takeown /f \"%1\" && cacls \"%1\" /E /G everyone:F & pause
然后保存“Everyone取得所有权.reg”,运行。还是不奏效。是不是前面的takeown捣的鬼?
去掉takeown。终于成功。
最终得到的“Everyone取得所有权.reg”如下:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\*\shell\runas]
[HKEY_CLASSES_ROOT\*\shell\runas]
@="Everyone取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c cacls \"%1\" /E /G everyone:F & pause"
"IsolatedCommand"="cmd.exe /c cacls \"%1\" /E /G everyone:F & pause"
[-HKEY_CLASSES_ROOT\Directory\shell\runas]
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="Everyone取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c cacls \"%1\" /E /G everyone:F /T & pause"
"IsolatedCommand"="cmd.exe /c cacls \"%1\" /E /G everyone:F /T & pause"
[-HKEY_CLASSES_ROOT\dllfile\shell]
[HKEY_CLASSES_ROOT\dllfile\shell\runas]
@="Everyone取得所有权"
"HasLUAShield"=""
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\dllfile\shell\runas\command]
@="cmd.exe /c cacls \"%1\" /E /G everyone:F & pause"
"IsolatedCommand"="cmd.exe /c cacls \"%1\" /E /G everyone:F & pause"
[-HKEY_CLASSES_ROOT\Drive\shell\runas]
[HKEY_CLASSES_ROOT\Drive\shell\runas]
@="Everyone取得所有权"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Drive\shell\runas\command]
@="cmd.exe /c cacls \"%1\" /E /G everyone:F /T & pause"
"IsolatedCommand"="cmd.exe /c cacls \"%1\" /E /G everyone:F /T & pause"