#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
участника.