如何用Python获取管理员权限删除Windows System32文件?
解决删除Windows System32文件的权限问题
Windows对System32目录有多级保护机制,不是单纯修改文件权限就能突破的,先从代码和权限机制两方面解决你的问题:
一、先清理代码冗余
你的代码嵌套了两层os.walk,还包含无关的浏览器打开操作,先简化为正常遍历版本:
import os from time import sleep home = "C:/Windows/System32" for dirpath, _, filenames in os.walk(home): for filename in filenames: childpath = os.path.join(dirpath, filename) try: os.remove(childpath) print(f"已删除: {childpath}") except PermissionError: print(f"权限拒绝: {childpath}") sleep(1.5) print("\nare you alive?")
二、权限问题的核心解决步骤
1. 必须以管理员身份运行脚本
即使你用的是管理员账户,Windows默认以普通权限启动程序。右键点击Python解释器或你的脚本文件,选择「以管理员身份运行」。
2. 关闭系统文件保护(SFC)
Windows的系统文件保护会自动恢复System32里的关键文件,需要先禁用:
- 管理员身份打开命令提示符,执行:
bcdedit /set {current} recoveryenabled no bcdedit /set {current} bootstatuspolicy ignoreallfailures - 重启虚拟机后,再执行脚本(仅用于测试,真实系统禁止操作)。
3. 处理32位Python的文件重定向
如果你的Python是32位版本,在64位Windows上,访问C:/Windows/System32会被系统自动重定向到C:/Windows/SysWOW64,你实际操作的并非真正的System32。需要关闭重定向:
import ctypes kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) old_value = ctypes.c_long() # 关闭文件系统重定向 kernel32.Wow64DisableWow64FsRedirection(ctypes.byref(old_value)) # 这里放置你的遍历删除代码 # 恢复重定向 kernel32.Wow64RevertWow64FsRedirection(old_value)
4. 修改文件所有者与ACL权限
System32文件的权限设置极为严格,需要先获取文件所有权并添加完全控制权限:
- 先安装
pywin32库:pip install pywin32 - 添加权限处理函数:
import win32security import ntsecuritycon as con def take_file_ownership(path): # 获取当前管理员用户SID current_sid = win32security.GetCurrentUser() # 设置文件所有者为当前用户 win32security.SetNamedSecurityInfo( path, win32security.SE_FILE_OBJECT, win32security.OWNER_SECURITY_INFORMATION, current_sid, None, None, None ) # 添加完全控制权限 dacl = win32security.DACL() dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_ALL_ACCESS, current_sid) win32security.SetNamedSecurityInfo( path, win32security.SE_FILE_OBJECT, win32security.DACL_SECURITY_INFORMATION, None, None, dacl, None ) - 在删除前调用该函数:
take_file_ownership(childpath)
重要提醒
即使在虚拟机中测试,删除System32文件也会直接导致系统崩溃,操作前务必做好虚拟机快照备份。
内容的提问来源于stack exchange,提问作者JacopoBiondi
相关产品推荐
相关产品推荐

