From 60eb9f87a0a0c96cf67a33516b34ea8cd14dd5e9 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 23 Aug 2005 02:00:09 +0000 Subject: r9497: - converted the winreg library to a more OO style of interface - added a reg.typestring() method that returns a string representation of a type (This used to be commit 47cf409cdf501fc3e2b0c65688a9ef1d702278a5) --- source4/scripting/bin/winreg | 25 ++++++++--- source4/scripting/libjs/winreg.js | 93 ++++++++++++++++++++++++++------------- 2 files changed, 83 insertions(+), 35 deletions(-) (limited to 'source4/scripting') diff --git a/source4/scripting/bin/winreg b/source4/scripting/bin/winreg index 7656c8a441..7845f1034c 100755 --- a/source4/scripting/bin/winreg +++ b/source4/scripting/bin/winreg @@ -23,8 +23,7 @@ if (options.ARGV.length < 1) { return -1; } var binding = options.ARGV[0]; -reg = winreg_init(); -security_init(reg); +reg = winregObj(); print("Connecting to " + binding + "\n"); status = reg.connect(binding); @@ -34,18 +33,34 @@ if (status.is_ok != true) { } function list_values(path) { - var list = winreg_enum_values(reg, path); + var list = reg.enum_values(path); var i; if (list == undefined) { return; } for (i=0;i= 0;idx++) { io.input.enum_index = idx; - var status = reg.winreg_EnumKey(io); + var status = this.winreg_EnumKey(io); if (!status.is_ok) { - winreg_close(reg, handle); + this.close(handle); return list; } var out = io.output; @@ -145,20 +145,20 @@ function winreg_enum_path(reg, path) io.input.name.size = io.input.name.size * 2; idx--; if (io.input.name.size > 32000) { - winreg_close(reg, handle); + this.close(handle); return list; } continue; } if (out.result != "WERR_OK") { - winreg_close(reg, handle); + this.close(handle); return list; } list[list.length] = out.name.name; list.length++; } - winreg_close(reg, handle); + this.close(handle); return list; } @@ -166,17 +166,18 @@ function winreg_enum_path(reg, path) /* return a list of values for a winreg server given a path usage: - list = winreg_enum_values(reg, path); + list = reg.enum_values(path); each returned list element is an object containing a name, a type and a value */ -function winreg_enum_values(reg, path) +function __winreg_enum_values(path) { + var data = datablob_init(); var list = new Object(); list.length = 0; - var handle = winreg_open_path(reg, path); + var handle = this.open_path(path); if (handle == undefined) { return undefined; } @@ -195,9 +196,9 @@ function winreg_enum_values(reg, path) var idx; for (idx=0;idx >= 0;idx++) { io.input.enum_index = idx; - var status = reg.winreg_EnumValue(io); + var status = this.winreg_EnumValue(io); if (!status.is_ok) { - winreg_close(reg, handle); + this.close(handle); return list; } var out = io.output; @@ -207,24 +208,56 @@ function winreg_enum_values(reg, path) idx--; /* limit blobs to 1M */ if (io.input.size > 1000000) { - winreg_close(reg, handle); + this.close(handle); return list; } continue; } if (out.result != "WERR_OK") { - winreg_close(reg, handle); + this.close(handle); return list; } var el = new Object(); el.name = out.name.name; el.type = out.type; - el.value = out.value; + el.rawvalue = out.value; + el.value = data.regToVar(el.rawvalue, el.type); el.size = out.size; list[list.length] = el; list.length++; } - winreg_close(reg, handle); + this.close(handle); return list; } + +/* + return a string for a winreg type +*/ +function __winreg_typestring(type) +{ + return this.typenames[type]; +} + +/* + initialise the winreg lib, returning an object +*/ +function winregObj() +{ + var reg = winreg_init(); + security_init(reg); + + reg.typenames = new Array("REG_NONE", "REG_SZ", "REG_EXPAND_SZ", "REG_BINARY", + "REG_DWORD", "REG_DWORD_BIG_ENDIAN", "REG_LINK", "REG_MULTI_SZ", + "REG_RESOURCE_LIST", "REG_FULL_RESOURCE_DESCRIPTOR", + "REG_RESOURCE_REQUIREMENTS_LIST", "REG_QWORD"); + + reg.close = __winreg_close; + reg.open_hive = __winreg_open_hive; + reg.open_path = __winreg_open_path; + reg.enum_path = __winreg_enum_path; + reg.enum_values = __winreg_enum_values; + reg.typestring = __winreg_typestring; + + return reg; +} -- cgit