На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> "Объединение" процессов в группу или Job Objects
    Привет, тут такая задачка: моя программа (назовем "1") запускает другую, чужую программу ("2"), а та, в свою очередь запускает третью ("3", тоже чужая).
    Суть в том, что процессов "3" может быть много, и мне надо знать, какой из них был запущен по этой цепочке (1->2->3). Нашел такую штуку как Job Objects, и вроде они подходят, но у меня нифига не получается, примеров в инете мало (есть страничка Rouse http://alexander-bagel.blogspot.com/2015/02/job.html , но там немного другое). В общем, если Job objects подходят для этой задачи, отпишитесь, я скину код, или подскажите, как проще объединить процессы в группу (или вообще как-то по другому решить проблему).
    Сообщение отредактировано: shershen -
        Rouse_ , ты здесь? Можешь по существу вопроса подсказать плз? А то мне тут ссылками страшными угрожают) Вот, например, конкретный вопрос. Пробую добавить свой же процесс в объект и получаю access denied, код типа такого:

        ExpandedWrap disabled
          JobObj := CreateJobObjectA(nil,'MyJobObject');
          AssignProcessToJobObject(JobObj, GetCurrentProcess());//access denied


        Если же я добавляю чужой процесс, то добавляется успешно, но IsProcessInJob всегда возвращает false, типа так:

        ExpandedWrap disabled
          AssignProcessToJobObject(JobObj, PI.hProcess); // норм
          IsProcessInJob(PI.hProcess, JobObj, IsInJob) //возвращает false
          Ну так мануал глянь по апишке, я то откуда знаю чего он хочет? :)))

          Цитата
          Return value
          If the function succeeds, the return value is nonzero.

          If the function fails, the return value is zero. To get extended error information, call GetLastError.


          https://msdn.microsoft.com/en-us/library/wi...7(v=vs.85).aspx

          Добавлено
          Цитата
          Суть в том, что процессов "3" может быть много, и мне надо знать, какой из них был запущен по этой цепочке (1->2->3).

          А вообще это делается гораздо проще, можно дернуть NtQueryInformationProcess с флагом ProcessBasicInformation и структурой PROCESS_BASIC_INFORMATION для каждого процесса, и просто посмотреть кто родитель в параметре InheritedFromUniqueProcessId.
          Пробежавшись по всем начиная с конца (да хоть в каком угодно порядке) ты и получишь кто кого запускал.
          Сообщение отредактировано: Rouse_ -
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0352 ]   [ 16 queries used ]   [ Generated: 29.03.24, 07:33 GMT ]