Пример #1
0
        public static void SetValueString(UIntPtr key, string subkey, string valueName, string value, Wow64 wow64)
        {
            UIntPtr     regKeyHandle;
            uint        sam     = (uint)(Rights.CreateSubKey | Rights.SetValue) + (uint)wow64;
            uint        options = (uint)Options.NonVolatile;
            Disposition disposition;

            if (RegCreateKeyEx(key, subkey, 0, null, options, sam, IntPtr.Zero, out regKeyHandle, out disposition) != 0)
            {
                throw new Exception("Could not open or craete key");
            }

            try {
                uint type             = (uint)ValueType.String;
                uint lenBytesPlusNull = ((uint)value.Length + 1) * 2;
                var  result           = RegSetValueExW(regKeyHandle, valueName, 0, type, value, lenBytesPlusNull);
                if (result != 0)
                {
                    throw new Exception(string.Format("Error {0} setting registry key '{1}{2}@{3}'='{4}'",
                                                      result, key, subkey, valueName, value));
                }
            } finally {
                RegCloseKey(regKeyHandle);
            }
        }
Пример #2
0
        public static string GetValueString(UIntPtr key, string subkey, string valueName, Wow64 wow64)
        {
            UIntPtr regKeyHandle;
            uint    sam = (uint)Rights.QueryValue + (uint)wow64;

            if (RegOpenKeyEx(key, subkey, 0, sam, out regKeyHandle) != 0)
            {
                return(null);
            }

            try {
                uint type;
                var  sb     = new StringBuilder(2048);
                uint cbData = (uint)sb.Capacity;
                if (RegQueryValueExW(regKeyHandle, valueName, 0, out type, sb, ref cbData) == 0)
                {
                    return(sb.ToString());
                }
                return(null);
            } finally {
                RegCloseKey(regKeyHandle);
            }
        }
Пример #3
0
		public static string GetValueString (UIntPtr key, string subkey, string valueName, Wow64 wow64)
		{
			UIntPtr regKeyHandle;
			uint sam = (uint)Rights.QueryValue + (uint)wow64;
			if (RegOpenKeyEx (key, subkey, 0, sam, out regKeyHandle) != 0)
				return null;

			try {
				uint type;
				var sb = new StringBuilder (2048);
				uint cbData = (uint) sb.Capacity;
				if (RegQueryValueExW (regKeyHandle, valueName, 0, out type, sb, ref cbData) == 0) {
					return sb.ToString ();
				}
				return null;
			} finally {
				RegCloseKey (regKeyHandle);
			}
		}
Пример #4
0
		public static void SetValueString (UIntPtr key, string subkey, string valueName, string value, Wow64 wow64)
		{
			UIntPtr regKeyHandle;
			uint sam = (uint)(Rights.CreateSubKey | Rights.SetValue) + (uint)wow64;
			uint options = (uint) Options.NonVolatile;
			Disposition disposition;
			if (RegCreateKeyEx (key, subkey, 0, null, options, sam, IntPtr.Zero, out regKeyHandle, out disposition) != 0) {
				throw new Exception ("Could not open or craete key");
			}

			try {
				uint type = (uint)ValueType.String;
				uint lenBytesPlusNull = ((uint)value.Length + 1) * 2;
				var result = RegSetValueExW (regKeyHandle, valueName, 0, type, value, lenBytesPlusNull);
				if (result != 0)
					throw new Exception (string.Format ("Error {0} setting registry key '{1}{2}@{3}'='{4}'",
						result, key, subkey, valueName, value));
			} finally {
				RegCloseKey (regKeyHandle);
			}
		}
Пример #5
0
        public static IEnumerable <string> EnumerateSubkeys(UIntPtr key, string subkey, Wow64 wow64)
        {
            UIntPtr regKeyHandle;
            uint    sam = (uint)Rights.Read + (uint)wow64;
            int     r   = RegOpenKeyEx(key, subkey, 0, sam, out regKeyHandle);

            if (r != 0)
            {
                yield break;
            }
            try {
                r = RegQueryInfoKey(
                    hKey:                   regKeyHandle,
                    lpClass:                IntPtr.Zero,
                    lpcchClass:             IntPtr.Zero,
                    lpReserved:             IntPtr.Zero,
                    lpcSubkey:              out uint cSubkeys,
                    lpcchMaxSubkeyLen:      out uint cchMaxSubkeyLen,
                    lpcchMaxClassLen:       IntPtr.Zero,
                    lpcValues:              IntPtr.Zero,
                    lpcchMaxValueNameLen:   IntPtr.Zero,
                    lpcbMaxValueLen:        IntPtr.Zero,
                    lpSecurityDescriptor:   IntPtr.Zero,
                    lpftLastWriteTime:      IntPtr.Zero
                    );
                if (r != 0)
                {
                    yield break;
                }
                var name = new char [cchMaxSubkeyLen + 1];
                for (uint i = 0; i < cSubkeys; ++i)
                {
                    var nameLen = (uint)name.Length;
                    r = RegEnumKeyExW(
                        hKey:               regKeyHandle,
                        dwIndex:            i,
                        lpName:             name,
                        lpcchName:          ref nameLen,
                        lpReserved:         IntPtr.Zero,
                        lpClass:            IntPtr.Zero,
                        lpcchClass:         IntPtr.Zero,
                        lpftLastWriteTime:  IntPtr.Zero
                        );
                    if (r != 0)
                    {
                        continue;
                    }
                    yield return(new string (name, 0, (int)nameLen));
                }
            }
            finally {
                RegCloseKey(regKeyHandle);
            }
        }