private RegQueryValueEx ( |
||
keyBase | ||
valueName | string | |
reserved | ||
type | RegistryValueKind | |
zero | ||
dataSize | int | |
return | int |
private int GetBinaryValue(RegistryKey rkey, string name, RegistryValueKind type, out byte[] data, int size) { byte[] array = new byte[size]; IntPtr handle = Win32RegistryApi.GetHandle(rkey); int result = Win32RegistryApi.RegQueryValueEx(handle, name, IntPtr.Zero, ref type, array, ref size); data = array; return(result); }
public object GetValue(RegistryKey rkey, string name, object defaultValue, RegistryValueOptions options) { RegistryValueKind registryValueKind = RegistryValueKind.Unknown; int size = 0; IntPtr handle = Win32RegistryApi.GetHandle(rkey); int num = Win32RegistryApi.RegQueryValueEx(handle, name, IntPtr.Zero, ref registryValueKind, IntPtr.Zero, ref size); if (num == 2 || num == 1018) { return(defaultValue); } if (num != 234 && num != 0) { this.GenerateException(num); } object obj; if (registryValueKind == RegistryValueKind.String) { byte[] data; num = this.GetBinaryValue(rkey, name, registryValueKind, out data, size); obj = RegistryKey.DecodeString(data); } else if (registryValueKind == RegistryValueKind.ExpandString) { byte[] data2; num = this.GetBinaryValue(rkey, name, registryValueKind, out data2, size); obj = RegistryKey.DecodeString(data2); if ((options & RegistryValueOptions.DoNotExpandEnvironmentNames) == RegistryValueOptions.None) { obj = Environment.ExpandEnvironmentVariables((string)obj); } } else if (registryValueKind == RegistryValueKind.DWord) { int num2 = 0; num = Win32RegistryApi.RegQueryValueEx(handle, name, IntPtr.Zero, ref registryValueKind, ref num2, ref size); obj = num2; } else if (registryValueKind == RegistryValueKind.Binary) { byte[] array; num = this.GetBinaryValue(rkey, name, registryValueKind, out array, size); obj = array; } else { if (registryValueKind != RegistryValueKind.MultiString) { throw new SystemException(); } obj = null; byte[] data3; num = this.GetBinaryValue(rkey, name, registryValueKind, out data3, size); if (num == 0) { obj = RegistryKey.DecodeString(data3).Split(new char[1]); } } if (num != 0) { this.GenerateException(num); } return(obj); }