资源简介
给定一个文件,输出该文件的目录项和文件所占的所有簇号,目前调试通过卷标为F:的U盘下任意文件的搜索,可能存在一些问题,仅供参考。
代码参考:https://www.debugrun.com/a/zAfLt9k.html
代码片段和文件信息
/*
Wang Guangren - Wuhan University - Cypherspace Security - Software - Task - 2018.03.26
Reference: https://www.debugrun.com/a/zAfLt9k.html - 用C语言完成对文件的定位和打印目录项以及所占簇号
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
struct _finddata_t f;
int ok;
char filename[20];
cout<<“请输入一个F盘中完整的文件路径(例如F:\\find.txt)“< cin >> filename;
ok = _findfirst(filename &f);
cout<
cout<<“-----------文件基本信息-----------“<
cout<
cout << “文件名称:“ << f.name << endl;
cout << “文件字节:“ << f.size << endl;
//创建时间
struct tm *cp;
cp = gmtime(&f.time_create);
cout << “文件创建时间为:“ << (1900+cp->tm_year) << “年“ << (1+cp->tm_mon) << “月“ << (cp->tm_mday) << “日“<
//上一次访问时间
struct tm *fp;
fp = gmtime(&f.time_access);
cout << “文件上一次访问时间为:“ << (1900+fp->tm_year) << “年“ << (1+fp->tm_mon) << “月“ << (fp->tm_mday) << “日“<
//上一次修改时间
struct tm *wp;
wp = gmtime(&f.time_write);
cout << “文件上一次修改时间为:“ << (1900+wp->tm_year) << “年“ << (1+wp->tm_mon) << “月“ << (wp->tm_mday) << “日“<
cout<
cout<<“-----------文件搜索信息-----------“<
cout<
//打开磁盘的0扇区
HANDLE hDev;
hDev = CreateFile(“\\\\.\\F:“ GENERIC_READ FILE_SHARE_WRITE|FILE_SHARE_READ 0 OPEN_EXISTING 0 0);
if(hDev == INVALID_HANDLE_VALUE)
{
cout << “CreateFile Error!“ << endl;
DWORD ret = GetLastError();
cout << “error“ << ret << endl;
}
unsigned char Buffers[1024] = {0};
DWORD startRet;
ReadFile(hDev Buffers 1024 &startRet 0);
DWORD mftlocal=0;
for(int i=0; i<4; i++)
{
mftlocal += Buffers[48+i]<<(i*8);
}
cout << “根MFT起始簇号:“ << mftlocal << endl;
//设置到MFT的第一个簇,得到关于MFT表项的自己属性和分块
LARGE_INTEGER locate3;
locate3.QuadPart = ((DWORD64)mftlocal*8*512);
BOOL o3 = SetFilePointerEx(hDev locate3 0 FILE_BEGIN);
if(o3==0)
{
cout << “指针设置失败“ << endl;
}
unsigned char Buffer3[1024] = {0};
DWORD dwRet3 = 0;//将读取成功的字节数放在里面
ReadFile(hDev Buffer3 1024 &dwRet3 0);
//如果读文件失败
if(dwRet3 < 0)
{
cout << “ReadFile Error!“ << endl;
DWORD ret = GetLastError();
cout << “error“ << ret << endl;
}
int local2;
for(int i=0; i<1024; i++)
{
if(Buffer3[i]==128 && Buffer3[i+4]==72)
{
local2 = i;
}
}
local2 = local2+64; //定位到第一个rundata
//找到根目录的MFT
LARGE_INTEGER locate;
locate.QuadPart = ((DWORD)(mftlocal*8+10)*512);
BOOL o=SetFilePointerEx(hDev locate 0 FILE_BEGIN);
if(o==0) cout << “指针设置失败“ <
//设置两个扇区大小来读取MFT
unsigned char Buffer[1024]={0};
DWORD dwRet = 0;
ReadFile(hDev Buffer 1024 &dwRet 0);
//如果读文件失败
if(dwRet < 0)
{
cout << “ReadFile Error!“ << endl;
DWORD ret = GetLastError();
cout << “error“ << ret << endl;
}
//找A0属性来确定根目录扇区
int A0local=0;
for(DWORD i=0; i<1020; i++)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-26 14:23 pics_of_result\
文件 106774 2018-03-26 14:21 pics_of_result\pic001.png
文件 77370 2018-03-26 14:21 pics_of_result\pic002.png
文件 106176 2018-03-26 14:22 pics_of_result\pic003.png
文件 115332 2018-03-26 14:22 pics_of_result\pic004.png
文件 148586 2018-03-26 14:22 pics_of_result\pic005.png
文件 8386 2018-03-26 14:15 read.cpp
文件 2261776 2018-03-26 14:15 read.exe
相关资源
- C/C++文件系统树状结构
- 基于tcp 的windows发送文件系统mfc界面
- C++模拟磁盘文件系统
- 2013-2014华南理工大学操作系统课程设
- C语言实现建议的虚拟文件系统
- 模拟 Linux 文件系统 C++
- linux类EXT2文件系统源码
- C++实现文件系统模拟器
- 文件系统C++实现
- C/C++仿真实现Linux文件系统
- 简单的多用户文件系统
- Windows文件系统过滤驱动开发教程(第
- 文件系统.cpp
- NTFS数据恢复的c++类代码
- 用高级语言编写和调试一个简单的文
- 模拟Unix文件系统C语言版
- 一个简单的文件系统操作系统课程设
- 文件系统 操作系统实验 C++
- 操作系统 课程设计 C++ 模拟文件系统
- 文件系统的用户界面[含答案]
- 操作系统课程设计报告模拟文件系统
- C/C++实现FAT文件系统的读写
- 文件系统fileSystem
- C语言模拟文件系统
- linux ext2 文件系统模拟 c语言实现
- 操作系统课程设计 linux文件系统
- c++写的操作系统课程设计:模拟文件
- 文件系统原理混合索引
- Linux虚拟文件系统vfs的模拟代码
- C++模拟文件系统
评论
共有 条评论