<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209099&amp;view=findpost&amp;p=1753823</guid>
        <pubDate>Tue, 06 Nov 2007 10:23:43 +0000</pubDate>
        <title>Как узнать процесс родителя.</title>
        <link>https://forum.sources.ru/index.php?showtopic=209099&amp;view=findpost&amp;p=1753823</link>
        <description><![CDATA[Rouse_: Узнать родителя любого процесса можно и без перебора процессов в снимке. Например вот так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;PROCESS_BASIC_INFORMATION = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;ExitStatus: DWORD;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PebBaseAddress: Pointer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;AffinityMask: DWORD;</div><div class="code_line">&nbsp;&nbsp; &nbsp;BasePriority: DWORD;</div><div class="code_line">&nbsp;&nbsp; &nbsp;uUniqueProcessId: Ulong;</div><div class="code_line">&nbsp;&nbsp; &nbsp;uInheritedFromUniqueProcessId: Ulong;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">function &nbsp;NtQueryInformationProcess(</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessHandle : THandle;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessInformationClass : Byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessInformation : Pointer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessInformationLength : ULONG;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ReturnLength : PULONG</div><div class="code_line">&nbsp;&nbsp;): DWORD; stdcall; external &#39;ntdll.dll&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">function GetOwnedProcessID(const dwProcessHandle: DWORD): DWORD;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;ProcessBasicInformation = 0;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Info: PROCESS_BASIC_INFORMATION;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result := 0;</div><div class="code_line">&nbsp;&nbsp;if NtQueryInformationProcess(dwProcessHandle,</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessBasicInformation, @Info, SizeOf(Info), nil) = NO_ERROR then</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result := Info.uInheritedFromUniqueProcessId;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Вот так будет выглядеть получение родителя от текущего процесса:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;dwProcessHandle: DWORD;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;DuplicateHandle(GetCurrentProcess, GetCurrentProcess, GetCurrentProcess,</div><div class="code_line">&nbsp;&nbsp; &nbsp;@dwProcessHandle, 0, False, DUPLICATE_SAME_ACCESS);</div><div class="code_line">&nbsp;&nbsp;Caption := IntToStr(GetOwnedProcessID(dwProcessHandle));</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>Rouse_</author>
        <category>Системные функции, WinAPI, работа с железом</category>
      </item>
	
      </channel>
      </rss>
	