使用.net框架扫描磁盘未分配空间

本文关键字:分配 空间 磁盘 扫描 net 框架 使用 | 更新日期: 2023-09-27 18:08:03

我想在dotNet (c#)中玩文件恢复编程。问题是我不知道从哪里开始。似乎dotNet中的所有东西都假设某种文件系统、目录和/或文件已经存在,而我对那些根据操作系统不存在的文件感兴趣。

我想我必须学习更多关于文件格式,开始和结束标记和扫描磁盘空间的字节码等(0xFF, 0xD8在jpeg为例),但在我甚至到达之前,我想知道如何扫描磁盘扇区扇区,包括未分配的空间为这样的字节码在dotNet。

使用.net框架扫描磁盘未分配空间

我有一个小程序浮动,将读取磁盘块,这将帮助你,但它是在c++使用windows API,而不是。net。

存储内部硬盘信息:

typedef struct DRIVE {
    HANDLE hDrive;
    int sector;
    int *sector_data;
    DWORD dwRead;
    int sector_size;
} drive;

打开阅读:

/*-- Create Structure to store drive data --*/
DRIVE CDRIVE;
/*-- Open the C drive as a file --*/
CDRIVE.hDrive = CreateFile("''''.''C:", GENERIC_READ, (FILE_SHARE_READ | FILE_SHARE_WRITE), NULL, OPEN_EXISTING, NULL, NULL);
/*-- Set Initial Data in Drive Structure --*/
CDRIVE.sector = 0;
CDRIVE.sector_size = WHATEVER_YOU_CHOOSE;
CDRIVE.sector_data = new int[WHATEVER_YOU_CHOOSE];
if(CDRIVE.hDrive == INVALID_HANDLE_VALUE) {
    return false;
}
阅读:

/*-- Set the position of the reading pointer --*/
SetFilePointer(CDRIVE.hDrive, CDRIVE.sector*CDRIVE.sector_size, 0, FILE_BEGIN);
/*-- empty the previous sector data (to be honest this is only a precaution) --*/
memset(CDRIVE.sector_data, 0, sizeof(CDRIVE.sector_data));
/*-- Read the new data --*/
ReadFile(CDRIVE.hDrive, CDRIVE.sector_data, CDRIVE.sector_size, &CDRIVE.dwRead, 0);

希望这对你有用!