public static TestConnectionResult TestConnection(string machineName)
        {
            RegistryKey hive = null;

            try
            {
                hive = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, machineName, RegistryView.Registry64);
                hive.OpenSubKey("Software");
                return(new TestConnectionResult()
                {
                    Successful = true
                });
            }
            catch (IOException io)
            {
                return(new TestConnectionResult()
                {
                    Successful = false,
                    Exception = io,
                    Message = io.Message,
                    ErrorCode = ErrorCodes.IO_EXCEPTION
                });
            }

            catch (SecurityException se)
            {
                return(new TestConnectionResult()
                {
                    Successful = false,
                    Exception = se,
                    Message = se.Message,
                    ErrorCode = ErrorCodes.SECURITY_EXCEPTION
                });
            }
            catch (UnauthorizedAccessException ue)
            {
                return(new TestConnectionResult()
                {
                    Successful = false,
                    Exception = ue,
                    Message = ue.Message,
                    ErrorCode = ErrorCodes.UNAUTHORIZED_ACCESS_EXCEPTION
                });
            }
            catch (Exception ex)
            {
                return(new TestConnectionResult()
                {
                    Exception = ex,
                    Successful = false,
                    Message = ex.Message,
                    ErrorCode = ErrorCodes.GENERIC_EXCEPTION
                });
            }
            finally
            {
                hive?.Close();
            }
        }
        public static RegistryEntriesResult GetRegistryEntries(RegistryHive registryHive, string rootKey, string machineName)
        {
            RegistryKey hive = null;

            try
            {
                hive = RegistryKey.OpenRemoteBaseKey(registryHive, machineName, RegistryView.Registry64);
                var entries = GetRegistryEntries(rootKey, hive);
                return(new RegistryEntriesResult()
                {
                    Successful = true,
                    RegistryEntries = entries ?? new List <RegistryEntry>(),
                    ErrorCode = ErrorCodes.EMPTY
                });
            }
            catch (IOException io)
            {
                return(new RegistryEntriesResult()
                {
                    Successful = false,
                    Exception = io,
                    Message = io.Message,
                    RegistryEntries = new List <RegistryEntry>(),
                    ErrorCode = ErrorCodes.IO_EXCEPTION
                });
            }
            catch (SecurityException se)
            {
                return(new RegistryEntriesResult()
                {
                    Successful = false,
                    Exception = se,
                    Message = se.Message,
                    RegistryEntries = new List <RegistryEntry>(),
                    ErrorCode = ErrorCodes.SECURITY_EXCEPTION
                });
            }
            catch (UnauthorizedAccessException ue)
            {
                return(new RegistryEntriesResult()
                {
                    Successful = false,
                    Exception = ue,
                    Message = ue.Message,
                    RegistryEntries = new List <RegistryEntry>(),
                    ErrorCode = ErrorCodes.UNAUTHORIZED_ACCESS_EXCEPTION
                });
            }
            catch (Exception ex)
            {
                return(new RegistryEntriesResult()
                {
                    Successful = false,
                    Exception = ex,
                    Message = ex.Message,
                    RegistryEntries = new List <RegistryEntry>(),
                    ErrorCode = ErrorCodes.GENERIC_EXCEPTION
                });
            }
            finally
            {
                hive?.Close();
            }
        }