72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
import os
|
|
|
|
import ntsecuritycon
|
|
import win32api
|
|
import win32con
|
|
import win32security
|
|
import winnt
|
|
|
|
temp_dir = win32api.GetTempPath()
|
|
fname = win32api.GetTempFileName(temp_dir, "rsk")[0]
|
|
print(fname)
|
|
## file can't exist
|
|
os.remove(fname)
|
|
|
|
## enable backup and restore privs
|
|
required_privs = (
|
|
(
|
|
win32security.LookupPrivilegeValue("", ntsecuritycon.SE_BACKUP_NAME),
|
|
win32con.SE_PRIVILEGE_ENABLED,
|
|
),
|
|
(
|
|
win32security.LookupPrivilegeValue("", ntsecuritycon.SE_RESTORE_NAME),
|
|
win32con.SE_PRIVILEGE_ENABLED,
|
|
),
|
|
)
|
|
ph = win32api.GetCurrentProcess()
|
|
th = win32security.OpenProcessToken(
|
|
ph, win32con.TOKEN_READ | win32con.TOKEN_ADJUST_PRIVILEGES
|
|
)
|
|
adjusted_privs = win32security.AdjustTokenPrivileges(th, 0, required_privs)
|
|
|
|
try:
|
|
sa = win32security.SECURITY_ATTRIBUTES()
|
|
my_sid = win32security.GetTokenInformation(th, ntsecuritycon.TokenUser)[0]
|
|
sa.SECURITY_DESCRIPTOR.SetSecurityDescriptorOwner(my_sid, 0)
|
|
|
|
k, disp = win32api.RegCreateKeyEx(
|
|
win32con.HKEY_CURRENT_USER,
|
|
"Python test key",
|
|
SecurityAttributes=sa,
|
|
samDesired=win32con.KEY_ALL_ACCESS,
|
|
Class="some class",
|
|
Options=0,
|
|
)
|
|
win32api.RegSetValue(k, None, win32con.REG_SZ, "Default value for python test key")
|
|
|
|
subk, disp = win32api.RegCreateKeyEx(
|
|
k,
|
|
"python test subkey",
|
|
SecurityAttributes=sa,
|
|
samDesired=win32con.KEY_ALL_ACCESS,
|
|
Class="some other class",
|
|
Options=0,
|
|
)
|
|
win32api.RegSetValue(subk, None, win32con.REG_SZ, "Default value for subkey")
|
|
|
|
win32api.RegSaveKeyEx(
|
|
k, fname, Flags=winnt.REG_STANDARD_FORMAT, SecurityAttributes=sa
|
|
)
|
|
|
|
restored_key, disp = win32api.RegCreateKeyEx(
|
|
win32con.HKEY_CURRENT_USER,
|
|
"Python test key(restored)",
|
|
SecurityAttributes=sa,
|
|
samDesired=win32con.KEY_ALL_ACCESS,
|
|
Class="restored class",
|
|
Options=0,
|
|
)
|
|
win32api.RegRestoreKey(restored_key, fname)
|
|
finally:
|
|
win32security.AdjustTokenPrivileges(th, 0, adjusted_privs)
|