Здарова, Вот я скачал пример внедрения dll в этого сайта, тема - "перехват API". Все в принципе работает, но только когда перед внедрением создается новый процесс например нотепада, но если я при запуске просто пытаюсь получить id уже работающего процесса, то dll уже не внедряется. Так вот мне бы хотелось знать как можно внедрить dll получив id уже работающего процесса? Спасибо
Уточняю что я имею ввиду. Вот исходник: program aInjectDll; uses Windows, advApiHook; var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; begin //Запускаем процесс ZeroMemory(@StartInfo, SizeOf(TStartupInfo)); StartInfo.cb := SizeOf(TStartupInfo); CreateProcess(nil, 'notepad.exe', nil, nil, False, 0, nil, nil, StartInfo, ProcInfo); Sleep(2000); //внедряем dll InjectDll(ProcInfo.hProcess, 'TestDll.dll'); end. Мне надо, чтобы он работал не с CreateProcess, а получал id работающего процесса. Я пробовал OpenProcess, но он чтото у меня не работает, может кто нибуть знает как можно модифицировать этот исходник.
привилегии отладки нужны, если открываешь system процесс. в другом случае делаешь так: Код (Text): hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, Process); и пишешь в него.
OpenProcess(PROCESS_ALL_ACCESS, FALSE, Process); a Process это что? как я понял это не название процесса
Это его идентификатор. PID называется. В TaskManager, который всплывает по Ctrl+Alt+Del, можно включить отображение PID.
Ну правильно, я изменил код вот так: program aInjectDll; uses Windows, advApiHook; var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; begin Proc2 := Getprocessid(PChar('notepad.exe')); //Proc := FProcessEntry32.th32ProcessID; H := OpenProcess(PROCESS_ALL_ACCESS, true, Proc2); Sleep(2000); //внедряем dll InjectDll(H, 'TestDll.dll'); end. но все равно последняя функция не работает. Кстати когда я сравниваю процесс полученный с помощью createProcess и OpenProcess, значения разные, так что я совсем запутался