首页
社区
课程
招聘
如何判断一个文件是否正在打开?
发表于: 2011-9-16 16:08 7343

如何判断一个文件是否正在打开?

2011-9-16 16:08
7343
比如一个1.txt, 被notepad打开了, 现在写一个程序来判断这个1.txt是否被打开...

查文件句柄的引用次数好像太过于复杂, 看看大家有什么其他的思路

---------------------

呵呵, 找到原因了, notepad读完文件就关闭了, 在内存里..

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 76
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
测试过Openfile, 还是返回了句柄

    OpenFile("C:\\Users\\Administrator\\Desktop\\1.txt",
              &ReOpenBuff,
          OF_SHARE_DENY_NONE|OF_SHARE_EXCLUSIVE|OF_SHARE_DENY_READ|OF_SHARE_DENY_WRITE);



测试过Createfile, 还是返回了句柄

    CreateFile(L"C:\\Users\\Administrator\\Desktop\\1.txt",               // file to open
        GENERIC_READ,          // open for reading
        0,                     // share for reading
        NULL,                  // default security
        OPEN_EXISTING,         // existing file only
        FILE_ATTRIBUTE_NORMAL, // normal file
        NULL);
2011-9-16 16:14
0
雪    币: 343
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
CreateFile dwShareMode=0,判断返回的HANDLE应该可以实现。
2011-9-16 16:20
0
雪    币: 76
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
这个测试了, 和Openfile 一样, 也返回了句柄值... 我目前的需求是判断这个文件是否被打开.

按道理应该是返回无效句柄值的 , 但是还是返回了有效的句柄值
2011-9-16 16:26
0
雪    币: 343
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
应该是notepad不是以独占的方式打开的文件。
2011-9-16 16:33
0
雪    币: 248
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
貌似以前听别人说notepad在打开文件后,文件就关闭了,以后在记事本里面的操作都是对临时文件的操作,只是保存的时候再次打开修改的文件。不用记事本测试下看……
2011-9-16 18:44
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个我同意,

只要有修改的时候,他才再操作文件写入
2011-9-16 20:15
0
雪    币: 1149
活跃值: (833)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
8
分两种写入:
1. 缓冲文件写
2.硬盘文件写入

如果是缓冲写入 通常 notepad 是这种写入,如果不刷新缓冲去,就一直缓冲写,这是如果你openfile 都可以获取有效句柄的,这就是为什么你可以获取句柄,除非 你是硬盘文件写入,这个时候就可以试探打开文件,看句柄的有效值...(就像恶意代码里判断进程句柄是否有效....
2011-9-16 21:04
0
雪    币: 175
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这是实话,因为当一个notepad打开了某个文件之后,仍然可以对这个文件执行Shift+Delete的操作,这最起码说明文件当前没有被打开,或者说已经被关闭了
2011-9-17 17:51
0
游客
登录 | 注册 方可回帖
返回
//