C语言实现windows进程遍历
遍历进程
#include <windows.h>
#include <tlhelp32.h> //进程快照函数头文件
#include <stdio.h> int main()
{
int countProcess=; //当前进程数量计数变量
PROCESSENTRY32 currentProcess; //存放快照进程信息的一个结构体
currentProcess.dwSize = sizeof(currentProcess); //在使用这个结构之前,先设置它的大小
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,);//给系统内的所有进程拍一个快照 if (hProcess == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot()调用失败!\n");
return -;
} bool bMore=Process32First(hProcess,¤tProcess); //获取第一个进程信息
while(bMore)
{
printf("PID=%5u PName= %s\n",currentProcess.th32ProcessID,currentProcess.szExeFile); //遍历进程快照,轮流显示每个进程信息
bMore=Process32Next(hProcess,¤tProcess); //遍历下一个
countProcess++;
} CloseHandle(hProcess); //清除hProcess句柄
printf("共有以上%d个进程在运行\n",countProcess);
system("pause");
return ;
}
遍历线程
#include <windows.h>
#include <TlHelp32.h> #include <iostream>
#include <map>
#include <string>
using namespace std; BOOL traverseProcess(std::map<std::string, int>&_nameID){ PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32); HANDLE hProcessSnap;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, );
if (hProcessSnap == INVALID_HANDLE_VALUE){
cout << "CreateToolhelp32Snapshot Error!" << endl;
return false;
} if (!Process32First(hProcessSnap, &pe32)){
cout << "Process32First Error!" << endl;
CloseHandle(hProcessSnap);
return false;
} int num = ;
do{ int id = pe32.th32ProcessID; cout << "[" << ++num << "]:" << "------------"
<< "Process ID = " << id << endl; } while (Process32Next(hProcessSnap, &pe32)); CloseHandle(hProcessSnap); return true; } int main(){
map<string, int> _nameID; if (!traverseProcess(_nameID)){
cout << "Start Process Error!" << endl;
} system("pause"); }
遍历进程模块1
#include <windows.h>
#include <TlHelp32.h>
#include <locale.h>
#include <stdio.h> bool GetModuleList(DWORD dwPId) {
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
MODULEENTRY32 me32 = { sizeof(MODULEENTRY32) };
// 1. 创建一个模块相关的快照句柄
hModuleSnap = CreateToolhelp32Snapshot(
TH32CS_SNAPMODULE, // 指定快照的类型
dwPId); // 指定进程
if (hModuleSnap == INVALID_HANDLE_VALUE)
return false; // 2. 通过模块快照句柄获取第一个模块信息
if (!Module32First(hModuleSnap, &me32)) {
CloseHandle(hModuleSnap);
return false;
} // 3. 循环获取模块信息
do {
wprintf(L"模块基址:%d,模块大小:%d,模块名称:%s\n",me32.modBaseAddr, me32.modBaseSize, me32.szModule);
} while (Module32Next(hModuleSnap, &me32)); // 4. 关闭句柄并退出函数
CloseHandle(hModuleSnap);
} int main()
{
setlocale(LC_ALL, "chs");
DWORD dwId = ;
printf("请输入一个ID:");
scanf_s("%ud", &dwId);
GetModuleList(dwId);
getchar();
}
遍历进程模块2
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Tlhelp32.h> BOOL SetProcessPrivilege(char *lpName, BOOL opt); int main(int argc, char *argv[])
{
PROCESSENTRY32 pe32;
MODULEENTRY32 me32;
HANDLE hProcess, hSnapshot_proc, hSnapshot_mod;
pe32.dwSize = sizeof(pe32);
SetProcessPrivilege("SeDebugPrivilege", );
hSnapshot_proc = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, );
if (Process32First(hSnapshot_proc, &pe32))
{
do
{
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe32.th32ProcessID);
if (pe32.th32ProcessID && pe32.th32ProcessID != && pe32.th32ProcessID != )
{
printf("PID: %d >>> ProcName: %s\n", pe32.th32ProcessID, pe32.szExeFile);
me32.dwSize = sizeof(me32);
hSnapshot_mod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
Module32First(hSnapshot_mod, &me32);
do
{
printf("ModName: %s -> Path: %s\n", me32.szModule, me32.szExePath);
} while (Module32Next(hSnapshot_mod, &me32));
printf("------\n\n");
CloseHandle(hSnapshot_mod);
}
CloseHandle(hProcess);
} while (Process32Next(hSnapshot_proc, &pe32));
}
SetProcessPrivilege("SeDebugPrivilege", );
CloseHandle(hSnapshot_proc);
system("pause");
return ;
} BOOL SetProcessPrivilege(char *lpName, BOOL opt)
{
HANDLE tokenhandle;
TOKEN_PRIVILEGES NewState; if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &tokenhandle))
{
LookupPrivilegeValue(NULL, lpName, &NewState.Privileges[].Luid);
NewState.PrivilegeCount = ;
NewState.Privileges[].Attributes = opt != ? : ;
AdjustTokenPrivileges(tokenhandle, FALSE, &NewState, sizeof(NewState), NULL, NULL);
CloseHandle(tokenhandle);
return ;
}
else
{
return ;
}
}
遍历模块3
#include <stdio.h> void GetModuleList(DWORD dwPId) {
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
MODULEENTRY32 me32 = { sizeof(MODULEENTRY32) }; hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPId); if (!Module32First(hModuleSnap, &me32)) {
CloseHandle(hModuleSnap);
}
do {
printf("ModeBase: %d \t ModeSize: %d \t %s\n", me32.modBaseAddr, me32.modBaseSize, me32.szExePath);
} while (Module32Next(hModuleSnap, &me32));
} int main()
{
DWORD dwId = ;
GetModuleList(dwId);
getchar();
}
C语言实现windows进程遍历的更多相关文章
- Windows编程之进程遍历(C++实现)
Windows编程之进程遍历 PS: 主要扣代码使用,直接滑动到最下面使用. 遍历进程需要几个API,和一个结构体 1.创建进程快照 2.遍历首次进程 3.继续下次遍历 4.进程信息结构体 API 分 ...
- C语言操作WINDOWS系统存储区数字证书相关函数详解及实例
C语言操作WINDOWS系统存储区数字证书相关函数详解及实例 以下代码使用C++实现遍历存储区证书及使用UI选择一个证书 --使用CertOpenSystemStore打开证书存储区. --在循环中 ...
- Go语言开发Windows应用
Go语言开发Windows应用 当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场.Go不是脚本语言,但却有着脚本语言的轻便简单的特性.相 ...
- go语言让windows发出声音,或者播放音乐
go语言让windows发出声音,或者播放音乐的例子:会发出alert警告的声音 ( 这是我应群员的求助写的, 如果你需要了解其中的调用原理或过程 或更多go语言调用win32api的资料,加群: 2 ...
- 在Linux下和Windows下遍历目录的方法及如何达成一致性操作
最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件 ...
- windows进程/线程创建过程 --- windows操作系统学习
有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...
- windows进程函数试炼
实践一下windows进程相关函数: 代码如下: // test__getinformation.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h&quo ...
- Windows进程
一.Windows进程 1.进程 进程是一种容器,包含了应用程序实例的各种资源. 2.Windows进程的一些特点 2.1.进程中包含了执行代码等资源 2.2.进程都具有私有的地址空间 2.3.每个进 ...
- 使用WMI控制Windows进程 和服务
1.使用WMI控制Windows进程 本文主要介绍两种WMI的进行操作:检查进程是否存在.创建新进行 代码如下: using System; using System.Collections.Gene ...
随机推荐
- 数的划分(NOIP2001&水题测试2017082401)
题目链接:数的划分 这题直接搜索就行了.给代码,思路没什么好讲的,要讲的放在代码后面: #include<bits/stdc++.h> using namespace std; int d ...
- keras框架的MLP手写数字识别MNIST,梳理?
keras框架的MLP手写数字识别MNIST 代码: # coding: utf-8 # In[1]: import numpy as np import pandas as pd from kera ...
- hdu 1540(线段树区间合并)
题目链接:传送门 参考文章:传送门 题意:n个数字初始连在一条线上,有三种操作, D x表示x号被摧毁: R 表示恢复剩下的通路 Q表示查询标号为x所在的串的最长长度. 思路:线段树的区间合并. #i ...
- 第1章 Python数据模型
#<流畅的Python>读书笔记 # 第一部分 序幕 # 第1章 Python数据模型 # 魔术方法(magic method)是特殊方法的昵称.于是乎,特殊方法也叫双下方法(dunder ...
- Win7 VS2015环境编译Libpng
第3次编译Libpng依然想不起任何东西,为了不浪费第4次的时间... http://libpng.com/pub/png/libpng.html http://www.zlib.net/ 解压两个压 ...
- centos7 新增ip
1.进入network-scripts目录:cd /etc/sysconfig/network-scripts/ 2.复制ifcfg-eth0: cp ifcfg-eth0 ifcfg-eth0:0 ...
- 回文(palindrome)
如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文).
- 图像像素转换 8-bit 16-bit 32-bit游戏效果
https://www.ipcfun.com/8bit-you-xi-hua-mian-fu-yuan-3d-li-ti-tu.html https://bbs.csdn.net/wap/topics ...
- Forward团队-爬虫豆瓣top250项目-成员简介与分工
马壮:擅长html,css,分工:分析网站源码 邢云淇:掌握python,java 分工:爬虫部分代码编写 张良:熟练掌握数据库 分工:数据库部分代码编写 年光宇:掌握c#,python 分工:代码整 ...
- 关于Linux学习中的问题和体会
本科期间未开展过与之相关的课程,所以初次接触Linux难免有些问题!参照老师给的学习资料中内容,逐步解决了一些问题,但还有一些问题没解决,下面列举出自己遇到的一些问题. 1.在环境变量与文件查找专题中 ...