Beispiel #1
0
        /// <summary>
        /// Tries to recover from an unknown handle.
        /// </summary>
        /// <param name="request">The request for the unknown key handle to try to virtualize.</param>
        /// <returns></returns>
        private RegistryBase TryRecoverUnknownHandle(RegistryRequest request)
        {
            request.KeyFullPath = HostRegistry.GetKeyNameByHandle(request.Handle);
            if (request.KeyFullPath == null)
            {
                EngineCore.Log.Error("Unknown registry key handle => {0}", request.Handle);
                return(null);
            }
            EngineCore.Log.Warning("Recovering from unknown registry key handle => {0} => {1}", request.Handle,
                                   request.KeyFullPath);
            // Teach target about the recovered key handle.
            var       recoveredHandle = request.Handle;
            var       target          = GetDefaultRegistryFor(request);
            Exception error           = null;

            if (target.OpenKey(request) == NativeResultCode.Success)
            {
                try
                {
                    target.AddAlias(request.Handle, recoveredHandle);
                    HostRegistry.CloseKey(recoveredHandle);
                    return(target);
                }
                catch (ApplicationException e)
                {
                    error = e;
                }
            }
            EngineCore.Log.Error("Unable to recover from unknown registry key handle => {0}",
                                 error, request.Handle, request.KeyFullPath);
            return(null);
        }
Beispiel #2
0
        public NativeResultCode CloseKey(uint hKey)
        {
            var request = new RegistryRequest {
                Handle = hKey
            };
            var registry = _switch.GetRegistryFor(request, false);

            if (registry != null)
            {
                return(registry.CloseKey(request));
            }
            return(HostRegistry.CloseKey(hKey)
               ? NativeResultCode.Success
               : NativeResultCode.InvalidHandle);
        }