阅读:1979回复:8
判断文件是否曾加密的方法,请各位大侠看一下是否可行
根据资料,fileobject的FsContext字段一般指向FSRTL_COMMON_FCB_HEADER结构,该结构中有一个Flags和一个Flags2分量,其中Flags2现在只定义了3种标志,所以我是这样想:
我自己先定义一个标志#define FLAG_ENCRYPTED (0x80),在进行加密之后就将该标志OR到Flags2里面,表示该文件已经被加密.然后在read的时候先判断Flags2中是否有这个标志,如果有就解密. 我这个方法不用改变文件的大小,也不用在磁盘上保留一个目录保存曾加密文件的信息.我自己已经在win2000和xp下对txt文件实验成功. 我是菜鸟,不知道这个方法是否确实可行,请各位关注这个问题的大侠帮忙评论/测试一下.(我想着这么简单的方法这么多高手怎么没有想到呢,所以我很心虚~~~:) ) |
|
沙发#
发布于:2005-06-09 23:19
Did you restart your machine after encryption? Did you try to copy encrypted file to another machine?
Then you\'ll know why your solution is not working after these tests. |
|
板凳#
发布于:2005-06-10 13:41
fileobject是动记的对象,和文件不存在永久关系,两次打开同一个文件,该对象上的数据不能保留。都是独立的。所以你的想法不成。
关键是要在文件本身作标记,这样才能解决不同的文件系统下能有一致的表现。 最简单的办法是作一个列表,记录下哪些文件是加密的。但这样的效率不高,而且记忆的文件数有限.如果能找到在文件本身作标记的办法就好了。 |
|
|
地板#
发布于:2005-06-10 17:04
fileobject是动记的对象,和文件不存在永久关系,两次打开同一个文件,该对象上的数据不能保留。都是独立的。所以你的想法不成。 学习。 |
|
|
地下室#
发布于:2005-06-10 20:39
感谢znsoft与michaelgz的指点,我重新做了一下测试,一旦重启后设置的标志就消失了,所以的确此路不通.
不过我按照类似的思路,看了一下资料,觉得以下信息似乎可以利用. 2600ifs的ntifs.h中有以下定义: typedef struct _FILE_BASIC_INFORMATION { ...... ULONG FileAttributes; } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; 该结构中FileAttributes的取值有这些: #define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 ...... #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 这些取值并没有利用到高4位,所以可以自己定义一个标志如 #define FLAG_ENCRYPTED 0x80000000 而最重要的是FILE_BASIC_INFORMATION中的内容应该会作为文件的metadata储存到磁盘上 不知道两位大侠对这个想法有什么指教?有没有试过? 请指点!谢谢!! |
|
5楼#
发布于:2005-06-10 23:56
这也许可以用,但象以前的网友说的一样,可能不稳定,你不清楚啥时ms就会用这些位置了.
而且这和文件系统关联太强,必须保证每个文件系统都有相似的区域才行. |
|
|
6楼#
发布于:2005-06-11 02:46
You have to understand what file attributes a file system can keep and how file attributes are stored in a file system. For example though in NTFS standard information attribute could be 4 bytes long, in FAT it\'s only 1 byte. So some NTFS file standard information attributes cannot be populated to FAT, let alone other specific NTFS meta data.
It\'s much easier if you only want your fsd support a particular file system. But people here are trying to find a generic solution that works on all file systems. |
|
7楼#
发布于:2005-06-11 09:07
呵呵,从两位大侠的回贴中受益非浅.非常感谢!
这个问题只有先放一边了,继续学习...:) |
|
8楼#
发布于:2005-08-11 11:57
学习。
有一个想法:在文件的时间上做记,让年份加上一千年,怎么样? |
|