阅读:1787回复:14
郁闷阿,如何判断是copy和粘贴?
我原来的想法是在read中记录是我要的文件名,在write中比较,可问题是,同名文件呢?还有就是小文件,在一开始read,过一段时间粘贴时,就没了?各位老大,给个建议阿,指点一下思路就行。
我要做的是记录用户复制和粘贴的时间和文件名,包括在cmd下的copy。 |
|
沙发#
发布于:2004-11-19 13:20
不清楚你想说什么
|
|
板凳#
发布于:2004-11-19 14:35
我原来的想法是在irp_mj_read中记录是我要的文件名,在irp_mj_write中比较是否为我给记录的文件名,可问题是,如果有同名文件操作(当然同名文件在进行别的谢操作),还有就是小文件,在一开始copy,过一段时间粘贴时,不就没了吗?各位老大,给个建议阿,指点一下思路就行。
我要实现的功能是记录用户复制和粘贴的时间和文件名,包括在cmd下的copy。 |
|
地板#
发布于:2004-11-19 15:36
可问题是,如果有同名文件操作(当然同名文件在进行别的谢操作),还有就是小文件,在一开始copy,过一段时间粘贴时,不就没了吗?
=============================== 什么东西没了啊,小文件为什么就会没了,同名文件是不是就是同一个文件 |
|
地下室#
发布于:2004-11-19 16:16
我原来想是这样作的:
1。在irp_mj_read中得到文件名,当然是跟我要监视的文件名一致的 保存在一数组中,做一个标记。 2。在irp_mj_write中比较,如是,到数组中比较,如已经有标记, 我认为是粘贴。 3。在close中,根据标记来清除数组中文件名。 问题: 1。文件比较小时,粘贴操作时,无irp_mj_read. 2。如果执行上面3后,进行多个操作时,特别是同名文件(文件名相同,但不是同一个文件)操作时,我已经清除了数组中的文件名了。我就无法判断该粘贴操作了(当然文件比较大时,没问题)。 3.在cmd下,进行类似如下copy时没法判断:copy 1.txt c:\test\23.txt 谢谢tooflat的关注。 |
|
5楼#
发布于:2004-11-19 17:03
在内核里面无法达到你的目的,恐怕应用层也不行,粘贴这个操作不好定义,通常是读取剪贴板里面的内容再写到其他地方,但是读和写没有必然的联系
|
|
6楼#
发布于:2004-11-19 17:08
是啊,郁闷中,谢谢了。tooflat.
我在osr上,他们说在read和writed |
|
7楼#
发布于:2004-11-22 09:02
老大们谁能在给点建设性的意见,让小弟参考参考。谢谢了。
|
|
8楼#
发布于:2004-11-24 08:49
还是没结果。给分了。
|
|
9楼#
发布于:2004-11-24 09:47
copy和粘贴
在底层文件系统,没这2个概念 只有 rename,delete 可以查阅 <<nt file system>> |
|
|
10楼#
发布于:2004-11-24 10:25
TO 9楼:
谢谢你,newkey。nt file sytem我也看了。对你说的这些,我也了解。可问题是,我得监视和控制用户的copy和粘贴操作。 你有好的建议吗?能与我共享吗? 谢谢了。 ps:你的ifs能用了吗?我在下2003的,可慢呢。我如能下完,ftp给你。 |
|
11楼#
发布于:2004-11-24 11:07
监视和控制用户的copy和粘贴操作是否可以通过系统调用hook来实现呢?直接hook Native API可否?
|
|
12楼#
发布于:2004-11-24 13:40
在驱动层实现这个好像太繁琐了吧。
windows应该提供了一定的接口吧,因为你在资源浏览器中点击右键弹出的快捷菜单中,系统会自动判断是否可以粘贴,而粘贴本身就是生成一个新的文件,这个文件与所拷贝的文件内容相同。因此,我认为是否可以通过在生成一个新的文件对象时,检查系统的某个标志位来判断粘贴。 呵呵,但愿我的想法不是错的。 :) :) :) |
|
|
13楼#
发布于:2004-11-24 14:58
感谢cicada和fslife的关注。
我主要还要考虑到用户在cmd进行copy操作和一些应用程序带来的操作。 这贴的分数已结了。希望大家能继续讨论。完毕后,我将另起一贴给分。 |
|
14楼#
发布于:2007-03-07 10:46
内核虽然没有复制的标志,但一个复制的动作与正常的读文件是有微妙的区别的。
等你发现了这个区别后,在create()例程中拦截即可。 |
|