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 ...
随机推荐
- Go环境下,编译运行etcd与goreman集群管理(1)
Go环境下编译运行etcd与goreman管理 近几年了Go在比特币.区块链.云服务等相关重要领域贡献突出,作为IT行业的传承“活到老.学到光头”,保持学习心态. 周末放假,补充一二 主题:在Go环境 ...
- viewer.js使用
viewer GitHub 地址: JS 版本:https://github.com/fengyuanchen/viewerjs jQuery 版本:https://github.com/fengyu ...
- ManageEngine的EventLog Analyzer许可信息
- 4. Father's Impact on a Child's Language Development 父亲对孩子语言发展的影响
4. Father's Impact on a Child's Language Development 父亲对孩子语言发展的影响 (1)Im families with two working pa ...
- Codeforces Round #548 (Div. 2) D 期望dp + 莫比乌斯反演
https://codeforces.com/contest/1139/problem/D 题意 每次从1,m中选一个数加入队列,假如队列的gcd==1停止,问队列长度的期望 题解 概率正着推,期望反 ...
- SQL中的split方法的使用
参数说明: 1.@String :需要split的字符串 2.@Delimiter :格式化时分隔符 3.@index :返回split后数组的值 ), ),)) ) AS BEGIN )) ) DE ...
- VSCode的终端修改
快速打开VSCode的快捷键是:Ctrl + `(反引号) 转自:https://blog.csdn.net/u013517122/article/details/82776607 因本人实在忍受不了 ...
- 1.4isAlive()方法
方法isAlive()的功能是判断当前线程是否处于活动状态 活动状态是线程已经启动且尚未终止,线程处于正在运行或准备开始运行的状态,就认为线程是存活的. 测试如下 package com.cky.th ...
- android 首字母迷糊查询 拼音查询 中英文混排查询
对于这个问题,还没有动手去做,暂且查了查资料,把思路记录下来: 1. 数据库保存拼音+汉字.在插入数据库的时候将这些信息保存下来,将来可以进行首字母模糊查询,拼音查询,中英文混排查询(参考手机通讯录数 ...
- 怎样去写线程安全的代码(Java)
使用多线程就可能会存在线程安全的问题.很多 java 程序员对写多线程都很挣扎,或者仅仅理解那些是线程安全的代码,那些不是.这篇文章我并不是详述线程安全,详述同步机制的文章,相反我只是用一个简单的非线 ...