カーネルコードの中でWOW64のSuspendThreadで中断
カーネルコードでは SuspendThread WOW64 関数を使ってスレッドを停止することができます。関数のプロトタイプは以下のとおりです。
DWORD WINAPI SuspendThread(
HANDLE hThread
);
スレッドをサスペンドする対象スレッドのハンドルです。関数は、サスペンド処理前の対象スレッドのサスペンドカウントを返します。関数の呼び出しが成功した場合、0 以外の値を返します。関数の呼び出しが失敗した場合、0 を返します。
以下に、カーネルコード内でSuspendThread WOW64 関数を使用してスレッドをサスペンドする方法のサンプルコードを示します。
#include <windows.h>
// 要挂起的线程的句柄
HANDLE hThread = NULL;
// 获取线程句柄
hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, threadId);
if (hThread == NULL)
{
// 处理错误
return;
}
// 挂起线程
DWORD suspendCount = SuspendThread(hThread);
if (suspendCount == (DWORD)-1)
{
// 处理错误
}
// 关闭线程句柄
CloseHandle(hThread);
なお、SuspendThread WOW64関数を使用するには、あらかじめスレッドのハンドルを取得しておく必要があります。サンプルコードでは、OpenThread関数を使用してスレッドハンドルを取得しています。スレッドハンドルを取得した後は、SuspendThread WOW64関数を呼び出してスレッドをサスペンドします。最後に、CloseHandle関数を呼び出してスレッドハンドルをクローズし、リソースを解放します。