PSAPI—Enumerate Process

2024-01-25 08:38
文章标签 process enumerate psapi

本文主要是介绍PSAPI—Enumerate Process,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PSAPI: 枚举系统Process

PSAPI提供了一系列函数来查看系统中的各种信息,包括ProcessModulesDevice Driver等等,MSDN上介绍的很详细。

今天就记录一下使用PSAPI来枚举系统中的所有Process

主要使用的函数就这几个:

EnumProcess()OpenProcess()CloseHandle()GetModuleBaseName()EnumProcessModules()

 

1.使用EnumProcess()取得系统中的所有Process ID

       MSDN上所言,由于很难预测系统当前的Process个数,因此推荐使用一个较大的数组;

2.使用OpenProcess()取得Process Handle

       需要对进程具有PROCESS_QUERY_INFORMATIONPROCESS_VM_READ权限,对于有些系统进程可能会失败,比如System Idle Process

3.使用EnumProcessModules()取得可执行程序HMODULE句柄

       取得Handle后,就可以使用EnumProcessModules()取得可执行程序HMODULE句柄了,这个函数可以返回Process载入的所有Module,这里传入大小为1的数组即可,它总是代表了可执行程序的句柄。

4.使用GetModuleBaseName()获得Process名字

       取得Process的可执行程序名字,不包含路径;

5CloseHandle()关闭进程句柄

       这一步不要忘了。

 

最后贴下示例程序代码:

 

#include <windows.h>

#include <stdio.h>

#include <psapi.h>

#pragma comment(lib, "psapi.lib")

int main()

{

    DWORD vecProcessID[2048]; // sufficient most of time

    DWORD cbNeeded, dwSize;

    dwSize = sizeof(vecProcessID);

    // if cbNeeded >= sizeof(vecProcessID) try again with a larger array

    if(EnumProcesses(vecProcessID, dwSize, &cbNeeded)){

        HANDLE hProcess;

        HMODULE hMod; // we only need the first module handle here

        dwSize = cbNeeded/sizeof(vecProcessID[0]);

        for(DWORD i = 0; i < dwSize; i++){

            char name[MAX_PATH] = "<Unknown>";

            hProcess = OpenProcess(

                PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,

                FALSE, vecProcessID[i]);

            if(hProcess != NULL){

                if(EnumProcessModules(hProcess, &hMod, sizeof(hMod),

                                                        &cbNeeded)){

                    GetModuleBaseName(hProcess, hMod, name, sizeof(name)-1);

                }

                else{

                    printf("EnumProcessModules[%u] Error:%u/n",

                            vecProcessID[i], GetLastError());

                }

                CloseHandle(hProcess);

            }

            printf("%u/t%s/n", vecProcessID[i], name);

        }

    }

    return 0;

}

这篇关于PSAPI—Enumerate Process的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642696

相关文章

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

出现 E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方法 (全面分析)

目录 前言1. 问题所示2. 原理分析2.1 第一阶段2.2 第二阶段 3. 解决方法4. 彩蛋4.1 错误不提示,直接卸载4.2 卸载后还是无错误提示 前言 3年前遇到过一个类似的,但是轻松解决,推荐阅读:ubuntu:E: dpkg was interrupted, you must manually run ‘sudo dpkg --configure…解决方法 这回发

【Android studio】 unable to start the daemon process

这几天在做一个安卓桌面项目时,突然发现android studio 不能用了。 提示: 网上的一些方法,要不就是: 1、删除C:\Users\<username>\.gradle 文件夹 2、File Menu - > Invalidate Caches/ Restart->Invalidate and Restart 3、C:\Users\<us

论文《Autoencoders for improving quality of process event logs》翻译

论文《Autoencoders for improving quality of process event logs》翻译 《Autoencoders for improving quality of process event logs》翻译

Thread VS Process

区别如下: 1) Both process and Thread are independent path of execution but one process can have multiple Threads.   2) Every process has its own memory space, executable code and a unique process i

Liver Segmentation in CT based on ResUNet with 3D Probabilistic and Geometric Post Process

一、摘要 本文提出了使用具有3D概率和几何后期处理功能的ResUNet的新型肝分割框架。 我们的语义分割模型ResUNet在U-Net的上采样和下采样部分添加了残差单元和批处理规范化层,以构建更深的网络。 为了快速收敛,我们提出了一种新的损失函数DCE,该函数由Dice损失和交叉熵损失线性组合。 我们使用连续的几个CT图像作为训练和测试的输入,以探索更多的上下文信息。 基于ResUNet的初始分割

Python enumerate()函数详解

enumerate具有枚举、列举的意思 enumerate的参数有两个,一个是iterable,也就是可迭代对象,另一个是start enumerate的作用是在加入可迭代对象作为参数会,在进行for循环时,每次循环会按序返回可迭代对象的值,和一个索引,索引从0开始递增。若设置start参数,则索引则会从start开始递增 list1 = list(range(10))for i, j i

Java 入门指南:Java 并发编程 —— 两万字详解 进程(Process)与线程(Thread)

线程和进程是操作系统中两个重要的概念,用于实现并发执行和多任务处理。 基础概念 进程 进程(Process):进程是计算机中正在运行的程序的实例。它是操作系统分配系统资源的基本单位,包括程序代码、数据、打开的文件、内存空间、进程状态等。 每个进程都有独立的内存空间和资源,彼此之间相互隔离、互不影响。进程之间通常通过进程间通信(IPC)机制进行数据交换和通信。 任一时刻,CPU 总是运行一

python基础-Process创建进程、join方法、实现ftp多进程

进程概念获取进程id并行并发概念Process类的介绍Process类的其他方法join方法利用多进程实现ftp套接字 进程概念 进程即正在执行的一个过程或者说一个任务。进程是对正在运行程序的一个抽象,而负责执行任务则是cpu 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。 进程的概念起源于操作系统,进程的创建,调度管理都归操作系统管 一 操作系统的作用

Android XML Editor cannot process this input

Android XML Editor cannot process this input. 今天在用Android版Eclipse打开Xml文件时出现如下错误:     错误的原因可能是把其他Xml文件当成了Android Xml文件。   解决方法如下:     点击ok即可。   转自:http://www.myexception.cn/xml-soa