Пример #1
0
        public bool loadAsXml(xmlReader r, string strFilename)
        {
            bool      bReturn = true;
            ArrayList arrInternalKeyLoads = new ArrayList();
            string    strValueName = "", strValueValue = "", strValueType = "";

            r.showMsgBoxOnError(true);
            r.open(strFilename);

            while (r.readString() && bReturn)
            {
                switch (r.getNodeType())
                {
                case NODETYPE.NODETYPE_BEGINELEMENT:
                {
                    string strElement = r.getNodeName();
                    strElement = getUnescapedXmlString(strElement);
                }
                break;

                case NODETYPE.NODETYPE_ENDELEMENT:
                {
                    string strElement = r.getNodeName();
                    strElement = getUnescapedXmlString(strElement);

                    // close the latest key now
                    if (strElement.CompareTo(XML_KEY) == 0 && arrInternalKeyLoads.Count > 0)
                    {
                        // retrieve latest key
                        InternalKeyLoad p = (InternalKeyLoad)arrInternalKeyLoads[arrInternalKeyLoads.Count - 1];
                        p.reg.Close();
                        arrInternalKeyLoads.RemoveAt(arrInternalKeyLoads.Count - 1);
                    }
                    else if (strElement.CompareTo(XML_VALUE) == 0 && arrInternalKeyLoads.Count > 0)                                    // <v .../>
                    {
                        // now set/create the value
                        InternalKeyLoad p = (InternalKeyLoad)arrInternalKeyLoads[arrInternalKeyLoads.Count - 1];
                        LoadAsXml_SetValue(getRegistryHandle(p.reg), strValueName, strValueValue, strValueType);

                        strValueName  = "";
                        strValueValue = "";
                        strValueType  = "";
                    }
                }
                break;

                case NODETYPE.NODETYPE_ATTRIB:
                {
                    string strName, strValue;

                    strName  = r.getAttribName();
                    strValue = r.getAttribValue();

                    strName  = getUnescapedXmlString(strName);
                    strValue = getUnescapedXmlString(strValue);

                    string strCurrentElement = r.getNodeName();

                    // <k name="..."> ?
                    if (strName.CompareTo(XML_NAME) == 0 && strCurrentElement.CompareTo(XML_KEY) == 0)
                    {
                        InternalKeyLoad p = new InternalKeyLoad();
                        p.strKeyname = strValue;

                        arrInternalKeyLoads.Add(p);

                        // open the key, and store the handle
                        p.reg = LoadAsXml_OpenKey(arrInternalKeyLoads);

                        arrInternalKeyLoads.RemoveAt(arrInternalKeyLoads.Count - 1);
                        arrInternalKeyLoads.Add(p);

                        if (p.reg == null)
                        {
                            bReturn = false;                                             // abort the process
                        }
                    }
                    else if (strCurrentElement.CompareTo(XML_VALUE) == 0)                           // <v name="..." value="..." type="..." />
                    {
                        if (strName.CompareTo(XML_NAME) == 0)                                       // name="..."
                        {
                            strValueName  = strValue;
                            strValueValue = "";
                            strValueType  = "";
                        }
                        else if (strName.CompareTo(XML_VALUE2) == 0)                                       // value="..."
                        {
                            strValueValue = strValue;
                            strValueType  = "";
                        }
                        else if (strName.CompareTo(XML_TYPE) == 0)                                       // type="..."
                        {
                            strValueType = strValue;
                        }
                    }
                }
                break;
                    // other nodetypes : we don't care
                }
            }             // end read lines one by one

            r.close();

            return(bReturn);
        }
Пример #2
0
        RegistryKey LoadAsXml_OpenKey(ArrayList arrInternalKeyLoads)
        {
            RegistryKey reg = null;

            if (arrInternalKeyLoads.Count == 0)
            {
                return(null);                                          // come on!
            }
            // build the real path from the array of keynames
            // open the key now
            string strMainKey = "", strPath = "";
            int    nSize = arrInternalKeyLoads.Count;

            for (int i = 0; i < nSize; i++)
            {
                InternalKeyLoad p = (InternalKeyLoad)arrInternalKeyLoads[i];
                if (i == 0)
                {
                    strMainKey = p.strKeyname;
                }
                else
                {
                    if (strPath.Length > 0)
                    {
                        strPath += "\\";
                    }

                    strPath += p.strKeyname;
                }
            }             // end for


            try
            {
                // open the key now
                reg = openKey(strMainKey, strPath);

                if (reg != null)               // it's ok
                {
                    return(reg);
                }

                // key does not exist, so let's create it !
                if (strMainKey.ToUpper().CompareTo("HKEY_CLASSES_ROOT") == 0)
                {
                    reg = Registry.ClassesRoot.CreateSubKey(strPath);
                }
                else if (strMainKey.ToUpper().CompareTo("HKEY_CURRENT_USER") == 0)
                {
                    reg = Registry.CurrentUser.CreateSubKey(strPath);
                }
                else if (strMainKey.ToUpper().CompareTo("HKEY_LOCAL_MACHINE") == 0)
                {
                    reg = Registry.LocalMachine.CreateSubKey(strPath);
                }
                else if (strMainKey.ToUpper().CompareTo("HKEY_USERS") == 0)
                {
                    reg = Registry.Users.CreateSubKey(strPath);
                }
                else if (strMainKey.ToUpper().CompareTo("HKEY_CURRENT_CONFIG") == 0)
                {
                    reg = Registry.CurrentConfig.CreateSubKey(strPath);
                }
                else
                {
                    return(null);                    // break here
                }
            }
            catch (Exception)
            {
            }

            if (reg != null)           // it's ok
            {
                return(reg);
            }

            MessageBox.Show(string.Format("couldn't create key {0}\\{1}", strMainKey, strPath), "Office Recovery Manager",
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            return(null);
        }