public override NativeResultCode QueryValue(RegistryValueRequest request) { var resultCode = base.QueryValue(request); if (resultCode != NativeResultCode.FileNotFound) return resultCode; // Base knows the value if (!IsKnownKey(request)) return NativeResultCode.InvalidHandle; // Base does not know the handle if (request.VirtualizationType == VirtualizationType.Virtual) return NativeResultCode.FileNotFound; // Not allowed to retrieve value from host registry // Query the value from the real registry. try { ValueType valueType; var realKeyPath = RegistryTranslator.ToRealPath(request.KeyFullPath); var data = HostRegistry.QueryValue(realKeyPath, request.Value.Name, out valueType); if (data == null) return NativeResultCode.FileNotFound; request.Value = new VirtualRegistryValue(request.Value.Name, data.ToByteArray(), valueType); } catch { return NativeResultCode.AccessDenied; } // Determine whether the newly acquired value needs to be written to the base. if (request.VirtualizationType < VirtualizationType.TransparentRead) { var key = new VirtualRegistryKey(request.Handle, request.KeyFullPath); key.Values.Add(request.Value.Name, request.Value); WriteKey(key, false); } return NativeResultCode.Success; }
public override NativeResultCode DeleteValue(RegistryValueRequest request) { if (IsKnownKey(request)) { try { var regKey = HostRegistry.OpenKey(request.KeyFullPath, true); if (regKey == null) { return(NativeResultCode.FileNotFound); } regKey.DeleteValue(request.Value.Name, true); regKey.Close(); return(NativeResultCode.Success); } catch (ArgumentException) { return(NativeResultCode.FileNotFound); } catch { return(NativeResultCode.AccessDenied); } } return(NativeResultCode.InvalidHandle); }
/// <summary> /// Deletes the <paramref name="request.Value"/> from the key specified in <paramref name="request"/>. /// </summary> /// <param name="request"></param> /// <returns></returns> public virtual NativeResultCode DeleteValue(RegistryValueRequest request) { using (_keysSynchronizationLock.EnterDisposableReadLock()) { var hKey = EnsureHandleIsNoAlias(request.Handle); if (!_keys.Keys.Contains(hKey)) { return(NativeResultCode.InvalidHandle); } return(_keys[hKey].Values.Remove(request.Value.Name) ? NativeResultCode.Success : NativeResultCode.FileNotFound); } }
public override NativeResultCode SetValue(RegistryValueRequest request) { if (IsKnownKey(request)) { try { // Bug: Will the registry contain a correct value here? Microsoft.Win32.Registry.SetValue(request.KeyFullPath, request.Value.Name, request.Value.Data, request.Value.Type.AsValueKind()); return(NativeResultCode.Success); } catch { return(NativeResultCode.AccessDenied); } } return(NativeResultCode.InvalidHandle); }
public override NativeResultCode QueryValue(RegistryValueRequest request) { var resultCode = base.QueryValue(request); if (resultCode != NativeResultCode.FileNotFound) { return(resultCode); // Base knows the value } if (!IsKnownKey(request)) { return(NativeResultCode.InvalidHandle); // Base does not know the handle } if (request.VirtualizationType == VirtualizationType.Virtual) { return(NativeResultCode.FileNotFound); // Not allowed to retrieve value from host registry } // Query the value from the real registry. try { ValueType valueType; var realKeyPath = RegistryTranslator.ToRealPath(request.KeyFullPath); var data = HostRegistry.QueryValue(realKeyPath, request.Value.Name, out valueType); if (data == null) { return(NativeResultCode.FileNotFound); } request.Value = new VirtualRegistryValue(request.Value.Name, data.ToByteArray(), valueType); } catch { return(NativeResultCode.AccessDenied); } // Determine whether the newly acquired value needs to be written to the base. if (request.VirtualizationType < VirtualizationType.TransparentRead) { var key = new VirtualRegistryKey(request.Handle, request.KeyFullPath); key.Values.Add(request.Value.Name, request.Value); WriteKey(key, false); } return(NativeResultCode.Success); }
/// <summary> /// Sets the <paramref name="request.Value"/> to the key specified in <paramref name="request"/>. /// </summary> /// <param name="request"></param> /// <returns></returns> public virtual NativeResultCode SetValue(RegistryValueRequest request) { using (_keysSynchronizationLock.EnterDisposableReadLock()) { var hKey = EnsureHandleIsNoAlias(request.Handle); if (!_keys.Keys.Contains(hKey)) { return(NativeResultCode.InvalidHandle); } var key = _keys[hKey]; if (key.Values.Keys.Contains(request.Value.Name)) { key.Values[request.Value.Name] = request.Value; } else { key.Values.Add(request.Value.Name, request.Value); } } return(NativeResultCode.Success); }
public override NativeResultCode QueryValue(RegistryValueRequest request) { if (IsKnownKey(request)) { try { ValueType valueType; var data = HostRegistry.QueryValue(request.KeyFullPath, request.Value.Name, out valueType); if (data != null) { request.Value = new VirtualRegistryValue(request.Value.Name, data.ToByteArray(), valueType); return(NativeResultCode.Success); } return(NativeResultCode.FileNotFound); } catch { return(NativeResultCode.AccessDenied); } } return(NativeResultCode.InvalidHandle); }
public override NativeResultCode DeleteValue(RegistryValueRequest request) { if (IsKnownKey(request)) { try { var regKey = HostRegistry.OpenKey(request.KeyFullPath, true); if (regKey == null) return NativeResultCode.FileNotFound; regKey.DeleteValue(request.Value.Name, true); regKey.Close(); return NativeResultCode.Success; } catch (ArgumentException) { return NativeResultCode.FileNotFound; } catch { return NativeResultCode.AccessDenied; } } return NativeResultCode.InvalidHandle; }
public override NativeResultCode SetValue(RegistryValueRequest request) { if (IsKnownKey(request)) { try { // Bug: Will the registry contain a correct value here? Microsoft.Win32.Registry.SetValue(request.KeyFullPath, request.Value.Name, request.Value.Data, request.Value.Type.AsValueKind()); return NativeResultCode.Success; } catch { return NativeResultCode.AccessDenied; } } return NativeResultCode.InvalidHandle; }
public override NativeResultCode QueryValue(RegistryValueRequest request) { if (IsKnownKey(request)) { try { ValueType valueType; var data = HostRegistry.QueryValue(request.KeyFullPath, request.Value.Name, out valueType); if (data != null) { request.Value = new VirtualRegistryValue(request.Value.Name, data.ToByteArray(), valueType); return NativeResultCode.Success; } return NativeResultCode.FileNotFound; } catch { return NativeResultCode.AccessDenied; } } return NativeResultCode.InvalidHandle; }
public RegistryValueRequest(RegistryValueRequest request) : base(request) { Value = request.Value; }
/// <summary> /// Deletes the <paramref name="request.Value"/> from the key specified in <paramref name="request"/>. /// </summary> /// <param name="request"></param> /// <returns></returns> public virtual NativeResultCode DeleteValue(RegistryValueRequest request) { using (_keysSynchronizationLock.EnterDisposableReadLock()) { var hKey = EnsureHandleIsNoAlias(request.Handle); if (!_keys.Keys.Contains(hKey)) return NativeResultCode.InvalidHandle; return _keys[hKey].Values.Remove(request.Value.Name) ? NativeResultCode.Success : NativeResultCode.FileNotFound; } }
/// <summary> /// Sets the <paramref name="request.Value"/> to the key specified in <paramref name="request"/>. /// </summary> /// <param name="request"></param> /// <returns></returns> public virtual NativeResultCode SetValue(RegistryValueRequest request) { using (_keysSynchronizationLock.EnterDisposableReadLock()) { var hKey = EnsureHandleIsNoAlias(request.Handle); if (!_keys.Keys.Contains(hKey)) return NativeResultCode.InvalidHandle; var key = _keys[hKey]; if (key.Values.Keys.Contains(request.Value.Name)) key.Values[request.Value.Name] = request.Value; else key.Values.Add(request.Value.Name, request.Value); } return NativeResultCode.Success; }
/// <summary> /// Retrieves the value associated with the key and name specified in <paramref name="request"/>. /// The queried value is set to <paramref name="request.Value"/>. /// </summary> /// <param name="request"></param> /// <returns></returns> public virtual NativeResultCode QueryValue(RegistryValueRequest request) { using (_keysSynchronizationLock.EnterDisposableReadLock()) { var hKey = EnsureHandleIsNoAlias(request.Handle); if (!_keys.Keys.Contains(hKey)) return NativeResultCode.InvalidHandle; var key = _keys[hKey]; if (!key.Values.Keys.Contains(request.Value.Name)) return NativeResultCode.FileNotFound; request.Value = key.Values[request.Value.Name]; return NativeResultCode.Success; } }