• 大小: 12KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-05-10
  • 语言: C/C++
  • 标签: NTFS  C语言  簇号  

资源简介

下载后需要改动一下数据,才能运行

资源截图

代码片段和文件信息

#include
#include
#include 
#include
#include 
#include 
#include


int main(){

////第一种获取文件目录项
    struct  _finddata_t f;; 
int ok;

char filename[20];
printf(“请输入E盘的一个文件名(类似E:\\\\1.txt)\n“);
scanf(“%s“filename);
ok=_findfirst(filename&f);

printf(“文件的名字为:%s\n“f.name);
printf(“文件的字节数:%d\n“f.size);
//创建时间 
struct tm *cp;   
cp=gmtime(&f.time_create); 
    printf(“文件创建时间为:%d年%02d月%02d日\n“(1900+cp->tm_year) (1+cp->tm_mon)cp->tm_mday);   
//上一次访问时间
struct tm *fp;   
fp=gmtime(&f.time_access);
    printf(“文件上一次访问时间为:%d年%02d月%02d日\n“(1900+fp->tm_year) (1+fp->tm_mon)fp->tm_mday);  
//上一次修改时间
struct tm *wp;   
wp=gmtime(&f.time_write);
    printf(“文件上一次修改时间为:%d年%02d月%02d日\n“(1900+wp->tm_year) (1+wp->tm_mon)wp->tm_mday);  


 

//打开磁盘的0扇区 
HANDLE hDev;  
hDev=CreateFile(“\\\\.\\E:“GENERIC_READFILE_SHARE_WRITE|FILE_SHARE_READ0OPEN_EXISTING00);  
//如果读取磁盘失败 
 if (hDev == INVALID_HANDLE_VALUE)  
    {  
        printf(“CreatFile Error\n“);  
        DWORD ret = GetLastError();  
        printf(“error%x\n“ret);     
    }  
 
 //设置到MFT的第一个簇,得到 关于MFT表项的自己属性和分块
  
  LARGE_INTEGER locate3;
   locate3.QuadPart=((DWORD64)6291456*512); 
   BOOL o3=SetFilePointerEx(hDevlocate30FILE_BEGIN);
   if(o3==0)
   {
   printf(“指针设置失败\n“);
   }  
   unsigned char Buffer3[1024] = {0}; 
   DWORD dwRet3 = 0;  //系统将成功读取的字节数放在里面
   ReadFile(hDevBuffer31024&dwRet30);   
    //如果读取文件失败 
if (dwRet3 < 0)  
    {  
        printf(“ReadFile Error\n“);  
        DWORD ret = GetLastError();  
        printf(“error%x\n“ret);  
    }  

     int local2;
   for(int i=0; i< 1024; i++)  
    {  
       if(Buffer3[i]==128 && Buffer3[i+4]==88)
       {
        local2=i;
       
   }
   
    }  
    local2=local2+64;//定位到第一个rundate处 
    
    //计算MFT的数据流
    DWORD mftz[10];  DWORD mfts[10]; 
     int y=0;
   while(Buffer3[local2]!=0){
     
unsigned char mft[24];
    for(int i=0;i<24;i++)
    {
     mft[i]=Buffer3[i+local2];
}
   int rundate3=(Buffer3[local2]&0xf0)>>4;//高位 几个字节表示簇号 
   int rundate4=(Buffer3[local2]&0x0f);  //低位   
  
    //存放rundate的大小
    unsigned char mftsize[8]; 
    for(int k=0;k     mftsize[k]=Buffer3[local2+rundate4-k];
}
    
    for(int k=0;k   
    int gaowei=(mftsize[k]&0xf0)>>4;
    int diwei=mftsize[k]&0x0f;
     mfts[y]= mfts[y]+gaowei*pow(16(rundate4-k)*2-1)+diwei*pow(16(rundate4-k)*2-2);
   
    }
    local2=local2+rundate4;
   
   unsigned char mftdate1[8];//存放run date 的 簇号 
   for(int k=0;k   
    mftdate1[k]=Buffer3[local2+rundate3-k];
   }
   
  
   for(int k=0;k   
    int gaowei=(mftdate1[k]&0xf0)>>4;
    int diwei=mftdate1[k]&0x0f;
     mftz[y]= mftz[y]+gaowei*pow(16(rundate3-k)*2-1)+diwei*pow(16(rundate3-k)*2-2);
   
   }
   
    local2=local2+runda

评论

共有 条评论