如何通过进程获取文件真实路径!!!!

mdejtod 2009-03-14 11:55:56
加精
昨天发了个贴,竟然没分。。。重发过!!!!!!


RT,我们可以通过一系列的API获取进程的路径,但是如果是像记事本,WORD文档,EXECL文档,WINDOWS图片浏览器等程序,我们得到的只是系统目录下的程序
如:NODEPAD。EXE ,返回来的结果是 c:\windows\notepad.exe,那有没有一种办法可以得知这个记事本到底是哪个目录下的哪个文件?
比如我打开的是e:\a.txt,通过枚举得来的却是 c:\windows\notepad.exe 这个路径,能不能得到 e:\a.txt这个路径?

function GetPathFileofModule(ModuleName:String):String;
var hProcSnap: THandle;
pProcess: THandle;
pe32: TProcessEntry32;
s: string;
buf:array[0..MAX_PATH] of char;
hMod:HMODULE;
cbNeeded:DWORD;
begin
hProcSnap:=CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
if hProcSnap=INVALID_HANDLE_VALUE then Exit;
pe32.dwSize:=SizeOf(ProcessEntry32);
if Process32First(hProcSnap,pe32)=True then
while Process32Next(hProcSnap,pe32)=True do
begin
if uppercase(pe32.szExeFile)=uppercase(ModuleName) then
begin
pProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,FALSE, pe32.th32ProcessID);
if pProcess <>0 then
begin
if EnumProcessModules( pProcess,@hMod,sizeof(hMod),cbNeeded) then
begin
ZeroMemory(@buf,MAX_PATH+1);
GetModuleFileNameEx(pProcess, hMod,buf,MAX_PATH+1);
Result:=strpas(buf);
end;
end;
end;
end;
CloseHandle(hProcSnap);
end;
这个函数返回的无法实现我的要求!!!
...全文
4129 115 打赏 收藏 转发到动态 举报
写回复
用AI写文章
115 条回复
切换为时间正序
请发表友善的回复…
发表回复
可怕的人 2011-09-25
  • 打赏
  • 举报
回复
接分,不错,值得学习
L3nnon 2010-09-14
  • 打赏
  • 举报
回复
学习学习。。
lw549 2009-03-17
  • 打赏
  • 举报
回复
貌似传说中有一种方法叫ReadProcessMemory,对MessageBoxW设置断点,找到文件保存的位置,直接读就可以了。
mdejtod 2009-03-17
  • 打赏
  • 举报
回复
怎么老是看不到回复?CSDN 也不解决一下这个问题吗?非得人家灌一次水
xpnew 2009-03-17
  • 打赏
  • 举报
回复
我不知道具体怎么做,不过我建议楼主去看看那些病毒开发类的文章。

或者说楼主正在研究病毒怎么感染其它程序呢。

前面的人说了,监视打开是比较容易实现的方法。我猜病毒和杀毒软件就是这样监视内存的吧。
bluecomputer 2009-03-17
  • 打赏
  • 举报
回复
唉。。只能看看,学习了!加油!!
wulinfeng2008 2009-03-17
  • 打赏
  • 举报
回复
有没C#版本的呀
lwtbysj 2009-03-17
  • 打赏
  • 举报
回复
顶,关注
yct0605 2009-03-17
  • 打赏
  • 举报
回复
方法很多,关键在于实现的算法。
modeling 2009-03-17
  • 打赏
  • 举报
回复
恰好我也不会!!学到了……
szxqyz 2009-03-17
  • 打赏
  • 举报
回复
灌一次水。
mdejtod 2009-03-17
  • 打赏
  • 举报
回复
?
relive_qiankai 2009-03-17
  • 打赏
  • 举报
回复
不会,帮顶,问题很强大,牛人没出现!
小笨象 2009-03-16
  • 打赏
  • 举报
回复
我想基本无解。
mxlinux 2009-03-16
  • 打赏
  • 举报
回复
没接口,直接获取加载文件的路径,是几乎不可能呢,因为这个信息没必要对外公布出来,保存在变量,除非你去手工分析内存了.

不过,有另一个思路------分析标题栏

大多程序都把加载文件的路径放标题栏或者application.title,这两个数据有句柄是可以得到的,但不一定每个程序都支持,而且分析程序只针对一个软件,但我想楼主最终目的可能只是想获取某一个软件的文件加载信息吧.
shclhs 2009-03-16
  • 打赏
  • 举报
回复
关注
bbschen1988 2009-03-16
  • 打赏
  • 举报
回复
学习了啊不错啊
navyly 2009-03-16
  • 打赏
  • 举报
回复
学习了。
suminsumin 2009-03-16
  • 打赏
  • 举报
回复
好好好好好好好好好
suners 2009-03-16
  • 打赏
  • 举报
回复
oooooooooo 借个分
加载更多回复(95)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧