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;
 }
Пример #2
0
 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);
 }
Пример #3
0
 /// <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);
     }
 }
Пример #4
0
 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);
 }
Пример #5
0
        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);
        }
Пример #6
0
 /// <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);
 }
Пример #7
0
 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;
 }
Пример #12
0
 public RegistryValueRequest(RegistryValueRequest request)
     : base(request)
 {
     Value = request.Value;
 }
Пример #13
0
 /// <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;
   }
 }
Пример #14
0
 /// <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;
 }
Пример #15
0
 /// <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;
   }
 }