Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите поменять процесс-родитель

465
01 февраля 2013 года
QWERYTY
595 / / 25.03.2012
Код:
//Импорт функций

function NtQueryInformationProcess(HProcess: CARDINAL; ProcessInformationClass: BYTE; ProcessInformation: POINTER; ProcessInformationLength: CARDINAL; ReturnLength: POINTER): CARDINAL; stdcall; external 'ntdll.dll' name 'NtQueryInformationProcess';
function NtCreateProcessEx(PHandleProcess: POINTER; DesiredAccess: CARDINAL; ObjectAttributes: POINTER; ParentProcess: CARDINAL; Flags: CARDINAL; SectionHandle: CARDINAL; DebugPort: CARDINAL; ExceptionPort: CARDINAL; InJob: BOOL): CARDINAL; stdcall; external 'ntdll.dll' name 'NtCreateProcessEx';
function NtCreateProcess(PHandleProcess: POINTER; DesiredAccess: CARDINAL; ObjectAttributes: POINTER; ParentProcess: CARDINAL; InheritObjectTable: BOOL; SectionHandle: CARDINAL; DebugPort: CARDINAL; ExceptionPort: CARDINAL): CARDINAL; stdcall; external 'ntdll.dll' name 'NtCreateProcess';
function NtSetInformationProcess(HProcess: CARDINAL; ProcessInformationClass: BYTE; ProcessInformation: POINTER; ProcessInformationLength: CARDINAL): CARDINAL; stdcall; external 'ntdll.dll' name 'NtSetInformationProcess';



const
  ProcessBasicInformation = 0;


type
  PROCESS_BASIC_INFORMATION = packed record
                              ExitStatus: CARDINAL;
                              PebBaseAddress: POINTER;
                              AffinityMask: CARDINAL;
                              BasePriority: CARDINAL;
                              uUniqueProcessId: CARDINAL;
                              uInheritedFromUniqueProcessId: CARDINAL;
                              end;



//Сам код

Err := CreateProcessW(ApplicationName, NIL, NIL, NIL, FALSE, CREATE_SUSPENDED, NIL, PWideChar(ExtractFileDir(ApplicationName)), SI, PI);


NtErr := NtQueryInformationProcess(PI.hProcess, ProcessBasicInformation, Addr(PBI), SizeOf(PBI), NIL);
if NtErr = NO_ERROR then Form1.Memo1.Lines.Add(IntToStr(PBI.uInheritedFromUniqueProcessId));
// На этом этапе всё нормально, я получаю в мемо PId процесса-родителя

PBI.uInheritedFromUniqueProcessId := 1372; // Это PId эксплорера на момент эксперимертов
NtErr := NtSetInformationProcess(PI.hProcess, ProcessBasicInformation, Addr(PBI), SizeOf(PBI));
// Вот тут ощибка 0хС0000003.
// Из апимонитора узнал что функция возвращает STATUS_INVALID_INFO_CLASS. Недопустимый параметр. Указанный класс сведений не является допустимым классом сведений для выбранного объекта
Пробовал перехватывать NtCreateProcessEx. Там есть одним из параметров ParentProcess. Это якобы хендл родительского процесса. При вызове моей функции(которая подменяет NtCreateProcessEx) я извлекаю хендл, но он какойто странный(имеет большое значение) и не совпадает с хендлом который я получаю с помощью OpenProcess.
Если подменить этот хендл на полученный при помощи OpenProcess то вызываемая программа вообще не запускается.
А CreateProcess возвращает ошибку.

Что посоветуете? Может можно как нибудь проще? Может можно как нибудь считать участок памяти где находится PROCESS_BASIC_INFORMATION, поменять там всё по своему усмотрению, и обратно записать?
Я не смог проверить такой вариант потому что не понимаю как вычислить адрес начала PROCESS_BASIC_INFORMATION.
1
01 февраля 2013 года
kot_
7.3K / / 20.01.2000
"Родителей, сынок, не выбирают"(с)
вообщето в ядре венды есть два массива (для NT5, если выше то три) дескрипторов запущеных процессов (один список дескрипторов, второй - кто чей родитель (опять же для ХР)). Не знаю как это может помочь практически - но думаю что надо за этим лезть туды
465
01 февраля 2013 года
QWERYTY
595 / / 25.03.2012
Да, из под ядра хорошо конечно. Но в делфи я бы не хотел с этим возиться.
Читал както статейку как на делфи выполнить код в ядре без драйвера, но там кода дохрена и данная задача не на столько важна чтоб разбираться со всем этим.

Хотел избавиться от необходимости внедрения длл в эксплорер
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог