【问题标题】:Scan disk unallocated space using .Net framework使用 .Net 框架扫描磁盘未分配空间
【发布时间】:2013-03-31 05:37:38
【问题描述】:

我想在 dotNet (C#) 中进行文件恢复编程。问题是我不知道从哪里开始。似乎 dotNet 中的所有内容都假定某种文件系统、目录和/或文件已经存在,并且我对根据操作系统不存在的文件感兴趣。

我假设我必须了解更多关于文件格式、开始和结束标记以及扫描磁盘空间以查找字节码等(例如 jpeg 中的 0xFF、0xD8)但在我开始之前我想知道如何扫描逐个扇区的磁盘,包括 dotNet 中此类字节码的未分配空间。

【问题讨论】:

  • This question 可能会有所帮助。
  • 这个问题的答案可能会让您入门:stackoverflow.com/questions/3533219/… - 我(疯狂地)猜测您只需要使用 Windows API,它并不完全是 .NET。这也意味着您将有更好的运气来搜索如何进行一般的原始磁盘访问,而不仅仅是 .NET
  • 好的,非常感谢。这可能会变成一个 codeplex 产品。

标签: c# hard-drive diagnostics


【解决方案1】:

我有一个浮动的小程序,它会按块读取磁盘,这会对你有所帮助,但它是在 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);

希望对你有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2013-02-04
    • 2019-12-12
    • 1970-01-01
    • 2011-02-26
    • 2019-08-11
    • 2016-10-26
    相关资源
    最近更新 更多