|
음... 제목이 좀 이상하네요...
어쨋든ㅋㅋ 제가 프로그램 하나를 제작중인데요.파일이 하드디스크에서 어느 섹터에 쓰였는지, 그 섹테어 쓰여져 있는 데이터는 무었
인지 알아내는 프로그램 입니당. 우선 파일이 쓰여진 섹터중에서 맨 처음 섹터를 구하고 있는데여. 생각 보다 잘 안되네요...
특정 섹터부터의 데이터를 읽어오는 것은 구현이 됬는데요.그 파일이 어느 섹터에 쓰여져 있는지를 모르겠어요.ㅠ 첨부한 사진처럼 알
고 싶어요.ㅠ 파일의 섹터정보를 알아내는 컴포넌트나 함수가 있다면 알려주세요.^^
밑에는 100번 섹터부터 2개의 섹터(1024Byte)만큼 읽어오는 프로그램 입니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
typedef BOOLEAN TF;
typedef UCHAR U8;
typedef USHORT U16;
typedef ULONG U32;
typedef ULONGLONG U64;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void ReadSector(HANDLE hVolume, U64 sector, U32 count, void* buffer)
{
ULARGE_INTEGER offset;
OVERLAPPED overlap = {0};
U32 n;
offset.QuadPart = sector * 512;
overlap.Offset = offset.LowPart;
overlap.OffsetHigh = offset.HighPart;
ReadFile(hVolume, buffer, count * 512, &n, &overlap);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned char buf[1024];
HANDLE hVolume;
AnsiString s;
int i, j;
hVolume = CreateFile("\\\\.\\c:", GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE, 0,OPEN_EXISTING, 0, 0);
ReadSector(hVolume,100,2,buf);
for(i = 0; i < 64; i++)
{
for(j = 0; j < 16; j++)
{
s.sprintf("%.02x",buf[(i*16)+j]);
Memo1->Lines->Strings[i] = Memo1->Lines->Strings[i]+s+" ";
}
}
}
//---------------------------------------------------------------------------
|