资源简介
自己写的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
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
- XUnZip Zip解压缩.rar
评论
共有 条评论