資源簡介
自己寫的NTFS數據恢復的c++類代碼,可供學習ntfs參考,能實現數據恢復的功能

代碼片段和文件信息
#include?“stdafx.h“
#include?“Winuser.h“
#include?“NTFS.h“
//*************************************************類成員函數的實現****************************************************
//*************************************************類成員函數的實現****************************************************
//TODO:實現文件恢復的類
//定義小端數字轉換成大端數字
WORD?CNTFS_Recovery::DiskNumToRealNum(?IN?WORD?wNeedChange?)
{
????WORD?wReturn=0?;
????//截取wNeedChange低8位實際數高8位
????wReturn?=?wReturn|(?255&wNeedChange?);
????wReturn=wReturn<<8;
????wReturn=wNeedChange>>8;
????wReturn?=?wReturn|(?255&wNeedChange?);
????return?wReturn?;
}
DWORD?CNTFS_Recovery::DiskNumToRealNum(IN??DWORD?dwNeedChange?)
{
????DWORD?dwReturn=0?;
????//截取wNeedChange低8位實際數高8位
????for?(?int?i?=?0?;?i<3?;?i++?)
????{
????????dwReturn?=?dwReturn|(?255&dwNeedChange?);
????????dwReturn=dwReturn<<8;
????????dwReturn=dwNeedChange>>8;
????}
????dwReturn?=?dwReturn|(?255&dwNeedChange?);
????return?dwReturn?;
}
QWORD?CNTFS_Recovery::DiskNumToRealNum(IN?QWORD?qwNeedChange?)
{
????QWORD?qwReturn=0?;
????//截取wNeedChange低8位實際數高8位
????for?(?int?i?=?0?;?i<7?;?i++?)
????{
????????qwReturn?=?qwReturn|(?255&qwNeedChange?);
????????qwReturn=qwReturn<<8;
????????qwReturn=qwNeedChange>>8;
????}
????qwReturn?=?qwReturn|(?255&qwNeedChange?);
????return?qwReturn?;
}
//實現讀取磁盤數據的函數一次性最大可讀65535字節
BOOL?CNTFS_Recovery::ReadDiskData(IN?HANDLE?hFile??IN?QWORD?qwStartByte??IN?DWORD?qwLength?OUT?LPVOID?lpData?)
{
????DWORD?dwCB?;
????//將qwStartByteqwLength用512整倍字節長度替代
????DWORD?dOffsetBytes?=?qwStartByte%512;???????????????????????????????????????//dOffset為qwStartByte距離qwStartByte所在扇區的偏移地址
????QWORD?qwOffsetSectors?=?qwStartByte/512?;???????????????????????????????????//dOffsetStartSectors為讀取數據的起始扇區
????DWORD?dLengthAwayEnd?=?(?512?-(qwLength?+?dOffsetBytes?)%512?)%512;?????????//應讀取的數據尾距離本扇區的末尾距離
????LARGE_INTEGER?llOffset?;
????llOffset.QuadPart?=?(QWORD)(?qwOffsetSectors*512?);?????????????????????????//llOffset.QuadPart為實際讀取的起始字節位置
????//設置文件句柄位置
????if?(?INVALID_SET_FILE_POINTER?==?SetFilePointer(?hFile??llOffset.LowPart??&llOffset.HighPart??FILE_BEGIN?))
????{
????????return?FALSE?;
????}
????//讀取文件數據
????DWORD?dLength?=?(?qwLength?+?dOffsetBytes?+?dLengthAwayEnd?)>65024???65024?:?(?qwLength?+?dOffsetBytes?+?dLengthAwayEnd?)?;
?
????CHAR?*lpBuffer?=?(CHAR?*)malloc(dLength+1);
????ZeroMemory(?lpBuffer??sizeof(lpBuffer)?);
????if?(?!ReadFile(?hFile??lpBuffer?dLength??&?dwCB??NULL?)?)
????{
????????return?FALSE?;
????}
????memcpy(?lpData??lpBuffer+dOffsetBytes??qwLength?);
????free(lpBuffer);
????return?TRUE?;
}
//實現讀取指定驅動器盤的函數
BOOL?CNTFS_Recovery::ReadDriverData(?IN?CHAR?*pcDriver?IN??QWORD?qwStartByte?IN?DWORD?dwLength?OUT?LPVOID?lpData?)?
{
????TCHAR?szFilePath[255]={0};
????wsprintf(?szFilePath??L“\\\\.\\%s:“??pcDriver?);
????//根據路徑獲取物理磁盤指針
????HANDLE?hDevice?=?CreateFile(?szFilePathGENERIC_READ|GENERIC_WRITEFILE_SHARE_RE
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????61773??2012-05-12?19:35??NTFS.cpp
?????文件??????28336??2012-05-11?16:17??NTFS.h
-----------?---------??----------?-----??----
????????????????90109????????????????????2
評論
共有 條評論