Как остановить процесс, зависящий от его переключения

#windows #cmd

#Windows #cmd

Вопрос:

Я хотел бы убить процесс, хотя только убить процесс с помощью определенного переключателя, например

taskkill "cmd.exe" /s /k pushd

Ты можешь это сделать?

Комментарии:

1. Да, в некоторой степени это возможно, но будет ненадежно. Во-первых, командная строка является частью памяти процесса, поэтому ее можно свободно изменять. В дополнение к этому, как насчет C:Windowssystem32cmd.exe или C:WINNTSystem32cmd.exe в Windows 2000. Вам пришлось бы реализовать некоторую эвристику, чтобы уловить как можно больше вариантов.

2. Вы спрашиваете, возможно ли написать программу, подобную taskkill, как вы описали? Или вы ищете что-то, что уже существует?

Ответ №1:

Я бы предпочел перечислить все запущенные процессы, используя Windows Process Status API. После этого попробуйте получить командную строку процесса, как это делает Process Explorer (кажется, это можно сделать через недокументированный API). Далее, просто уничтожьте процесс, который соответствует вашим критериям, используя тот же PSAPI, о котором упоминалось выше.

Ответ №2:

Вы можете использовать NtQueryInformationProcess функцию. В PROCESS_BASIC_INFORMATION структуре есть член, PebBaseAddress который является указателем на PEB структуру. Оттуда вы можете проверить ProcessParameters элемент, который является указателем на RTL_USER_PROCESS_PARAMETERS структуру. Наконец, вы можете проверить его CommandLine участника.