Scanning through Windows registry...

Tim Golden mail at timgolden.me.uk
Wed May 7 10:19:31 EDT 2008


Mike Driscoll wrote:
> On May 7, 4:45 am, Tim Golden <m... at timgolden.me.uk> wrote:
>> In a spirit of being helpful... :)

[... snip registry walker ...]

> This is pretty cool stuff, Tim. Of course, it would also seriously
> screw up some programs if you decided to replace the wrong phrase.
> Just a word of warning to the OP: be sure to make a backup of the
> registry before doing something like this. Trying to fix a messed up
> registry from the command line is not a fun way to spend the
> afternoon.

Good point, Mike. In a spirit of being even more helpful... the _winreg
module includes the functions SaveKey and LoadKey so as a crude
backup mechanism, you could do this:

<code snippet>
import time
import _winreg
import win32api
import win32security

#
# You need to have SeBackupPrivilege enabled for this to work
#
priv_flags = win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY
hToken = win32security.OpenProcessToken (win32api.GetCurrentProcess (), priv_flags)
privilege_id = win32security.LookupPrivilegeValue (None, "SeBackupPrivilege")
win32security.AdjustTokenPrivileges (hToken, 0, [(privilege_id, win32security.SE_PRIVILEGE_ENABLED)])

root = _winreg.OpenKey (_winreg.HKEY_LOCAL_MACHINE, r"Software\Python\TEST")
#
# This will fail if the file already exists so make it uniqueish
#
_winreg.SaveKey (root, "c:/temp/HKLM_Software_Python-%s.reg" %  time.strftime ("%Y%m%d-%H%M%S"))

</code snippet>

Note that the file which this creates is *not* the same as a .reg file which the File > Export menu
option provides from within the registry editor. (In fact, I shouldn't really have called it .reg; call
it something else). It can be reloaded by the _winreg.LoadKey function -- which I notice is incorrectly 
named RegLoadKey in the docs after the underlying API call. The docs note that SeRestorePrivilege is 
required for this action, the counterpart to SeBackupPrivilege.

TJG




More information about the Python-list mailing list