小弟想实现这样一个功能,例如说我现在有个文件A 此时文件B 打开或者读写了文件A我想通过我的程序来知道是谁打开了文件A,或者说监测所有进程看看是否有打开文件A,希望各位大侠赐教简单点就是想知道某个进程打开的所有文件或者说某个文件被哪些进程打开了

解决方案 »

  1.   

    看到他们用 SHChangeNotifyRegister() 等API做“监视”的,都没文件打开、读写之类的动作。
      

  2.   


    我看到有人用下列方式 但是我不会 求教下你需要使用ZwQuerySystemInformation和ZwQueryInformationFile这两个未公开的API先使用ZwQuerySystemInformation函数枚举系统中打开的所有文件的句柄,再使用ZwQueryInformationFile,然后根据参数FileInformationClass的不同值来返回不同的类型,使用FileInformationClass=FileInformationClass来得到FILE_NAME_INFORMATION,从而得到是哪个进程打开了这个文件LS讲的方法没错,我小小地补充一下。ZwQueryInformationFile对应的hFile必须是本进程内的句柄(句柄是进程相关的,不能跨进程使用同一句柄),所以不可以对ZwQuerySystemInformation返回的句柄表里查到的句柄直接ZwQueryInformationFile,应该先ZwDuplicateObject到本进程内之后再ZwQueryInformationFile。另外,如果想关闭句柄,可以创建远程线程执行CloseHandle(ZwClose),或者用ZwDuplicateObject,最后一个参数传DUPLICATE_CLOSE_SOURCE可以关闭原句柄。不知道哪位兄弟能帮忙整理一下
      

  3.   

    http://www.nirsoft.net/utils/opened_files_view.html