Win10下WinRAR“拒绝访问”解决+获取everyone权限

众所周知,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"

你可能感兴趣的:(批处理)