通过pid查看它载入dll,通过dll查询那些pid载入它
来源:互联网 发布:软件开发逻辑测试 编辑:程序博客网 时间:2024/05/16 18:42
遇到某个文件无法删除,除了前一篇“打开”的占用之外,还有就是作为一个模块被占用。
ring3下的碎甲功能除了关闭打开的文件句柄之外,就是FreeLibrary作为模块打开的句柄。
GetProcModule.h
#ifndef GETPROCMODULE_H__#define GETPROCMODULE_H__void GetModuleByPid(DWORD dwPid, vector<string> & vData);void GetPidByModule(const string& szPath, vector<PROCESSENTRY32>& vData);#endif
GetProcModule.cpp
// GetProcModule.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"void GetModuleByPid(DWORD dwPid,vector<string> & vData){HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPid);if (hProc){HMODULE hMod[1024];DWORD cbNeeded;CHAR szModName[MAX_PATH] = {0};CHAR lPath[MAX_PATH] = {0};// 获取进程模块if (EnumProcessModules(hProc, hMod, sizeof(hMod), &cbNeeded)){//获得模块路径for (int i = 0; i <= cbNeeded / sizeof(HMODULE); ++i){if (GetModuleFileNameExA(hProc, hMod[i], szModName, sizeof(szModName))){vData.push_back(szModName);}}}CloseHandle(hProc);}}void GetPidByModule(const string& szPath, vector<PROCESSENTRY32>& vData){DWORD ParentProcessID = -1;PROCESSENTRY32 pe;HANDLE hkz;hkz = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);pe.dwSize = sizeof(PROCESSENTRY32);if (Process32First(hkz, &pe)){do{vector<string> vModule;GetModuleByPid(pe.th32ProcessID, vModule);for (auto& str:vModule){if (str == szPath){vData.push_back(pe);break;}}} while (Process32Next(hkz, &pe));}}
最后还是不得不吐槽,当然是关于上一篇的利用ZwQuerySystemInformation枚举打开文件句柄,MSDN分明写着“is no longer available for use as of Windows 8. ”,可是我回家之后在win 8.1系统上dtll.dll也一样可以LoadLibrary得到函数指针,或许在windows 8.1微软又良心发现了,把它加回去了?
为了以防万一,我选择了NtQuerySystemInformation,搞过Ring0的容易误会,这个是Ring3那个,跟上面的Zw开头的函数是一样的,因为msdn上面说“ may be altered or unavailable in future versions of Windows.”,Zw是“一定不支持”,Nt是“可能失效”,起码还能多支持几个版本。
这一点我对微软越来越跟苹果一样,表示深深的鄙视,明显是信不过我们程序员,人家苹果程序员都是SB,开发难度低,难道你以为windows程序员也是这样吗?Linux太开发,Mac OS太封闭,windows恰好介于平衡点,于是上一轮PC战争中胜利。win8开始鲍尔默不相信开发者了,于是我们抛弃了他,如果win10继续延续这个路子,恐怕我就改成Ubuntu了,起码Linux世界尊重,我们程序员的智商。
0 0
- 通过pid查看它载入dll,通过dll查询那些pid载入它
- C++ 载入dll
- DLL延迟载入机制
- C# 通过Reflection代码实现载入内置的(dll)资源文件
- Linux通过PID查看进程完整信息
- 通过/proc/pid./status查看进程信息
- Linux通过PID查看进程完整信息
- 通过进程pid查看文件安装路径
- Linux通过PID查看进程完整信息
- Linux通过PID查看进程完整信息
- Linux通过PID查看进程完整信息
- 通过 /proc/[pid]/ 查看进程状态
- 修改导入表载入DLL
- 修改导入表载入DLL
- 直接载入内存中的DLL
- 直接载入内存中的DLL
- 通过depends工具查看dll
- 通过depends工具查看dll
- poj 3662 最短路
- Protocol Buffer使用
- 极光推送使用实例(三) Android客户端
- Android-Universal-Image-Loader
- 石子合并问题(大水题)
- 通过pid查看它载入dll,通过dll查询那些pid载入它
- 新华万银为2015投资财富起航
- 简易版硬盘装机
- 我参与的一个x86平台项目的经历
- apue学习第二十三天——消息队列、信号量与共享内存
- 二维卷积的基本原理
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- MATLAB conv2卷积的实现
- HTML 表格标签