diff options
-rwxr-xr-x | source4/scripting/bin/winreg | 18 | ||||
-rw-r--r-- | source4/scripting/libjs/winreg.js | 47 |
2 files changed, 56 insertions, 9 deletions
diff --git a/source4/scripting/bin/winreg b/source4/scripting/bin/winreg index 7845f1034c5..12f40f11555 100755 --- a/source4/scripting/bin/winreg +++ b/source4/scripting/bin/winreg @@ -12,7 +12,8 @@ libinclude("winreg.js"); var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", - "POPT_COMMON_CREDENTIALS"); + "POPT_COMMON_CREDENTIALS", + "createkey=s"); if (options == undefined) { println("Failed to parse options"); return -1; @@ -61,6 +62,10 @@ function list_values(path) { function list_path(path) { var list = reg.enum_path(path); + if (list == undefined) { + println("Unable to list " + path); + return; + } var i; list_values(path); for (i=0;i<list.length;i++) { @@ -83,6 +88,13 @@ if (options.ARGV.length > 1) { root = ''; } -printf("Listing registry tree '%s'\n", root); -list_path(root); +if (options.createkey) { + var ok = reg.create_key("HKLM\\SOFTWARE", options.createkey); + if (!ok) { + + } +} else { + printf("Listing registry tree '%s'\n", root); + list_path(root); +} return 0; diff --git a/source4/scripting/libjs/winreg.js b/source4/scripting/libjs/winreg.js index 1e9dbcbb523..adcefcae85b 100644 --- a/source4/scripting/libjs/winreg.js +++ b/source4/scripting/libjs/winreg.js @@ -35,7 +35,7 @@ function __winreg_open_hive(hive) } else if (hive == "HKU") { status = this.winreg_OpenHKU(io); } else { - println("Unknown hive " + hive); + this._last_error = "Unknown hive " + hive; return undefined; } if (!status.is_ok) { @@ -231,6 +231,40 @@ function __winreg_enum_values(path) return list; } + +/* + create a new key + ok = reg.create_key(path, key); +*/ +function __winreg_create_key(path, key) +{ + var handle = this.open_path(path); + if (handle == undefined) { + return undefined; + } + + var io = irpcObj(); + io.input.handle = handle; + io.input.name = key; + io.input.class = NULL; + io.input.options = 0; + io.input.access_required = this.SEC_FLAG_MAXIMUM_ALLOWED; + io.input.secdesc = NULL; + io.input.action_taken = 0; + + var status = this.winreg_CreateKey(io); + this.close(handle); + if (!status.is_ok) { + return false; + } + if (io.output.result != "WERR_OK") { + return false; + } + this.close(io.output.new_handle); + return true; +} + + /* return a string for a winreg type */ @@ -252,12 +286,13 @@ function winregObj() "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.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; + reg.create_key = __winreg_create_key; + reg.typestring = __winreg_typestring; return reg; } |