Jump to content

Recommended Posts

Posted (edited)

Cause

RegRead on which RegKeyExists is based requires a final backslash in the key name or it won't work.

Solution #1

Have the RegKeyExists retry a failed check with an additional final backslash:

In registry_dos.js replace

function RegKeyExists(KeyBase)
{
position="registry_dos.js";
whatfunc="RegKeyExists()";

try
{
WshShell.RegRead(KeyBase);

return true;
}
catch(ex)
{
return false;
}
}

with

function RegKeyExists(KeyBase)
{
position="registry_dos.js";
whatfunc="RegKeyExists()";

try
{
WshShell.RegRead(KeyBase);

return true;
}
catch(ex)
{
try {
WshShell.RegRead(KeyBase + '\\');
return true;
}
catch(ex)
{
return false;
}
}
}

Problems of Solution #1

Windows registry allows keys and values with same names so the new function won't allow to check for a specific type of registry entry.

Solution #2

Force the RegKeyExists function to check only for keys and implement an additional RegValueExists function to deal with registry values.

In registry_dos.js replace

function RegKeyExists(KeyBase)
{
position="registry_dos.js";
whatfunc="RegKeyExists()";

try
{
WshShell.RegRead(KeyBase);

return true;
}
catch(ex)
{
return false;
}
}

with

function RegKeyExists(KeyBase)
{
position="registry_dos.js";
whatfunc="RegKeyExists()";

try
{
WshShell.RegRead(KeyBase + '\\');

return true;
}
catch(ex)
{
return false;
}
}

function RegValueExists(ValueBase)
{
position="registry_dos.js";
whatfunc="RegValueExists()";

try
{
WshShell.RegRead(ValueBase);

return true;
}
catch(ex)
{
return false;
}
}

In configwizard.js replace

		ConditionsMenuBar.addNewChild("cond_registry", 0, "registry_RegKeyExists", "RegKeyExists()", false, "", "");
ConditionsMenuBar.addNewChild("cond_registry", 1, "registry_RegKeyValue", "RegKeyValue()", false, "", "");

with

		ConditionsMenuBar.addNewChild("cond_registry", 0, "registry_RegKeyExists", "RegKeyExists()", false, "", "");
ConditionsMenuBar.addNewChild("cond_registry", 1, "registry_RegValueExists", "RegValueExists()", false, "", "");
ConditionsMenuBar.addNewChild("cond_registry", 2, "registry_RegKeyValue", "RegKeyValue()", false, "", "");

then replace

		GrayedConditionsMenuBar.addNewChild("gcond_registry", 0, "registry_RegKeyExists", "RegKeyExists()", false, "", "");
GrayedConditionsMenuBar.addNewChild("gcond_registry", 1, "registry_RegKeyValue", "RegKeyValue()", false, "", "");

with

		GrayedConditionsMenuBar.addNewChild("gcond_registry", 0, "registry_RegKeyExists", "RegKeyExists()", false, "", "");
GrayedConditionsMenuBar.addNewChild("gcond_registry", 1, "registry_RegValueExists", "RegValueExists()", false, "", "");
GrayedConditionsMenuBar.addNewChild("gcond_registry", 2, "registry_RegKeyValue", "RegKeyValue()", false, "", "");

and replace

		case 'registry_RegKeyExists':
HandleConditionsSelectionMenu(!InsertCondValues ? "RegKeyExists()" : 'RegKeyExists("HKEY_CURRENT_USER\\Software\\WPI\\Theme")');
break;

with

		case 'registry_RegKeyExists':
HandleConditionsSelectionMenu(!InsertCondValues ? "RegKeyExists()" : 'RegKeyExists("HKEY_CURRENT_USER\\Software\\WPI")');
break;

case 'registry_RegValueExists':
HandleConditionsSelectionMenu(!InsertCondValues ? "RegValueExists()" : 'RegValueExists("HKEY_CURRENT_USER\\Software\\WPI\\Theme")');
break;

In core.js replace

if (RegKeyExists("HKEY_CURRENT_USER\\Software\\WPI\\DisableScriptDebuggerIE"))

with

if (RegValueExists("HKEY_CURRENT_USER\\Software\\WPI\\DisableScriptDebuggerIE"))

and

if (RegKeyExists("HKEY_CURRENT_USER\\Software\\WPI\\Disable Script Debugger"))

with

if (RegValueExists("HKEY_CURRENT_USER\\Software\\WPI\\Disable Script Debugger"))

In informations.js replace

ConditionsGrid.addRow(gId++,'RegKeyExists("HKEY_CURRENT_USER\\Software\\WPI\\Theme")');

with

ConditionsGrid.addRow(gId++,'RegKeyExists("HKEY_CURRENT_USER\\Software\\WPI")');
ConditionsGrid.addRow(gId++,'RegValueExists("HKEY_CURRENT_USER\\Software\\WPI\\Theme")');

In wmi.js replace

return RegKeyExists("HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\PendingFileRenameOperations");

with

return RegValueExists("HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\PendingFileRenameOperations");

In installer.js replace

if (RegKeyExists("HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\PendingFileRenameOperations"))

with

if (RegValueExists("HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\PendingFileRenameOperations"))

or alternatively delete the function since a seemingly identical one with the same name is defined in wmi.js

Problems of Solution #2

This will break backward compatibility but it's the only proper solution to the problem.

Edited by Francesco

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...