NTFS格式 读取MFT信息

#include "ntfs.h" #include <iostream> #include <fstream> #include <map> #include <vector> using namespace std; //管理员权限运行 typedef struct { ULONGLONG index; ULONGLONG parent; WCHAR name[1024]; int type; //0 file 1 dir } FILE_INFO, *PFILE_INFO; //枚举盘符 void OpenNtfsVolume() { WCHAR tDrivers[26*4+1] = {}; GetLogicalDriveStrings(26*4+1,tDrivers); WCHAR fileSysBuf[8]; DWORD dwDri; //0~25 WCHAR szRootName[40]; WCHAR szVolumeName[32]; int iFilterRoot=0; for(WCHAR *p=tDrivers;*p!='\0';p+=4) { if(*p>=L'a') *p-=32;// dwDri=*p-L'A'; if(DRIVE_FIXED==GetDriveTypeW(p)) { DWORD dwMaxComLen,dwFileSysFlag; GetVolumeInformationW(p,szVolumeName,32,NULL,&dwMaxComLen,&dwFileSysFlag,fileSysBuf,8); if(fileSysBuf[0]==L'N' && fileSysBuf[1]==L'T' && fileSysBuf[2]==L'F' && fileSysBuf[3]==L'S') { swprintf(szRootName,L"%s (%c:)",szVolumeName,*p); WCHAR szVolumePath[10]; swprintf(szVolumePath,L"\\\\.\\%c:",*p); wcout<<szVolumePath<<endl; } } } } int main() { //wcout.imbue(locale(locale(),"",LC_CTYPE)); char szACP[16]; sprintf(szACP, ".%d", GetACP()); //setlocale(LC_CTYPE, szACP); wcout.imbue(locale(locale(),szACP,LC_CTYPE)); OpenNtfsVolume(); WCHAR driveletter[] = L"\\\\.\\D:"; HANDLE hVol = CreateFile(driveletter, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL); NTFS_VOLUME_DATA_BUFFER ntfsVolData; DWORD dwWritten = 0; BOOL bDioControl = DeviceIoControl(hVol, FSCTL_GET_NTFS_VOLUME_DATA, NULL, 0, &ntfsVolData, sizeof(ntfsVolData), &dwWritten, NULL); if (!bDioControl) {wcout<<L"error"<<endl; return 1;} LARGE_INTEGER num; num.QuadPart = 1024; LONGLONG total_file_count = (ntfsVolData.MftValidDataLength.QuadPart/num.QuadPart); wcout<<L"total_file_count:"<<total_file_count<<endl; PNTFS_FILE_RECORD_OUTPUT_BUFFER ntfsFileRecordOutput = (PNTFS_FILE_RECORD_OUTPUT_BUFFER)malloc(sizeof(NTFS_FILE_RECORD_OUTPUT_BUFFER)+ntfsVolData.BytesPerFileRecordSegment-1); for( LONGLONG i = 0; i < total_file_count && i < 10;i++) { NTFS_FILE_RECORD_INPUT_BUFFER mftRecordInput; mftRecordInput.FileReferenceNumber.QuadPart = i; memset(ntfsFileRecordOutpu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值