source: vendor/current/python/examples/winreg.py

Last change on this file was 988, checked in by Silvan Scherrer, 9 years ago

Samba Server: update vendor to version 4.4.3

File size: 2.8 KB
Line 
1#!/usr/bin/env python
2#
3# tool to manipulate a remote registry
4# Copyright Andrew Tridgell 2005
5# Copyright Jelmer Vernooij 2007
6# Released under the GNU GPL v3 or later
7#
8
9import sys
10
11# Find right directory when running from source tree
12sys.path.insert(0, "bin/python")
13
14from samba.dcerpc import winreg
15import optparse
16import samba.getopt as options
17
18parser = optparse.OptionParser("%s <BINDING> [path]" % sys.argv[0])
19sambaopts = options.SambaOptions(parser)
20parser.add_option_group(sambaopts)
21parser.add_option("--createkey", type="string", metavar="KEYNAME",
22 help="create a key")
23
24opts, args = parser.parse_args()
25
26if len(args) < 1:
27 parser.print_usage()
28 sys.exit(-1)
29
30binding = args[0]
31
32print "Connecting to " + binding
33conn = winreg.winreg(binding, sambaopts.get_loadparm())
34
35def list_values(key):
36 (num_values, max_valnamelen, max_valbufsize) = conn.QueryInfoKey(key, winreg.String())[4:8]
37 for i in range(num_values):
38 name = winreg.StringBuf()
39 name.size = max_valnamelen
40 (name, type, data, _, data_len) = conn.EnumValue(key, i, name, 0, "", max_valbufsize, 0)
41 print "\ttype=%-30s size=%4d '%s'" % type, len, name
42 if type in (winreg.REG_SZ, winreg.REG_EXPAND_SZ):
43 print "\t\t'%s'" % data
44# if (v.type == reg.REG_MULTI_SZ) {
45# for (j in v.value) {
46# printf("\t\t'%s'\n", v.value[j])
47# }
48# }
49# if (v.type == reg.REG_DWORD || v.type == reg.REG_DWORD_BIG_ENDIAN) {
50# printf("\t\t0x%08x (%d)\n", v.value, v.value)
51# }
52# if (v.type == reg.REG_QWORD) {
53# printf("\t\t0x%llx (%lld)\n", v.value, v.value)
54# }
55
56def list_path(key, path):
57 count = 0
58 (num_subkeys, max_subkeylen, max_subkeysize) = conn.QueryInfoKey(key, winreg.String())[1:4]
59 for i in range(num_subkeys):
60 name = winreg.StringBuf()
61 name.size = max_subkeysize
62 keyclass = winreg.StringBuf()
63 keyclass.size = max_subkeysize
64 (name, _, _) = conn.EnumKey(key, i, name, keyclass=keyclass, last_changed_time=None)[0]
65 subkey = conn.OpenKey(key, name, 0, winreg.KEY_QUERY_VALUE | winreg.KEY_ENUMERATE_SUB_KEYS)
66 count += list_path(subkey, "%s\\%s" % (path, name))
67 list_values(subkey)
68 return count
69
70if len(args) > 1:
71 root = args[1]
72else:
73 root = "HKLM"
74
75if opts.createkey:
76 reg.create_key("HKLM\\SOFTWARE", opt.createkey)
77else:
78 print "Listing registry tree '%s'" % root
79 try:
80 root_key = getattr(conn, "Open%s" % root)(None, winreg.KEY_QUERY_VALUE | winreg.KEY_ENUMERATE_SUB_KEYS)
81 except AttributeError:
82 print "Unknown root key name %s" % root
83 sys.exit(1)
84 count = list_path(root_key, root)
85 if count == 0:
86 print "No entries found"
87 sys.exit(1)
Note: See TracBrowser for help on using the repository browser.