// 01.入口点.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
using namespace std;
// 要release模式才能运行
// 链接器->高级->入口点
void My24() {
cin.get();
MessageBox(0, 0, 0, 0);
}
int main()
{
return 0;
}
=====================
// 02.线程创建.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
int g_nNum = 0;
DWORD WINAPI ThreadProc(LPVOID lParam) {
printf("我是线程!\n");
for (int i=0;i<100000;i++)
{
g_nNum++;
}
printf("%d\n", g_nNum);
return 0;
}
int main()
{
CreateThread(NULL, NULL, ThreadProc, NULL, 0, NULL);
CreateThread(NULL, NULL, ThreadProc, NULL, 0, NULL);
system("pause");
printf("%d\n", g_nNum);
return 0;
}
=======================
// 03.关闭其他进程.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
bool KillProcess(DWORD dwPid) {
// 打开进程
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,NULL,dwPid);
if (!hProcess)
{
return false;
}
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
return true;
}
int main()
{
KillProcess(4484);
//exit(0);
return 0;
}
===========================
// 04.遍历进程.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
bool EnumProcess() {
// 1. 先创建快照
HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (INVALID_HANDLE_VALUE == hTool32)
{
printf("快照error!\n");
return false;
}
// 2. 开始遍历进程
PROCESSENTRY32W psi = { sizeof(PROCESSENTRY32W) };
BOOL bRet = Process32FirstW(hTool32, &psi);
if (!bRet)
{
printf("Process32FirstW error!\n");
return false;
}
printf("PID EXE:\n");
do
{
printf("%4d %S\n", psi.th32ProcessID, psi.szExeFile);
} while (Process32NextW(hTool32, &psi));
return true;
}
int main()
{
EnumProcess();
return 0;
}
======================
// 05.遍历线程.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
bool EnumThreads(DWORD dwPID) {
// 1. 先创建快照
HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, NULL);
if (INVALID_HANDLE_VALUE == hTool32)
{
printf("快照error!\n");
return false;
}
// 2. 开始遍历进程
THREADENTRY32 ti = { sizeof(THREADENTRY32) };
BOOL bRet = Thread32First(hTool32, &ti);
if (!bRet)
{
printf("Thread32First error!\n");
return false;
}
printf("tID pid:\n");
do
{
if (ti.th32OwnerProcessID == dwPID)
{
printf("%6d %6d\n", ti.th32ThreadID, ti.th32OwnerProcessID);
}
} while (Thread32Next(hTool32, &ti));
return true;
}
int main()
{
EnumThreads(7568);
return 0;
}
=====================
// 06.遍历模块.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
bool EnumModule(DWORD dwPID) {
// 1. 先创建快照
HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (INVALID_HANDLE_VALUE == hTool32)
{
printf("快照error!\n");
return false;
}
// 2. 开始遍历进程
MODULEENTRY32W mi = { sizeof(MODULEENTRY32W) };
BOOL bRet = Module32First(hTool32, &mi);
if (!bRet)
{
printf("Module32First error!\n");
return false;
}
printf("baseaddr size handle name:\n");
do
{
printf("%08x %08x %08x %S\n",
(DWORD)mi.modBaseAddr,
mi.modBaseSize,
mi.hModule,
mi.szModule);
} while (Module32NextW(hTool32, &mi));
return true;
}
bool EnumProcess() {
// 1. 先创建快照
HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (INVALID_HANDLE_VALUE == hTool32)
{
printf("快照error!\n");
return false;
}
// 2. 开始遍历进程
PROCESSENTRY32W psi = { sizeof(PROCESSENTRY32W) };
BOOL bRet = Process32FirstW(hTool32, &psi);
if (!bRet)
{
printf("Process32FirstW error!\n");
return false;
}
printf("PID EXE:\n");
do
{
//printf("%4d %S\n", psi.th32ProcessID, psi.szExeFile);
EnumModule(psi.th32ProcessID);
} while (Process32NextW(hTool32, &psi));
return true;
}
int main()
{
EnumProcess();
return 0;
}
==================
// 07.伪句柄转真正句柄.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
DWORD WINAPI ChildThread(PVOID pParam) {
HANDLE hThreadParent = (HANDLE)pParam;
FILETIME stcCreationTime, stcExitTime;
FILETIME stcKernelTime, stcUserTime;
GetThreadTimes(hThreadParent, &stcCreationTime,
&stcExitTime, &stcKernelTime, &stcUserTime);
return 0;
}
DWORD WINAPI ShowParentTime() {
HANDLE hThreadParent = GetCurrentThread();
// 把伪句柄转换成真正的句柄值
HANDLE hTranslate = 0;
DuplicateHandle(
GetCurrentProcess(),//你要转换的句柄值所在的进程句柄
hThreadParent,// 你要转换哪个句柄
GetCurrentProcess(),// 你要转换的句柄给哪个进程
&hTranslate,
DUPLICATE_SAME_ACCESS,// 一样的权限
NULL,
DUPLICATE_SAME_ACCESS);
CreateThread(NULL, 0, ChildThread,
(PVOID)hTranslate, 0, NULL);
return 0;
}
int main()
{
FILETIME stcCreationTime, stcExitTime;
FILETIME stcKernelTime, stcUserTime;
GetThreadTimes(GetCurrentThread(), &stcCreationTime,
&stcExitTime, &stcKernelTime, &stcUserTime);
ShowParentTime();
system("pause");
return 0;
}