当前位置: 首页 > news >正文

经典C程序例程:通过进程ID得到文件名

通过进程ID得到文件名

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName);
void DispProcess(void);
void DispPrsFile(void);//=================================================
typedef BOOL (_stdcall *ENUMPROCESSES)(  //注意这里要指明调用约定为-stdcallDWORD* pProcessIds,  //指向进程ID数组链  DWORD cb,    //ID数组的大小,用字节计数DWORD* pBytesReturned);   //返回的字节
//在psapi.dll中的函数EnumProcessModules用来枚举进程模块
typedef BOOL (_stdcall *ENUMPROCESSMODULES)(HANDLE hProcess,   //进程句柄HMODULE* lphModule, //指向模块句柄数组链DWORD cb,    //模块句柄数组大小,字节计数LPDWORD lpcbNeeded);   //存储所有模块句柄所需的字节数
//在psapi.dll中的函数GetModuleFileNameEx获得进程模块名
typedef DWORD (_stdcall *GETMODULEFILENAMEEX)(HANDLE hProcess,   //进程句柄HMODULE hModule,   //进程句柄LPTSTR lpFilename,   //存放模块全路径名DWORD nSize    //lpFilename缓冲区大小,字符计算
);
//=================================================
//=================================================
int main()
{//DispProcess();DispPrsFile();return 0;
}//提升进程权限
BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName)
{TOKEN_PRIVILEGES tkp;LookupPrivilegeValue( NULL,szPrivName,&tkp.Privileges[0].Luid );//修改进程权限tkp.PrivilegeCount=1;tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL );//通知系统修改进程权限return( (GetLastError()==ERROR_SUCCESS) );
}
void DispProcess(void)
{HANDLE hSnapshot;PROCESSENTRY32 pe;BOOL bSucceed;TCHAR * szFileName = NULL;DWORD dwProcessID = 0;HANDLE hToken;if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) ){if (EnablePrivilege(hToken,SE_DEBUG_NAME)){hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);bSucceed = Process32First(hSnapshot, &pe);while(bSucceed){printf("\n%d\t%s",pe.th32ProcessID,pe.szExeFile);bSucceed = Process32Next(hSnapshot, &pe);}}}CloseHandle(hSnapshot);system("pause");
}
void DispPrsFile(void)
{DWORD processid[1024],needed,processcount,i;HANDLE hProcess;HMODULE hModule;char path[MAX_PATH] = "",temp[256];HMODULE hPsDll = LoadLibrary("PSAPI.DLL");//=======================================================ENUMPROCESSES pEnumProcesses  = (ENUMPROCESSES)GetProcAddress(hPsDll, "EnumProcesses");ENUMPROCESSMODULES pEnumProcessModules  = (ENUMPROCESSMODULES)GetProcAddress(hPsDll, "EnumProcessModules");GETMODULEFILENAMEEX pGetModuleFileNameEx  = (GETMODULEFILENAMEEX)GetProcAddress(hPsDll, "GetModuleFileNameExA");//========================================================HANDLE hToken;if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) ){if (EnablePrivilege(hToken,SE_DEBUG_NAME)){pEnumProcesses(processid, sizeof(processid), &needed);processcount=needed/sizeof(DWORD);for (i=0;i<processcount;i++){hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,false,processid[i]);if (hProcess){pEnumProcessModules(hProcess, &hModule, sizeof(hModule), &needed);pGetModuleFileNameEx(hProcess, hModule, path, sizeof(path));GetShortPathName(path,path,256);itoa(processid[i],temp,10);printf("%s --\t\t-- %s\n",path,temp);}}}}//CloseHandle(hPsDll);//CloseHandle(hModule);//CloseHandle(hProcess);itoa(processcount,temp,10);printf("\nProcess Count:%s\n\n",temp);system("pause");
}
http://www.lryc.cn/news/28997.html

相关文章:

  • 【Java】Spring MVC程序开发
  • leetcode题解-704. 二分查找
  • 2.2 C语言程序的错误条件
  • laravel 邮件发送
  • 高性能 Jsonpath 框架,Snack3 3.2.57 发布
  • Android---进程间通信机制3
  • Python实战,爬取金融期货数据
  • Allegro如何导入第三方网表操作指导
  • 高码率QPSK调制解调方案(FPGA实现篇)
  • Elasticsearch的RESTful Api使用
  • 软著申请需要注意的
  • SpringBoot入门 - 添加Logback日志
  • 社会实践报告
  • LeetCode 460. LFU 缓存 -- 哈希查询+双向链表
  • Dubbo 源码分析 – SPI 机制
  • JDBC概述二(JDBC编程+案例展示)
  • 广度和深度优先搜索解析与示例代码
  • 基于SLIC超像素的归一化分割算法
  • C语言刷题(4)——“C”
  • 带你看懂RuoYi动态数据源切换
  • 家有女儿必看:盲目的和青春期女儿较劲,不如掌握4个沟通技巧
  • 【VC 7/8】vCenter Server 基于文件的备份和还原Ⅰ——基于文件的备份和还原的注意事项和限制
  • 【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库
  • svn 分支(branch)和标签(tag)管理
  • @Transactional详解
  • 机器学习:Transformer
  • pytorch-模型构建,参数访问,模型存取API接口,对比学习
  • javaEE 初阶 — 数据链路层中的以太网数据帧
  • 泼辣修图Polarr5.11.4 版,让你的创意无限延伸
  • leetcode打卡-深度优先遍历和广度优先遍历