OpenThread
C# Signature:
[DllImport("kernel32.dll", SetLastError = true)]
static extern Microsoft.Win32.SafeHandles.SafeAccessTokenHandle OpenThread(
ThreadAccess dwDesiredAccess,
bool bInheritHandle,
uint dwThreadId
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle,
uint dwThreadId);
Boo Signature:
[DllImport("kernel32.dll")]
def OpenThread(dwDesiredAccess as int, bInheritHandle as bool, dwThreadId as int) as IntPtr:
pass
User-Defined Types:
[Flags]
public enum ThreadAccess : int
{
TERMINATE = (0x0001) ,
SUSPEND_RESUME = (0x0002) ,
GET_CONTEXT = (0x0008) ,
SET_CONTEXT = (0x0010) ,
SET_INFORMATION = (0x0020) ,
QUERY_INFORMATION = (0x0040) ,
SET_THREAD_TOKEN = (0x0080) ,
IMPERSONATE = (0x0100) ,
DIRECT_IMPERSONATION = (0x0200)
}
Sample Code:
private static void SuspendProcess(int pid)
{
var process = Process.GetProcessById(pid);
if (process.ProcessName == string.Empty)
{
return;
}
foreach (ProcessThread thread in process.Threads)
{
using (var handle =
OpenThread(
ThreadAccess.SUSPEND_RESUME,
false,
(uint)thread.IdThreadAccess)
) // using block ensures finalizer closes handle
{
if (!handle.IsInvalid)
{
SuspendThread(pOpenThread);
}
}
}
}
Última actualización