Вверх ↑
Этот топик читают: Гость
Ответов: 245
Рейтинг: 3
#301: 2011-05-18 04:29:10 ЛС | профиль | цитата
Убить процесс по пути

code_24005.txt
------------ Дoбавленo в 04.06:
Получение списка процессов через ToolHelp API.

procedure GetToolHelpProcessList(var List: PListStruct);
var
Snap: dword;
Process: TPROCESSENTRY32;
NewItem: PProcessRecord;
begin
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Snap <> INVALID_HANDLE_VALUE then
begin
Process.dwSize := SizeOf(TPROCESSENTRY32);
if Process32First(Snap, Process) then
repeat
GetMem(NewItem, SizeOf(TProcessRecord));
ZeroMemory(NewItem, SizeOf(TProcessRecord));
NewItem^.ProcessId := Process.th32ProcessID;
NewItem^.ParrentPID := Process.th32ParentProcessID;
lstrcpy(@NewItem^.ProcessName, Process.szExeFile);
AddItem(List, NewItem);
until not Process32Next(Snap, Process);
CloseHandle(Snap);
end;
end;
------------ Дoбавленo в 04.07:
Получение списка процессов через ZwQuerySystemInformation.

procedure GetNativeProcessList(var List: PListStruct);
var
Info: PSYSTEM_PROCESSES;
NewItem: PProcessRecord;
Mem: pointer;
begin
Info := GetInfoTable(SystemProcessesAndThreadsInformation);
Mem := Info;
if Info = nil then Exit;
repeat
GetMem(NewItem, SizeOf(TProcessRecord));
ZeroMemory(NewItem, SizeOf(TProcessRecord));
lstrcpy(@NewItem^.ProcessName,
PChar(WideCharToString(Info^.ProcessName.Buffer)));
NewItem^.ProcessId := Info^.ProcessId;
NewItem^.ParrentPID := Info^.InheritedFromProcessId;
AddItem(List, NewItem);
Info := pointer(dword(info) + info^.NextEntryDelta);
until Info^.NextEntryDelta = 0;
VirtualFree(Mem, 0, MEM_RELEASE);
end;
------------ Дoбавленo в 04.08:
Получение списка процессов через системный вызов ZwQuerySystemInformation.

procedure GetSyscallProcessList(var List: PListStruct);
var
Info: PSYSTEM_PROCESSES;
NewItem: PProcessRecord;
mPtr: pointer;
mSize: dword;
St: NTStatus;
begin
mSize := $4000;
repeat
GetMem(mPtr, mSize);
St := ZwQuerySystemInfoCall(SystemProcessesAndThreadsInformation,
mPtr, mSize, nil);
if St = STATUS_INFO_LENGTH_MISMATCH then
begin
FreeMem(mPtr);
mSize := mSize * 2;
end;
until St <> STATUS_INFO_LENGTH_MISMATCH;
if St = STATUS_SUCCESS then
begin
Info := mPtr;
repeat
GetMem(NewItem, SizeOf(TProcessRecord));
ZeroMemory(NewItem, SizeOf(TProcessRecord));
lstrcpy(@NewItem^.ProcessName,
PChar(WideCharToString(Info^.ProcessName.Buffer)));
NewItem^.ProcessId := Info^.ProcessId;
NewItem^.ParrentPID := Info^.InheritedFromProcessId;
Info := pointer(dword(info) + info^.NextEntryDelta);
AddItem(List, NewItem);
until Info^.NextEntryDelta = 0;
end;
FreeMem(mPtr);
end;
------------ Дoбавленo в 04.09:
http://wasm.ru/article.php?article=hiddndt
------------ Дoбавленo в 04.29:
даже wmi на xp 64 не все пути выевляет
карма: 0

0
файлы: 1code_24005.txt [1.2KB] [246]
Разработчик
Ответов: 26066
Рейтинг: 2120
#302: 2011-05-18 09:15:05 ЛС | профиль | цитата
goluzov, к сведению -- в компоненте тоже используется функция ZwQueryInformationProcess, но для определения как раз путей. Если уж она не видит путей, то я даже не знаю, что их там видеть будет. И где в приведенной ссылке, есть хоть что-то, что работает под x64

Я еще раз повторюсь -- универсальный компонент на обе разрядности сделать практически нереально, особенно, не имея ОС этих разных разрядностей.

goluzov, ты еще на досуге задайся вопросом -- а нужно ли это все разработчику, он что, за это зарплату получает Вот есть устойчивая версия на 32-а бита, довольствуйся этим. Под 64-е бита никто ничего не обещал
------------ Дoбавленo в 09.15:
Я попробую кое-чего убрать, из кода, и тогда посмотрим дальше
карма: 22

0
Ответов: 3889
Рейтинг: 362
#303: 2011-05-18 09:17:00 ЛС | профиль | цитата
goluzov писал(а):
даже wmi на xp 64 не все пути выевляет
Пути каких именно процессов не выявляет Пути процессов, запущенных другими пользователями, действительно могут не определяться - у Вас недостаточно привилегий. Тут дело не в 64 битности. [flood]Только давайте не будем обсуждать тут ещё и повышение привилегий своего приложения. Во-первых, оффтоп, во-вторых честному программисту это не нужно - Ваше приложение в 99% случаев имеет те же привилегии, что и запустившее его => путь вы определите, для самозащиты или выяснения своего пути при неверной "текущей рабочей папке" достаточно с лихвой. В-третьих, хорошая проактивная защита раздавит Ваше приложение в самом начале попыток поднять права.[/flood]
карма: 1

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#304: 2011-05-18 10:35:01 ЛС | профиль | цитата
1nd1g0 писал(а):
Пути процессов, запущенных другими пользователями, действительно могут не определяться - у Вас недостаточно привилегий

Не видит все пути в x64 версии из-под Админа, а не из-под Админа не видит чсть процессов, он уже скриншот приводил, на что и ответили, что так и должно быть.
Я так понимаю, что чел делает универсальный менеджер задач или что-то в этом роде независимо от разрядности

карма: 22

0
Ответов: 3889
Рейтинг: 362
#305: 2011-05-18 10:49:02 ЛС | профиль | цитата
nesco,[flood] не Админом единым живы руткиты ;) Но, так же, как Вы не стали давать посекторный доступ к диску, не вижу смысла давать доступ к манипуляциям с привилегиями. Вряд ли это ограничится безобидным "менеджером задач".[/flood]
карма: 1

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#306: 2011-05-18 10:54:34 ЛС | профиль | цитата
[flood]
1nd1g0 писал(а):
не вижу смысла давать доступ к манипуляциям с привилегиями

Старый релиз позволял уничтожать даже системные процессы, но этого оказалось мало, народу подавай на все разрядности и на все ОС[/flood]
карма: 22

0
Ответов: 245
Рейтинг: 3
#307: 2011-05-18 11:03:17 ЛС | профиль | цитата
1nd1g0

winXP 64
карма: 0

0
Ответов: 3889
Рейтинг: 362
#308: 2011-05-18 11:10:28 ЛС | профиль | цитата
goluzov, Всё правильно, у Вас нет прав, чтобы видеть дополнительную информацию о процессах, запущенных до входа пользователя в систему, так как запущены они самим ядром и жизненно важны для работы многих компонентов ОС. Вам как бы намекают, что лезете не туда, куда положено лезть пользовательским программам. И они правы.

Предвосхищая вопросы скажу, что в компоненте ProcessInfo, как и в моей WMI-программе, используется метод WMI, не допускающий авторизации под другим уровнем привилегий, но даже если Вы используете нестандартный метод авторизации в WMI, Вы всё равно не сможете получить желаемые данные о локальных системных процессах - в целях борьбы с зловредными программами Microsoft заблокировала локальную WMI - авторизацию под чужими правами.
карма: 1

0
Ответов: 245
Рейтинг: 3
#309: 2011-05-18 14:11:45 ЛС | профиль | цитата
1nd1g0

тогда почему процес который запустил, у него есть file path
------------ Дoбавленo в 14.11:
а то что он запустил, у этого процесса нет file path
карма: 0

0
Ответов: 3889
Рейтинг: 362
#310: 2011-05-18 14:32:35 ЛС | профиль | цитата
goluzov, Сути это не меняет. Не видите пути вы из-за низких прав. На некоторые системные процессы доступ открыт. На некоторые - нет. При наличии прав видно пути всех реальных процессов. Эх, проговорился )
карма: 1

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#311: 2011-05-18 15:56:33 ЛС | профиль | цитата
goluzov, на, пробуй следуюий релиз

enumprocess_015.zip
------------ Дoбавленo в 15.56:
Проверь TerminateApp под разными компиляторами на разных системах
карма: 22

0
файлы: 1enumprocess_015.zip [7KB] [213]
Ответов: 245
Рейтинг: 3
#312: 2011-05-18 16:33:06 ЛС | профиль | цитата
1nd1g0, если в винXP я администратор... то почему не хватает прав
------------ Дoбавленo в 16.33:
если я под SYSTEM то видит все
карма: 0

0
Ответов: 3889
Рейтинг: 362
#313: 2011-05-18 16:34:17 ЛС | профиль | цитата
goluzov, по той же причине, по которой на NTFS Вы не сможете не меняя прав, сделать что-то с папкой System Volume Information (результат работы средств восстановления системы). По умолчанию Администратор не имеет многих прав, они есть только у системы.
------------ Дoбавленo в 16.34:
goluzov писал(а):
если я под SYSTEM то видит все
донёс, наконец, мысль, убедились?
карма: 1

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#314: 2011-05-19 02:11:46 ЛС | профиль | цитата
goluzov, и куда ты пропал
карма: 22

0
Ответов: 245
Рейтинг: 3
#315: 2011-05-19 02:47:32 ЛС | профиль | цитата
да я вот думаю как под SYSTEM запустить на winXP 64. через сервисы только вроде как можно...
------------ Дoбавленo в 02.47:
015 не выводит путь
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)