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