.版本 2 .子程序 清空调试器 .局部变量 sHandle, 整数型 .局部变量 lpTe, THREADENTRY32 .局部变量 Found, 整数型 .局部变量 ret, 整数型 .局部变量 sThread, 整数型 .局部变量 tFound, 整数型 .局部变量 当前线程ID, 整数型 .局部变量 Context, ConTEXT .局部变量 l_线程句柄, 整数型 当前线程ID = GetCurrentThreadId () sThread = CreateToolhelp32Snapshot (#TH32CS_SNAPTHREAD, 0) lpTe.dwSize = 28 tFound = Thread32First (sThread, lpTe) .判断循环首 (tFound ≠ 0) .如果真 (lpTe.th32OwnerProcessID = 进程_取自进程ID ()) Context.ContextFlags = 位或 (65543, 65552) .如果真 (lpTe.th32ThreadID ≠ 当前线程ID) l_线程句柄 = OpenThread (#THREAD_ALL_ACCESS, 0, lpTe.th32ThreadID) SuspendThread (l_线程句柄) GetThreadContext (l_线程句柄, Context) Context.Dr0 = 0 Context.Dr1 = 0 Context.Dr2 = 0 Context.Dr3 = 0 Context.Dr7 = 0 SetThreadContext (l_线程句柄, Context) ResumeThread (l_线程句柄) CloseHandle (l_线程句柄) .如果真结束 .如果真结束 tFound = Thread32Next (sThread, lpTe) .判断循环尾 () CloseHandle (sThread) 写成c++代码
时间: 2024-04-09 16:31:00 浏览: 15
#include <windows.h>
#include <tlhelp32.h>
void ClearDebugger()
{
HANDLE sThread, l_线程句柄;
THREADENTRY32 lpTe;
BOOL Found, tFound;
DWORD ret, sHandle, sThreadID, 当前线程ID;
CONTEXT Context;
当前线程ID = GetCurrentThreadId();
sThread = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
lpTe.dwSize = sizeof(lpTe);
tFound = Thread32First(sThread, &lpTe);
while (tFound != FALSE)
{
if (lpTe.th32OwnerProcessID == GetCurrentProcessId())
{
Context.ContextFlags = CONTEXT_DEBUG_REGISTERS;
if (lpTe.th32ThreadID != 当前线程ID)
{
l_线程句柄 = OpenThread(THREAD_ALL_ACCESS, 0, lpTe.th32ThreadID);
SuspendThread(l_线程句柄);
GetThreadContext(l_线程句柄, &Context);
Context.Dr0 = 0;
Context.Dr1 = 0;
Context.Dr2 = 0;
Context.Dr3 = 0;
Context.Dr7 = 0;
SetThreadContext(l_线程句柄, &Context);
ResumeThread(l_线程句柄);
CloseHandle(l_线程句柄);
}
}
tFound = Thread32Next(sThread, &lpTe);
}
CloseHandle(sThread);
}