Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.125.219] |
|
Сообщ.
#1
,
|
|
|
Привет, тут такая задачка: моя программа (назовем "1") запускает другую, чужую программу ("2"), а та, в свою очередь запускает третью ("3", тоже чужая).
Суть в том, что процессов "3" может быть много, и мне надо знать, какой из них был запущен по этой цепочке (1->2->3). Нашел такую штуку как Job Objects, и вроде они подходят, но у меня нифига не получается, примеров в инете мало (есть страничка Rouse http://alexander-bagel.blogspot.com/2015/02/job.html , но там немного другое). В общем, если Job objects подходят для этой задачи, отпишитесь, я скину код, или подскажите, как проще объединить процессы в группу (или вообще как-то по другому решить проблему). |
Сообщ.
#2
,
|
|
|
Сообщ.
#3
,
|
|
|
Rouse_ , ты здесь? Можешь по существу вопроса подсказать плз? А то мне тут ссылками страшными угрожают) Вот, например, конкретный вопрос. Пробую добавить свой же процесс в объект и получаю access denied, код типа такого:
JobObj := CreateJobObjectA(nil,'MyJobObject'); AssignProcessToJobObject(JobObj, GetCurrentProcess());//access denied Если же я добавляю чужой процесс, то добавляется успешно, но IsProcessInJob всегда возвращает false, типа так: AssignProcessToJobObject(JobObj, PI.hProcess); // норм IsProcessInJob(PI.hProcess, JobObj, IsInJob) //возвращает false |
Сообщ.
#4
,
|
|
|
Ну так мануал глянь по апишке, я то откуда знаю чего он хочет? ))
Цитата 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. Пробежавшись по всем начиная с конца (да хоть в каком угодно порядке) ты и получишь кто кого запускал. |