/* winreg rpc utility functions Copyright Andrew Tridgell 2005 released under the GNU GPL v2 or later */ /* open a hive */ function winreg_open_hive(reg, hive) { var io = irpcObj(); io.input.system_name = NULL; io.input.access_required = reg.SEC_FLAG_MAXIMUM_ALLOWED; var status; if (hive == "HKLM") { status = reg.winreg_OpenHKLM(io); } else if (hive == "HKCR") { status = reg.winreg_OpenHKCR(io); } else if (hive == "HKPD") { status = reg.winreg_OpenHKPD(io); } else if (hive == "HKU") { status = reg.winreg_OpenHKU(io); } else { println("Unknown hive " + hive); return undefined; } if (!status.is_ok) { return undefined; } return io.output.handle; } /* open a handle to a path */ function winreg_open_path(reg, path) { var s = string_init(); var i, components = s.split('\\', path); var list = new Object(); list.length = 0; /* cope with a leading slash */ if (components[0] == '') { for (i=0;i<(components.length-1);i++) { components[i] = components[i+1]; } components.length--; } if (components.length == 0) { return undefined; } var handle = winreg_open_hive(reg, components[0]); if (handle == undefined) { return undefined; } if (components.length == 1) { return handle; } var hpath = components[1]; for (i=2;i= 0;idx++) { io.input.enum_index = idx; var status = reg.winreg_EnumKey(io); if (!status.is_ok) return; var out = io.output; if (out.result != "WERR_OK") { return list; } list[list.length] = out.out_name.name; list.length++; } return list; }