<编程高手箴言>里讲到的一个分析实例(里面有一步暂停线程), 很有趣的一个实例, 于是自已准备也做出一个游戏内存修改器.实现到暂停线程这一步, 突然想看看效果.
我暂停线程的过程:
1.获得几乎所有线程句柄, 我用的是CreateToolhelp32Snapshot, Thread32First, Thread32Next几个函数
2.根据线程所属进程, 暂停指定进程里的所有线程 我用的是SuspendThread函数
之前看到小华子的BLOG文提到挂起System线程
于是自已也想试试, 先把自已的进程提升到DEBUG权限, 然后暂停System进程里的所有线程(不了解,所以就全部都暂停), 居然成功了, 不能切换到桌面, 也不能关机. 无奈, 只有强行关机.
下面是把进程提升为DEBUG权限的函数(来源网络)
BOOL EnableDebugPrivilege() //Call Success Return True,Failure Return FALSE
{
BOOL isSuccess=FALSE;
HANDLE hToken;
TOKEN_PRIVILEGES Privilege;
Privilege.PrivilegeCount=1;
Privilege.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&(Privilege.Privileges[0].Luid));
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
if(AdjustTokenPrivileges(hToken,FALSE,&Privilege,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
{
isSuccess=TRUE;
}
CloseHandle(hToken);
}
return isSuccess;
}
本文转载自:http://hi.baidu.com/gzlick/blog/item/9466709641c3376555fb96f6.html