如何从文件句柄知道文件名字?(200分)

  • 主题发起人 主题发起人 Pipi.
  • 开始时间 开始时间
P

Pipi.

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个文件 Handle (系统打开的,本进程能使用的)<br>我可以用它来读文件数据和读文件的信息(属性、长度、修改时间等),<br>但是没有办法知道文件的名字, 有什么办法吗?
 
你也许知道,GetFileInformationByHandle可以得到一些信息,<br><br>
 
看来难度比较大。<br><br>GetFileInformationByHandle没有用,只能看大小、属性、时间等。<br>可是我就是想知道文件名啊
 
难度不大,我也不会问了,唉唉唉
 
是 executable file 的吗?<br>
 
Pipi.兄,<br>&nbsp; 估计你200分泡汤了.....
 
应该不行吧。
 
故意引起异常,看看能不能从异常信息中取得……<br>随便说说!^-^
 
光有Handle是的不到File名字和路径信息的,还得从你程序的上一级想办法.
 
我想应该是可以的,不然Windows怎么知道呢,我不会<br>当打开一个Handle文件,只要不关闭又打开另一个文件时,Handle的值会比上一个Handle的值大4,不知这个4是代表什么,是文件信息在内存中的地址吗?
 
看到一篇文章,转贴一下。<br><br>--------------------------------------------------------------------------------<br>95/98下历遍打开的文件句柄 <br><br>95DDK已经公开了一个FSD函数叫FS_EnumerateHandle来提供历遍已打开的文件句柄.<br>但是普通情况下大家并没兴趣为了历遍文件句柄就写个VXD.所以在RING3还是需要一<br>些未公开的东西来配合工作才够SMART.:)这个技巧对于写杀毒软件应该有用得很哩.:D <br>我们在DDK文档里可以看到 <br>INT21H,FUNC 440DH, SUB FUNC 486DH 是该服务的客户端.但是DDK本身并没有486DH的<br>说明.现在就是揭密的时候了. <br>ECX = 0x486D, <br>EAX = 0x440D, <br>EBX,想历遍句柄的驱动器(0-Default drive,A-1,B-2,C-3,...), <br>EDX,接收已经打开文件的路径的地址, <br>EDI,0=历遍所有打开文件,1=历遍不可删除文件, <br>ESI,从0开始,每次调用INT21后加1,直到CY被置位. <br>返回值: <br>EAX=文件打开模式 <br>ECX=文件类型. <br>&nbsp; &nbsp; 1=普通文件 <br>&nbsp; &nbsp; 2=内存映射文件 <br>&nbsp; &nbsp; 3=不可移动文件 <br>&nbsp; &nbsp; 4=交换文件 <br>在DOS窗下,直接调用INT21H就可.在GUI下,需要调用VWIN32的VWIN32_DIOC_DOS_IOCTL服<br>务.具体的VWIN32服务在PLATFORM SDK里有详细说明,这里并不准备详细讲解,相信看这里<br>文章的朋友应该有一定的基础,不需要多余的指点的.:D
 
从这里扣100分给下面的问题,有用的话就分分:<br><br>以前frontpage98有脚本向导,可以方便写入脚本,比如window_onload之类<br><br>在frontpage2000下我找不到了,不知道从哪个菜单进去?<br>(现在我只能在“HTML”里面手工加,真是烦啊)<br>
 
我来告诉你<br>&nbsp;1)用Process32First,Process32Next 遍历系统所有进程并用一个数组记录<br>&nbsp; 这一步遍历出来的进程中已经包括文件名称(FProcessEntry32.szExeFile)。<br>&nbsp;2)用Getwindowthreadprocessid(handle,@MM); 通过此文件的handle得到此<br>&nbsp; &nbsp; 文件的进程号。<br>&nbsp;3)比较那个进程号同第二步一样即可得到FProcessEntry32.szExeFile的文件名称<br><br>&nbsp;我不会只得到100分吧 :(
 
pipi &nbsp;应该不是那个意思。
 
我的看法:<br>&nbsp; 用handle应该可以找到一个与文件信息有关的结构块,在结构块中就可以找到文件名和其它信息。
 
后退
顶部