///<summary>
/// Terminate a process tree
///</summary>
///<param name="hProcess">The handle of the process</param>
///<param name="processID">The ID of the process</param>
///<param name="exitCode">The exit code of the process</param>
public
void
TerminateProcessTree(IntPtr hProcess,
uint
processID,
int
exitCode)
{
Process[] processes = Process.GetProcesses();
foreach
(Process p
in
processes)
{
PROCESS_BASIC_INFORMATION pbi =
new
PROCESS_BASIC_INFORMATION();
try
{
uint
bytesWritten;
NtQueryInformationProcess(p.Handle,
0,
ref
pbi, (
uint
)Marshal.SizeOf(pbi),
out
bytesWritten);
if
(pbi.InheritedFromUniqueProcessId == processID)
TerminateProcessTree(p.Handle, pbi.UniqueProcessId, exitCode);
}
catch
(Exception
)
{
}
}
TerminateProcess((
uint
)hProcess, exitCode);
}