2 winreg rpc utility functions
3 Copyright Andrew Tridgell 2005
4 released under the GNU GPL v2 or later
11 function winreg_open_hive(reg, hive)
14 io.input.system_name = NULL;
15 io.input.access_required = reg.SEC_FLAG_MAXIMUM_ALLOWED;
18 status = reg.winreg_OpenHKLM(io);
19 } else if (hive == "HKCR") {
20 status = reg.winreg_OpenHKCR(io);
21 } else if (hive == "HKPD") {
22 status = reg.winreg_OpenHKPD(io);
23 } else if (hive == "HKU") {
24 status = reg.winreg_OpenHKU(io);
26 println("Unknown hive " + hive);
32 return io.output.handle;
36 open a handle to a path
38 function winreg_open_path(reg, path)
40 var s = string_init();
41 var i, components = s.split('\\', path);
42 var list = new Object();
46 var handle = winreg_open_hive(reg, components[0]);
47 if (handle == undefined) {
51 for (i=1;i<components.length;i++) {
53 io.input.handle = handle;
54 io.input.keyname = components[i];
56 io.input.access_mask = reg.SEC_FLAG_MAXIMUM_ALLOWED;
57 var status = reg.winreg_OpenKey(io);
61 if (io.output.result != "WERR_OK") {
65 handle = io.output.handle;
71 return a list of keys for a winreg server given a path
73 list = winreg_enum_path(reg, path);
75 function winreg_enum_path(reg, path)
77 var list = new Object();
80 handle = winreg_open_path(reg, path);
81 if (handle == undefined) {
86 var wtime = new Object();
87 wtime.low = 2147483647;
88 wtime.high = 2147483647;
89 var keyname = new Object();
90 keyname.unknown = 522;
91 keyname.key_name = NULL;
93 io.input.handle = handle;
94 io.input.key_name_len = 0;
95 io.input.unknown = 1044;
96 io.input.in_name = keyname;
98 io.input.last_changed_time = wtime;
101 for (idx=0;idx >= 0;idx++) {
102 io.input.enum_index = idx;
103 var status = reg.winreg_EnumKey(io);
104 if (!status.is_ok) return;
106 if (out.result != "WERR_OK") {
110 list[list.length] = out.out_name.name;