注意:需要使用DuplicateHandle来获得当前线程的HANDLE,否则不能成功删除主线程。删除后执行TerminateThread的子线程篡位成为主线程。
- //
- // CopyRight(c) 2009, YOYO, All Rights Reserved.
- // Author: LIN YiQian
- // Created: 2009/09/16
- // Describe: 子线程杀死主线程 演示
- //
- #include <Windows.h>
- #include <iostream>
- using namespace std;
- DWORD WINAPI ThreadFun(LPVOID lpParameter);
- void main(void)
- {
- HANDLE hMainThread;
- DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(),
- &hMainThread, 0, FALSE, DUPLICATE_SAME_ACCESS);
- HANDLE hThread = CreateThread(NULL, 0, ThreadFun, &hMainThread, 0, NULL);
- while (true)
- {
- printf("主线程运行中 - -../n");
- Sleep(100);
- }
- CloseHandle(hThread);
- return;
- }
- DWORD WINAPI ThreadFun(LPVOID lpParameter)
- {
- HANDLE hMainThread = *((HANDLE*) lpParameter);
- TerminateThread(hMainThread, 0);
- while (true)
- {
- printf("子线程运行中。。/n");
- Sleep(100);
- }
- }