Example #1
0
        /// <summary>
        /// Tentar fechar o ponteiro do processo que está usando o item
        /// </summary>
        /// <param name="item">Item</param>
        /// <returns>null em caso de sucesso; string de erro caso contrário</returns>
        public string CloseHandle(HandleProcessItem item)
        {
            string args = $"-c {item.Address} -p {item.Pid} -y -nobanner";
            string output, outputerror;
            int    resultado = CommandClass.ExecuteCommand(Constantes.HandlePath, args, out output, out outputerror, Path.GetDirectoryName(Constantes.HandlePath));

            if (resultado == 0)
            {
                int index = output.IndexOf(PatternErrorClosingHandle, StringComparison.CurrentCultureIgnoreCase);
                if (index >= 0)
                {
                    string msg = output.Substring(index + PatternErrorClosingHandle.Length).Trim();
                    if ((msg.IndexOf(IdentificadorInvalido, StringComparison.CurrentCultureIgnoreCase) >= 0) ||
                        (msg.IndexOf(InvalidIdentifier, StringComparison.CurrentCultureIgnoreCase) >= 0))
                    {
                        msg += Environment.NewLine + "Tente executar com privilégios de administrador.";
                    }
                    return(msg);
                }
            }
            else
            {
                return(output + " " + outputerror);
            }
            return(null);
        }
        /// <summary>
        /// Criar uma instância da classe <see cref="HandleProcessItem"/>
        /// </summary>
        /// <param name="outputLine">Representa uma linha do output contendo as informações a serem extraídas</param>
        /// <returns>Instância da classe <see cref="HandleProcessItem"/></returns>
        public static HandleProcessItem Parse(string outputLine)
        {
            if (string.IsNullOrWhiteSpace(outputLine))
            {
                throw new ArgumentNullException(nameof(outputLine));
            }

            HandleProcessItem item = new HandleProcessItem()
            {
                ProcessName = outputLine
            };

            if (outputLine.Contains("pid"))
            {
                MatchCollection matches = _regexOutput.Matches(outputLine);
                if (matches.Count > 0)
                {
                    int pid;
                    if (int.TryParse(matches[0].Groups[2].Value, out pid))
                    {
                        item.Pid = pid;
                    }

                    item.ProcessName = matches[0].Groups[1].Value;
                    item.HandleType  = matches[0].Groups[3].Value;
                    item.User        = matches[0].Groups[4].Value;
                    item.Address     = matches[0].Groups[5].Value;
                    item.HandlePath  = matches[0].Groups[6].Value;
                }
            }

            return(item);
        }
        /// <summary>
        /// Lê o output do handle e devolve uma lista de objetos representando o uso
        /// </summary>
        /// <param name="output">Output</param>
        /// <returns>lista de objetos representando o uso</returns>
        public static List <HandleProcessItem> ParseOutput(string output)
        {
            string[] splited = output.Split(new string[] { "\r\r", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);

            var lst = new List <HandleProcessItem>();

            foreach (string estaLinha in splited)
            {
                HandleProcessItem item = Parse(estaLinha);
                lst.Add(item);
            }
            return(lst);
        }
Example #4
0
        /// <summary>
        /// Verificar se o item está sendo usado por algum processo
        /// </summary>
        /// <param name="item">Item a ser verificado. Pode ser uma pasta ou um arquivo</param>
        /// <returns>Lista de uso; lista vazia se o item não está em uso</returns>
        /// <exception cref="Exception">Erro ao verficar uso do item</exception>
        public List <HandleProcessItem> GetHandles(string item)
        {
            string output, outputError;
            int    exitCode = CommandClass.ExecuteCommand(FileName, "-a -u -accepteula -nobanner \"" + item + "\"",
                                                          out output, out outputError, Path.GetDirectoryName(FileName));

            if (exitCode == 0)
            {
                if (output.IndexOf(PatternNoMatchingFound, StringComparison.CurrentCultureIgnoreCase) >= 0)
                {
                    return(new List <HandleProcessItem>());
                }

                else
                {
                    List <HandleProcessItem> lstProcessos = HandleProcessItem.ParseOutput(output);
                    return(lstProcessos);
                }
            }
            else
            {
                throw new Exception(outputError);
            }
        }