精华内容
下载资源
问答
  • 进程遍历

    2015-06-12 14:31:14
    进程遍历的功能太常用了,记录一下: #include #include #include #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { std::ofstream ofile("C:\\lo.txt"); while(true) { ...

    进程遍历的功能太常用了,记录一下:

    #include<iostream>
    #include<Windows.h>
    #include<TlHelp32.h>
    #include <atlstr.h>
    #include <fstream>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    
    	std::ofstream ofile("C:\\lo.txt");
    	while(true)
    	{
    
    		HANDLE handle;	 //定义CreateToolhelp32Snapshot系统快照句柄 
    
    		HANDLE handle1;	 //定义要结束进程句柄 
    
    		handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//获得系统快照句柄 
    
    		PROCESSENTRY32 *info;	 //定义PROCESSENTRY32结构字指 
    
    		//PROCESSENTRY32  结构的 dwSize 成员设置成 sizeof(PROCESSENTRY32) 
    
    		info=new PROCESSENTRY32;             
    
    		info->dwSize=sizeof(PROCESSENTRY32); 
    
    		//调用一次 Process32First 函数,从快照中获取进程列表 
    
    		Process32First(handle,info); 
    
    		//重复调用 Process32Next,直到函数返回 FALSE 为止 
    		std::cout<<"start..."<<std::endl;
    
    		while(Process32Next(handle,info)!=FALSE) 
    		{ 
    
    			info->szExeFile;     //指向进程名字 
    			CString str;
    			str.Format("id:%d, name:%s",info->th32ProcessID,info->szExeFile);
    			std::cout<<str.GetString()<<std::endl;
    			ofile<<str.GetString()<<std::endl;
    
    		} 
    		CloseHandle(handle);
    
    		Sleep(500);
    	}
    
    
    
    
    
    
    	return 0;
    }

    展开全文
  • 进程遍历前先获取进程快照 代码例子如下:具体API使用查csdn //创建进程快照(获取系统正在运行的进程信息,线程信息等) //第二个参数一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或...

    进程遍历前先获取进程快照

    代码例子如下:具体API使用查csdn

     //创建进程快照(获取系统正在运行的进程信息,线程信息等)
      //第二个参数一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取当前进程快照时可以设为0
      HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      if (hProcessSnap == INVALID_HANDLE_VALUE)
      {
        AfxMessageBox(_T("创建进程快照失败"));
        return;
      }
      PROCESSENTRY32 sProSnap;
      sProSnap.dwSize = sizeof(sProSnap);
    
      //从进程快照中获取第一个进程信息
      BOOL bRet = Process32First(hProcessSnap, &sProSnap);
      if (bRet)
      {
        do 
        {
          CString csFmt;
          csFmt.Format(_T("ID:%d  parent ID:%d  path:%s"),
            sProSnap.th32ProcessID,
            sProSnap.th32ParentProcessID,
            sProSnap.szExeFile);
          OutputDebugString(csFmt);
    
          bRet = Process32Next(hProcessSnap, &sProSnap);
        } while (bRet);
       
      }

    线程和模块遍历和进程遍历类似

    线程遍历

    CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);//创建线程快照
    
    Thread32First(hSnapshot, &ppe);//获取第一个线程
    
    Thread32Next(hSnapshot, &ppe);//获取下一个线程
    

    模块遍历

    CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0);//创建模块快照
    
    Module32First(hSnapshot, &ppe);//获取第一个模块
    
    Module32Next(hSnapshot, &ppe);//获取下一个模块

    窗口遍历

    HWND hWnd = ::GetDesktopWindow();//获取桌面窗口句柄,因为桌面是最后一个窗口
    
    HWND hNext = ::GetWindow(hWnd, GW_CHILD);//获取桌面上一个窗口句柄
    do 
    {
    TCHAR szBuff[MAXBYTE] = { 0 };
    ::GetWindowText(hNext, szBuff, MAXBYTE);
    
    DWORD dwProcId = 0;
    DWORD dwThreadId = GetWindowThreadProcessId(hNext, &dwProcId);
    
    CString csFmt;
    csFmt.Format(_T("procid:%d name:%s"),
        dwProcId,
        szBuff);
    
    OutputDebugString(csFmt);
    
    hNext = ::GetNextWindow(hNext, GW_HWNDNEXT);
    } while (hNext != NULL);

     

    进程间读写和修改内存属性

      int nAddr = GetDlgItemInt(EDT_ADDR);//从控件获取地址
      
      //1. 查找窗口
      HWND hWnd = ::FindWindow(NULL, _T("TestMemory"));
    
      //2. 拿到进程id
      DWORD dwProcessId;
      ::GetWindowThreadProcessId(hWnd, &dwProcessId);
    
      //3. 打开进程
      HANDLE hProcess = ::OpenProcess(
        PROCESS_ALL_ACCESS,
        TRUE,
        dwProcessId);
    
      //修改内存属性
      DWORD dwOldProtect = 0;
      BOOL bRet = VirtualProtectEx(
        hProcess, //进程句柄
        (LPVOID)nAddr, //修改内存属性的地址
        1,//修改整个分页(修改是按分页单位修改的,写1个字节也会修改一个分页)
        PAGE_EXECUTE_READWRITE,//修改为读写权限
        &dwOldProtect);
      if (!bRet)
      {
        AfxMessageBox(_T("修改失败!"));
      }
    
      //4. 写入数据
      char chByte = 0xeb;
      bRet = WriteProcessMemory(
        hProcess, //进程句柄
        (LPVOID)nAddr, //写入内存的地址
        &chByte, //写入的数据
        sizeof(chByte), //写入数据的大小
        NULL);
      if (!bRet)
      {
        AfxMessageBox(_T("写入失败!"));
      }
    
      //还原原来的内存属性
      bRet = VirtualProtectEx(
        hProcess, //进程句柄
        (LPVOID)nAddr, //修改内存属性的地址
        1,//修改整个分页
        dwOldProtect,
        &dwOldProtect);

     

    展开全文
  • c++实现进程遍历

    2020-10-05 08:38:41
    c++实现进程遍历 #include "stdafx.h" #include <Windows.h> #include <TlHelp32.h> void ShowError(char *lpszText) { char szErr[MAX_PATH] = {0}; ::wsprintf(szErr, "%s Error[%d]\n", lpszText,...

    c++实现进程遍历

    #include "stdafx.h"
    #include <Windows.h>
    #include <TlHelp32.h>
    
    void ShowError(char *lpszText)
    {
    	char szErr[MAX_PATH] = {0};
    	::wsprintf(szErr, "%s Error[%d]\n", lpszText, ::GetLastError());
    #ifdef _DEBUG
    	::MessageBox(NULL, szErr, "ERROR", MB_OK);
    #endif
    }
    
    
    BOOL EnumProcess()
    {
    	PROCESSENTRY32 pe32 = { 0 };
    	pe32.dwSize = sizeof(PROCESSENTRY32);
    	// 获取全部进程快照
    	HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    	if (INVALID_HANDLE_VALUE == hProcessSnap)
    	{
    		ShowError("CreateToolhelp32Snapshot");
    		return FALSE;
    	}
    
    	// 获取快照中第一条信息
    	BOOL bRet = ::Process32First(hProcessSnap, &pe32);
    	while (bRet)
    	{
    		// 显示 Process ID
    		printf("[%d]\t", pe32.th32ProcessID);
    
    		// 显示 进程名称
    		printf("[%s]\n", pe32.szExeFile);
    
    		// 获取快照中下一条信息
    		bRet = ::Process32Next(hProcessSnap, &pe32);
    	}
    
    	// 关闭句柄
    	::CloseHandle(hProcessSnap);
    
    	return TRUE;
    }
    
    
    BOOL EnumThread()
    {
    	THREADENTRY32 te32 = { 0 };
    	te32.dwSize = sizeof(THREADENTRY32);
    	// 获取全部线程快照
    	HANDLE hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
    	if (INVALID_HANDLE_VALUE == hThreadSnap)
    	{
    		ShowError("CreateToolhelp32Snapshot");
    		return FALSE;
    	}
    
    	// 获取快照中第一条信息
    	BOOL bRet = ::Thread32First(hThreadSnap, &te32); 
    	while (bRet)
    	{
    		// 显示 Owner Process ID
    		printf("[%d]\t", te32.th32OwnerProcessID);
    
    		// 显示 Thread ID
    		printf("[%d]\n", te32.th32ThreadID);
    
    		// 获取快照中下一条信息
    		bRet = ::Thread32Next(hThreadSnap, &te32);
    	}
    
    	// 关闭句柄
    	::CloseHandle(hThreadSnap);
    
    	return TRUE;
    }
    
    
    BOOL EnumProcessModule(DWORD dwProcessId)
    {
    	MODULEENTRY32 me32 = { 0 };
    	me32.dwSize = sizeof(MODULEENTRY32);
    	// 获取指定进程全部模块的快照
    	HANDLE hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
    	if (INVALID_HANDLE_VALUE == hModuleSnap)
    	{
    		ShowError("CreateToolhelp32Snapshot");
    		return FALSE;
    	}
    
    	// 获取快照中第一条信息
    	BOOL bRet = ::Module32First(hModuleSnap, &me32);
    	while (bRet)
    	{
    		// 显示 Process ID
    		printf("[%d]\t", me32.th32ProcessID);
    
    		// 显示 模块加载基址
    		printf("[0x%p]\t", me32.modBaseAddr);
    
    		// 显示 模块名称
    		printf("[%s]\n", me32.szModule);
    
    		// 获取快照中下一条信息
    		bRet = ::Module32Next(hModuleSnap, &me32);
    	}
    
    	// 关闭句柄
    	::CloseHandle(hModuleSnap);
    
    	return TRUE;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    	// 遍历进程
    	if (FALSE == EnumProcess())
    	{
    		printf("Enum Process Error!\n");
    	}
    
    	system("pause");
    	system("cls");
    
    	// 遍历线程
    	if (FALSE == EnumThread())
    	{
    		printf("Enum Thread Error!\n");
    	}
    
    	system("pause");
    	system("cls");
    
    	// 遍历指定进程模块
    	if (FALSE == EnumProcessModule(6876))
    	{
    		printf("Enum Process Module Error!\n");
    	}
    
    	system("pause");
    	return 0;
    }
    
    展开全文
  • 在我们开发程序的时候,经常需要在程序中实现遍历进程遍历线程和遍历进程加载模块等获取系统信息的操作。 本文是基于Win32 API函数实现这三个常用操作,当然,方法肯定不止有一种。比如,我写的《在VS2013中编程...

    背景

    在我们开发程序的时候,经常需要在程序中实现遍历进程、遍历线程和遍历进程加载模块等获取系统信息的操作。

    本文是基于Win32 API函数实现这三个常用操作,当然,方法肯定不止有一种。比如,我写的《在VS2013中编程使用WMI》这篇文章中,使用的是WMI去遍历进程的。

    现在,我把这个小程序实现的思路以及实现过程,写成文档分享给大家。

    点击此处下载文档和源码

     

     

    展开全文
  • 文章目录功能技术模块进程遍历WIN APICreateToolhelp32SnapshotProcess32FirstPROCESS32Next编码实现运行效果图判断是否存在杀软运行效果 功能技术模块 病毒木马的入侵并潜伏在用户计算机上总是有着某种目的,例如...
  • 进程遍历创建进程快照遍历首次进程遍历下个进程API调用链 恶意代码的包括计算机病毒、蠕虫、木马、后门、流氓软件、Exploit等等。 恶意代码常见功能技术如下:进程遍历,文件遍历,按键记录,后门,桌面截屏,文件...
  • 进程遍历模块遍历

    2016-03-22 08:03:00
    // 遍历进程Dlg.cpp : 实现文件 // #include "stdafx.h" #include "遍历进程.h" #include "遍历进程Dlg.h" #include "afxdialogex.h" #include <windows.h> #include <TlHelp32.h> #include &...
  • 在我们开发程序的时候,经常需要在程序中实现遍历进程遍历线程和遍历进程加载模块等获取系统信息的操作。 本文是基于Win32 API函数实现这三个常用操作,当然,方法肯定不止有一种。比如,我写的《在VS2013中...
  • Windows编程之进程遍历 PS: 主要扣代码使用,直接滑动到最下面使用. 遍历进程需要几个API,和一个结构体  1.创建进程快照  2.遍历首次进程  3.继续下次遍历  4.进程信息结构体 API 分别是: 1.创建进程...
  • 遍历进程// 初始化Process列表void InitProcessList(){ // 创建进程快照 HANDLE hProcessSnap = 0; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (hProcessSnap == INVALID_HANDLE_VALUE...
  • 内核级进程遍历

    千次阅读 2015-05-12 23:13:20
    每个程序都有_eprocess,里面有pid和程序名。 最重要的是有一个当前系统活动进程链表,通过对此链表的遍历,可以找到下一个进程eprocess节点,所以就可以对系统进程进行遍历了。
  • 遍历进程的源码,支持IDA,python等等,不多说了,自己体会。
  • linux内核模块之简单进程遍历

    千次阅读 2020-05-22 12:59:46
    编写一个内核模块,打印出系统中所有的进程进程名、PID号和进程状态,即实现进程遍历,类似ps命令。 操作如下 (注:内核进程此处称为内核线程,其实都是task_struct) 一、编写代码(list.c) #include <...
  • NtQuerySystemInformation(从PsIdleProcess进程开始通过EPROCESS.ActiveProcessLinks遍历进程,通过EPROCESS.Pcb.ThreadListHead遍历线程) NtQueryInformationProcess(通过ObReferenceObjectByHandle 得到...
  • Linux进程遍历

    2013-06-17 10:40:15
    #include task_struct *p; for_each_process(p) {  printk(" pid=%04d, %s\n", p->pid, p->comm);...init_task是linux内核虚拟的一个task结构,其他task都...可以通过task_struct结构中的tasks链表遍历linux任务。
  • #include <windows.h> #include <tlhelp32.h> //进程快照函数头文件 #include <stdio.h> int main() { int countProcess=0; //当前进程数量计数变量 PROCES...
  • 下面的代码就是把当前节点内所有进程遍历一遍,把进程状态写入到文本里面: process_infos() ->  filelib:ensure_dir("./log/"),  File = "./log/processes_infos.log",  {ok, Fd} = file:open(File, ...
  • 遍历进程,找到指定名字的进程
  • 进程遍历,根据进程名关闭进程

    千次阅读 2010-09-24 09:37:00
    以下程序可以实现每隔1秒遍历一次系统当前进程,关闭任务管理器和控制台进程。 编写/调试环境:visual c++ 6.0 #include <windows.h><br /> #include <Tlhelp32.h><br /> int WINAPI WinMain...
  • 题目来源 ...根据以下代码片提示,编写一个内核模块,能用DFS遍历所有进程,并打印到内核日志缓冲区 //Reference: struct task_struct *task; for_each_process(task) { printk("Name: %s PI...
  • X64进程遍历并获取进程主线程

    千次阅读 2016-12-03 15:08:28
    x64下windbg显示的进程结构体 1: kd> dt _SYSTEM_PROCESS_INFORMATION ole32!_SYSTEM_PROCESS_INFORMATION  +0x000 NextEntryOffset : Uint4B  +0x004 NumberOfThreads : Uint4B  +0x008 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 179,847
精华内容 71,938
关键字:

进程遍历