社区
C语言
帖子详情
请问如何修改FAT从而达到隐藏个别文件的目的?
quaddamage
2006-07-24 04:14:52
听说好像是修改文件名的第一个字符为0x5E,但是如何具体操作呢?? 最好能给个代码例子啊
...全文
284
11
打赏
收藏
请问如何修改FAT从而达到隐藏个别文件的目的?
听说好像是修改文件名的第一个字符为0x5E,但是如何具体操作呢?? 最好能给个代码例子啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jixingzhong
2006-07-25
打赏
举报
回复
修改注册表也是可以隐藏文件的,
但是可能比较麻烦 ...
jixingzhong
2006-07-25
打赏
举报
回复
一、 引言
文件是数据在磁盘上最常用的一种存放形式,也是在程序设计中与之经常打交道的一种编程对象,不少程序尤其是数据传输和处理类的应用程序更是需要频繁的创建、读取和写入文件。对于一些要求不是很严格的程序,我们往往只关心文件的内容是否正确、文件大小是否有增减或是再严格一些,看文件名是否符合规定等等。以上这些要素对于大多数程序而言显然是可以满足实际需求的,但对于某些特殊行业的一些有着比较严格要求的软件系统,仅有以上要素还是远远不够的,往往还需要对文件的所有属性诸如文件的创建时间、文件的最后访问时间、文件的最后修改时间等等进行提取处理与重新设置。
二、 WIN32_FIND_DATA结构
关于文件的全部属性信息,总计有以下以下9种:文件的标题名、文件的属性(只读、存档,隐藏等)、文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件大小的高位双字、文件大小的低位双字、保留、保留。在这里只有文件标题名和文件的长度可以通过CFile类比较方便的获得,而对于其他几种属性的获取和设置就无能为力了。
在用findfirst()和findnext()函数去查找磁盘文件时经常使用的一个数据结构WIN32_FIND_DATA的成员变量里包含了以上所有的文件属性,因此可以通过这个结构作为获取和更改文件属性的手段。该结构的内容如下:
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; //文件属性
FILETIME ftCreationTime; // 文件创建时间
FILETIME ftLastAccessTime; // 文件最后一次访问时间
FILETIME ftLastWriteTime; // 文件最后一次修改时间
DWORD nFileSizeHigh; // 文件长度高32位
DWORD nFileSizeLow; // 文件长度低32位
DWORD dwReserved0; // 系统保留
DWORD dwReserved1; // 系统保留
TCHAR cFileName[ MAX_PATH ]; // 长文件名
TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;
可以通过FindFirstFile()函数根据当前的文件存放路径查找该文件来把待操作文件的相关属性读取到WIN32_FIND_DATA结构中去:
WIN32_FIND_DATA ffd ;
HANDLE hFind = FindFirstFile("c:\\test.dat",&ffd);
在使用这个结构时不能手工修改这个结构中的任何数据,结构对于开发人员来说只能作为一个只读数据,其所有的成员变量都会由系统完成填写。在MSDN帮助中可以查找到关于WIN32_FIND_DATA结构的更加详细的说明。
三、 文件属性信息的获取与更改
为了更好的保存获取到的文件属性信息,对应于文件属性构造一个自定义的FILE_INFO数据结构,获取的属性信息可暂存于此:
typedef struct _FILE_INFO {
TCHAR szFileTitle[128]; //文件的标题名
DWORD dwFileAttributes; //文件的属性
FILETIME ftCreationTime; //文件的创建时间
FILETIME ftLastAccessTime; //文件的最后访问时间
FILETIME ftLastWriteTime; //文件的最后修改时间
DWORD nFileSizeHigh; //文件大小的高位双字
DWORD nFileSizeLow; //文件大小的低位双字
DWORD dwReserved0; //保留,为0
DWORD dwReserved1; //保留,为0
} FILE_INFO, * PFILE_INFO;
首先用FindFirstFile()函数将文件属性获取到WIN32_FIND_DATA 结构对象FindFileData中去,之后可以用FindClose()将其关闭,并把FindFileData中的有关文件属性信息的内容复制到自定义结构FILE_INFO的结构对象FileInfo中备用。下面是关于这部分描述的部分关键代码:
//声明结构对象
FILE_INFO FileInfo;
WIN32_FIND_DATA FindFileData;
……
//获取文件属性信息
FindClose(FindFirstFile("Test.txt",&FindFileData));
memset(&FileInfo,0,sizeof(FILE_INFO));
……
//将文件属性信息保存到FileInfo中备用
strcpy(FileInfo.szFileTitle,myFile.GetFileTitle());
FileInfo.dwFileAttributes = FindFileData.dwFileAttributes;
FileInfo.ftCreationTime = FindFileData.ftCreationTime;
FileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime;
FileInfo.ftLastWriteTime = FindFileData.ftLastWriteTime;
FileInfo.nFileSizeHigh = FindFileData.nFileSizeHigh;
FileInfo.nFileSizeLow = FindFileData.nFileSizeLow;
……
在获取到文件的原始属性信息后既可以原封不动的将属性重新写到文件,也可以对其中某一项或某几项属性内容进行修改后再行写入文件,从而达到更改文件属性的目的。比如可以用SetFileTime()函数设置文件的创建时间、最近一次访问时间以及最近一次修改的时间等等:
SetFileTime((HANDLE)destFile.m_hFile, //待写入的文件句柄
&FileInfo.ftCreationTime, //文件的创建时间
&FileInfo.ftLastAccessTime, //文件最近一次的访问时间
&FileInfo.ftLastWriteTime); //文件最近一次的修改时间
也可以用SetFileAttributes() 函数实现对文件属性的修改:
SetFileAttributes(FileInfo.szFileTitle,FileInfo.dwFileAttributes);
至于文件名的修改则更加简单,直接在创建文件时在CreateFile()或CFile类的成员函数Open里直接对文件名参数进行设置即可。
小结:本文通过对WIN32_FIND_DATA结构和SetFileTime()、SetFileAttributes()等主要函数实现了对磁盘文件的相关属性信息的获取与修改。用此技术可以在通讯等对文件有严格要求的应用领域实现文件全部信息(包括文件内容、文件名以及文件属性等)的完整传送。本文所述程序在Windows 98下由Microsoft Visual C++ 6.0编译调试通过。
jixingzhong
2006-07-25
打赏
举报
回复
或者是用 system 调用 attrib 设置文件属性 来设置文件为隐藏 ...
jixingzhong
2006-07-25
打赏
举报
回复
S_IWRITE允许写 S_IREAD允许读 S_IREAD|S_IWRITE允许读、写
FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEM系统
程序例子:
函数名: _chmod, chmod
功 能: 改变文件的访问方式
用 法: int chmod(const char *filename, int permiss);
程序例:
#include <sys\stat.h>
#include <stdio.h>
#include <io.h>
void make_read_only(char *filename);
int main(void)
{
make_read_only("NOTEXIST.FIL");
make_read_only("MYFILE.FIL");
return 0;
}
void make_read_only(char *filename)
{
int stat;
stat = chmod(filename, S_IREAD);
if (stat)
printf("Couldn't make %s read-only\n", filename);
else
printf("Made %s read-only\n", filename);
}
jixingzhong
2006-07-25
打赏
举报
回复
听说好像是修改文件名的第一个字符为0x5E
====================
应该是修改文件管理内容,
文件名的修改肯定是无效的 ....
其实就是修改文件的属性了,
上面的函数 可以隐藏文件 ...
jixingzhong
2006-07-25
打赏
举报
回复
int _chmod(char *filename,int func[,int attrib]);
本函数用于读取或设定文件filename的属性,
当func=0时,函数返回文件的属性;当func=1时,函数设定文件的属性
若为设定文件属性,attrib可以为下列常数之一
FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEM系统
修改文件为 隐藏属性, 行么?
quaddamage
2006-07-25
打赏
举报
回复
大哥,能不能给个具体点的代码啊??是不是用DeviceIOcontrol啊? 万分感谢!!
ckp
2006-07-25
打赏
举报
回复
W2k和WinXP好像不能直接操作FAT表.
改文件名的第一个字符为0xE5,是将这一个文件删除.但是这样修改并不保险,如果将文件名改为已删除,而FAT的相应扇区不作相应修改,那么使用Chkdsk命令检查时,就会发现许多丢失簇,用这样的办法隐藏文件并不保险.
lovefreex
2006-07-25
打赏
举报
回复
这些都是windows平台上用的吧~~
双杯献酒
2006-07-24
打赏
举报
回复
现在FAT用的已经越来越少了吧.
vosine
2006-07-24
打赏
举报
回复
是改成0xE5.
如果是fat32的话, 读cluster 2, 找到该文件名的entry, 然后改第一个byte为E5
从0到1动手写
FAT
32
文件
系统
本课程从0行代码开始,逐步迭代一步步地演示了怎样构造一个
FAT
32
文件
系统。 通过这种简单易行的方式,你将逐步深入了解
FAT
32
文件
系统的工程原理。 课程主要分以下几个章节: 建立驱动框架 分区解析
FAT
解析
文件
操作...
【存储知识】
文件
系统与硬盘存储(分区、格式化、挂载、inode、软链接与硬链接)
一、Linux系统的
文件
存储结构 在Linux系统中,目录、字符设备、套接字、硬盘、光驱、打印机等都被抽象成
文件
形式(“Linux系统一切皆
文件
”)。既然平时我们打交道的都是
文件
,那么又应该如何找到它们呢? 在...
第四部分:存储管理
操作系统对存储设备的各种属性加以抽象,从而定义了逻辑单元(
文件
),再将
文件
映射到物理设备上。
文件
是记录在外存上的相关信息的具有名称的集合。从用户角度而言,
文件
是逻辑外存的最小份分配单元。10.1.1
操作系统面试题总结
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序 的堆栈,使程序转而执行其它指令,以
达到
攻击的
目的
。 造成缓冲区溢出的主原因是程序中没有仔细检查用户输入的参数。 17、什么是...
Linux系统应用 第六章 Linux
文件
系统
6.1
文件
系统和
文件
类型 Linux
文件
系统结构 Linux的最重要特征之一就是支持多种
文件
系统,Linux采用与Windows完全不同的独立
文件
系统存储方式。其采用分层结构,顶层为根目录,用符号“/”表示,在根目录下是不同的子...
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章