You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:51:04