Hi, I am having problems with RegDeleteKeyEx function available in
advapi.dll on Win7 64bit and c# - basically i am trying to delete a
value from HKLM\Software\Wow6432Node\Test but cannot figure out why I
am getting error_success=2 (file not found I believe) when it should
be 0 and the reg value not being deleted...here comes the code....:

I have the following in a codefile to try and delete the reg value;

regload rl = new regload();
bool del = rl.WoWDel("HKLM", @"Software\Test", "TESTValue");

This being the main code:

using System;
using System.Runtime.InteropServices;
using System.Text;
using Microsoft.Win32;


namespace AdvRegistry
{
    public class regload
    {


        [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
        public static extern int RegOpenKeyEx(
          UIntPtr hKey,
          string subKey,
          int ulOptions,
          int samDesired,
          out UIntPtr hkResult);



        [DllImport("advapi32.dll", EntryPoint = "RegDeleteKeyEx",
SetLastError = true)]
        public static extern int RegDeleteKeyEx(
            UIntPtr hKey,
            string lpSubKey,
            int samDesired,
            int Reserved);

        [DllImport("advapi32.dll", SetLastError = true)]
        public static extern int RegCloseKey(
            UIntPtr hKey);



        public static int KEY_WOW64_64KEY = 0x0100;
        public static int KEY_WOW64_32KEY = 0x0200;
        public static int KEY_READ = 0x20019;
        public static int KEY_WRITE = 0x20006;
        public static int KEY_ALL_ACCESS = 0xF003F;
        public static UIntPtr HKEY_LOCAL_MACHINE = new
UIntPtr(0x80000002u);
        public static UIntPtr HKEY_CURRENT_USER = new
UIntPtr(0x80000001u);




        public bool WoWDel(string RegRoot, string RegPath, string
RegItem)
        {
            if (RegRoot == "HKCU") DelWowReg(HKEY_CURRENT_USER,
RegPath, RegItem);
            else if (RegRoot == "HKLM") DelWowReg(HKEY_LOCAL_MACHINE,
RegPath, RegItem);
            else return false;
            return true;
        }



        private static int DelWowReg(UIntPtr hKey, string keyPath,
string valueName)
        {
            int i = 9999;

            if (RegOpenKeyEx(hKey, keyPath, 0, KEY_ALL_ACCESS |
KEY_WOW64_32KEY , out hKey) == 0)
            {

                // int wlength = value.Length + 1;
                i = RegDeleteKeyEx(hKey, valueName, KEY_WOW64_32KEY,
0);
                RegCloseKey(hKey);
                return i;

            }
            return i;
        }




    }
}

Where did I go wrong?

many thanks for the help, Chris.

Reply via email to