怎样知道一个文件正被哪些文件使用?(100分)

  • 主题发起人 主题发起人 hhjjhhjj
  • 开始时间 开始时间
H

hhjjhhjj

Unregistered / Unconfirmed
GUEST, unregistred user!
一个正在使用的文件,(如aaa.dll),怎样得到正在使用它的文件名称?
 
检查文件是否在使用中:
function IsFileInUse(fName : string ) : boolean;
var
HFileRes : HFILE;
begin
Result := false;
if not FileExists(fName) then
exit;
HFileRes := CreateFile(pchar(fName),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,
0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not Result then
CloseHandle(HFileRes);
end;
 
谢谢,这个我也用到了,但我想问的是:正被哪个(些)文件使用?
 
我也想知道,帮顶!
 
目前普通的方法得不到。原因看MSDN CreateFile函数说明。
首先NT的操作系统下,每个进程有自己的进程空间。
如果用注入方法你也只是在注入的进程
空间得到一份文件副本的ID。
即便使用API hook钩住CreateFile函数,你又得不到进程ID


如果有这种技术,做起杀毒软件,系统清理软件就简单了。
杀毒软件也不用去找文件的特征码了。

个人认为在NT核心的操作系统中,很难。
不知道对不对。
 
dll应该有办法,遍列各进程的模块可以找到所有使用该dll的进程名。
查各模块中这个dll的引用数,可以得知是主进程还是被注入的进程(不过只对非Ms的DLL有效)。
 
多人接受答案了。
 
后退
顶部