至於是用 Win32 API or C code 實驗結果都一樣
故只要稍微修改一下,便可以用來讀指定的 NTFS Entry
當然我們也可以讀取實體的硬碟開頭,只要遵循以下規則
Name | Meaning |
\\.\PhysicalDrive0 | 電腦的第 1 顆硬碟 |
\\.\PhysicalDrive1 | 電腦的第 2 顆硬碟 |
\\.\c: | 電腦的 C 槽 |
\\.\c:\ | 電腦的 C 槽 file system |
#include <stdio.h>
#include <mem.h>
//-----------------------------------------------------------------------------
#define SECTOR_SIZE 512
//---------------------------------------------------------------------------
// num is sector number, it starts with 0
bool ReadSect(const char *dsk, char *buf, int num)
{
if (strlen(dsk) == 0) {
return false;
}
if (num < 0) {
return false;
}
FILE *f = fopen(dsk, "rb");
if (!f) {
return false;
}
fseek(f, num * SECTOR_SIZE, SEEK_SET);
fread(buf, SECTOR_SIZE, 1, f);
fclose(f);
return true;
}
//---------------------------------------------------------------------------
int main(void)
{
char drv[64];
memset(drv, 0x00, sizeof(drv));
char disk;
printf("Which disk do you want to read ? ");
scanf("%c", &disk);
unsigned int sector;
printf("Which sector do you want to read ? ");
scanf("%d", §or);
printf("\r\n");
// use "\\.\PhysicalDrive" to read
sprintf(drv, "\\\\.\\%c:", disk);
char buf[SECTOR_SIZE];
ReadSect(drv, buf, sector);
int line = 0;
for (int i = 0; i < SECTOR_SIZE; i++) {
if (line == 0) {
printf("0x%04X ", sector * SECTOR_SIZE + (i/16) * 16);
}
printf("%02X ", (unsigned char)buf[i]);
line++;
if (line == 16) {
printf("\n");
line = 0;
}
}
printf("\n");
return 0;
}
沒有留言:
張貼留言