svn commit: samba r9159 - in
branches/SAMBA_4_0/source/scripting/libjs: .
tridge at samba.org
tridge at samba.org
Sat Aug 6 01:09:28 GMT 2005
Author: tridge
Date: 2005-08-06 01:09:27 +0000 (Sat, 06 Aug 2005)
New Revision: 9159
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9159
Log:
abstract the winreg js functions into a nice library interface
Added:
branches/SAMBA_4_0/source/scripting/libjs/winreg.js
Changeset:
Added: branches/SAMBA_4_0/source/scripting/libjs/winreg.js
===================================================================
--- branches/SAMBA_4_0/source/scripting/libjs/winreg.js 2005-08-06 01:08:31 UTC (rev 9158)
+++ branches/SAMBA_4_0/source/scripting/libjs/winreg.js 2005-08-06 01:09:27 UTC (rev 9159)
@@ -0,0 +1,115 @@
+/*
+ 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;
+
+ var handle = winreg_open_hive(reg, components[0]);
+ if (handle == undefined) {
+ return undefined;
+ }
+
+ for (i=1;i<components.length;i++) {
+ io = irpcObj();
+ io.input.handle = handle;
+ io.input.keyname = components[i];
+ io.input.unknown = 0;
+ io.input.access_mask = reg.SEC_FLAG_MAXIMUM_ALLOWED;
+ var status = reg.winreg_OpenKey(io);
+ if (!status.is_ok) {
+ return undefined;
+ }
+ if (io.output.result != "WERR_OK") {
+ return undefined;
+ }
+
+ handle = io.output.handle;
+ }
+ return handle;
+}
+
+/*
+ return a list of keys for a winreg server given a path
+ usage:
+ list = winreg_enum_path(reg, path);
+*/
+function winreg_enum_path(reg, path)
+{
+ var list = new Object();
+ list.length = 0;
+
+ handle = winreg_open_path(reg, path);
+ if (handle == undefined) {
+ return undefined;
+ }
+
+ var io = irpcObj();
+ var wtime = new Object();
+ wtime.low = 2147483647;
+ wtime.high = 2147483647;
+ var keyname = new Object();
+ keyname.unknown = 522;
+ keyname.key_name = NULL;
+
+ io.input.handle = handle;
+ io.input.key_name_len = 0;
+ io.input.unknown = 1044;
+ io.input.in_name = keyname;
+ io.input.class = "";
+ io.input.last_changed_time = wtime;
+
+ var idx = 0;
+ for (idx=0;idx >= 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;
+}
More information about the samba-cvs
mailing list