一.概述: 如果一个病毒文件被植入正在运行的进程中,我们想要清除它时系统总会提供无法删除;有时编辑文件的进程被意外中止而文件句柄没有正确释放,导致此文件无法进行改写操作。现在我们会使用Unlocker之类的小工具去解锁,但在编写程序的可能会需要把这些功能包含在自己的代码中,本文就是自己写代码实现”如何关闭已经被加载的DLL或是正在使用的文件”功能,使用文章中的 *** 能很方便的完成文件解锁功能。 按最初的想法准备在ring0中完成这些功能,但在查找资料的过程中发现既然我们能在ring3中做,为什么不让这些 *** 更通用一些呢。其实功能实现并不难,主要是前期从哪里入手比较麻烦。 我们知道无论是动态库或是文件在加载到进程中时,总会有一个指向它的指针,如果让进程释放这段指针,那么这些文件就不会被系统锁定。下面将是我们的需要实现文件解锁功能而分解出的步骤 1. 枚举当前系统所有进程; 2. 查找进程中打开的文件句柄和加载的动态库句柄; 3. 通知进程关闭这些句柄。 二.详细设计 2.1查找进程加模的动态库模块 Let’s go,我们来分步完成它吧。对于枚举当前系统所有进程,在这里就不给出代码了,相信实现的 *** 很多。下面的代码段完成查找指定进程加载动库信息的功能(在这里使用了Jeffrey在《Windows核心编程》一书中提供的CToolhelp类,用它可以完成进程加载信息的分析功能,感谢Jeffrey,我一直在使用它) // 自定义结构,保存打开句柄的的信息 typedef struct _UNFILE_INFO { int nFileType; DWORD dwHandle; char *strFileName; } UNFILE_INFO, *PUNFILE_INFO; ////////////////////////////////////////////////////////////////////////// // 通过PID号取得PID打开的文件句柄信息 ////////////////////////////////////////////////////////////////////////// void GetModules(DWORD dwProcessID, CList &plsUnFileInfo) { CToolhelp::EnableDebugPrivilege(TRUE); CToolhelp th(TH32CS_SNAPALL, dwProcessID); // 显示进程的详细资料 MODULEENTRY32 me = { sizeof(me) }; BOOL fOk = th.ModuleFirst(&me); for (; fOk; fOk = th.ModuleNext(&me)) { PVOID pvPreferredBaseAddr = NULL; pvPreferredBaseAddr =GetModulePreferredBaseAddr(dwProcessID, me.modBaseAddr); // 取得进程模块信息 PUNFILE_INFO pUnFileInfo = new UNFILE_INFO; // 模块地址 pUnFileInfo->dwHandle = (DWORD)me.modBaseAddr; // 模块类型 pUnFileInfo->nFileType = UNTYPE_DLL; // 模块名称 pUnFileInfo->strFileName = new char[strlen(me.szExePath)+1]; memset( pUnFileInfo->strFileName, 0, strlen(me.szExePath)+1); strcpy( pUnFileInfo->strFileName, me.szExePath); // 保存打开的模块信息 plsUnFileInfo.AddTail( pUnFileInfo); } } 上面功能完成了枚举进程加载的模块功能,我们把得到的枚举信息加入了链表中,以备后面使用。 2.2枚举进程打开的文件信息 下面将分段说明如何枚举指定进程打开的文件句柄。
3.71 硬件类型、协议类型、硬件巨细、协议巨细(决议了最终4个字段的类型和巨细,硬件巨细与协议巨细的单位均为Byte): 关于以太网和IPv4来说,这4个字段分别是1、0×0800、6、4。 $ra...
诗友们,今天,请跟诗词君一起来朗读下列词语: 觊觎、耄耋、龃龉、呷茶 氤氲、踯躅、蹀躞、彳亍 你是不是像诗词君一样,读不下去了呢? 今天,诗词君分享80个认识却不会读的词语,一起来...
b)无人机每7ms就会收到一次遥控器宣布的32字节操控数据,操控数据只要一条指令一种格局,一切操控杆和开关的状况会一次性发送到无人机。 无人机收到数据后会进行地址校验和CRC校验,保证数据是正确无误的...
趣味探索讯 每年4月是一个多种天文现象同时出现的月份,壮观天琴座流星雨,银白黄道光,还有粉红月亮。今年4月同样没让人失望,星空摄影师和科学爱好者在大饱眼福的同时,还捕捉到多张精妙的星空照片,可以说是收...
合肥预约商务费用价格表【卫茜】 今天给大家分享的内容是“合肥预约商务费用价格表【卫茜】”,我是卫茜,来自鞍山市,今年23岁,作为职业:艺术,我热爱我的职业:艺术。三圍:胸64腰96臀66 鞋碼:38,...
怎么连接手机位置他人(精准定位另一方手机号码位置怎么做) 在网上商城的冲击性下,实体线店铺大势已去。为了更好地在猛烈的市场需求扭转颓势,实体线店家们煞费苦心,耗尽一切办法。 手机位置技术性帮了门店...