windows进程线程

// 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;
}

你可能感兴趣的:(windows进程线程)