Properly handle -1 as a registry key root.

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 80e1e8e..fb06127 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -1700,12 +1700,11 @@
         LPCWSTR Condition;
         Condition = MSI_RecordGetString(row,3);
 
-        if (MSI_EvaluateConditionW(package,Condition) == 
-            MSICONDITION_TRUE)
+        if (MSI_EvaluateConditionW(package,Condition) == MSICONDITION_TRUE)
         {
             int level = MSI_RecordGetInteger(row,2);
-            TRACE("Reseting feature %s to level %i\n",
-                   debugstr_w(Feature), level);
+            TRACE("Reseting feature %s to level %i\n", debugstr_w(Feature),
+                            level);
             package->features[feature_index].Level = level;
         }
     }
@@ -1875,8 +1874,6 @@
     return SetFeatureStates(package);
 }
 
-
-
 /* OK this value is "interpreted" and then formatted based on the 
    first few characters */
 static LPSTR parse_value(MSIPACKAGE *package, LPCWSTR value, DWORD *type, 
@@ -2056,6 +2053,23 @@
     /* get the root key */
     switch (root)
     {
+        case -1: 
+            {
+                static const WCHAR szALLUSER[] = {'A','L','L','U','S','E','R','S',0};
+                LPWSTR all_users = load_dynamic_property(package, szALLUSER, NULL);
+                if (all_users && all_users[0] == '1')
+                {
+                    root_key = HKEY_LOCAL_MACHINE;
+                    szRoot = szHLM;
+                }
+                else
+                {
+                    root_key = HKEY_CURRENT_USER;
+                    szRoot = szHCU;
+                }
+                HeapFree(GetProcessHeap(),0,all_users);
+            }
+                 break;
         case 0:  root_key = HKEY_CLASSES_ROOT; 
                  szRoot = szHCR;
                  break;