2013-02-18 4 views
0

$ MFT 파일에 액세스하여 파일 특성을 추출했습니다.NTFS 파일 시스템에서 MFT 파일의 LBA (논리 블록 주소 지정)를 얻는 방법은 무엇입니까?

MFT의 파일 속성이 주어지면 NTFS 파일 시스템의 MFT 레코드에서 LBA 파일을 가져 오는 방법은 무엇입니까?

LBA를 계산하려면 파일의 클러스터 번호를 알고 있어야합니다.

클러스터 번호를 사용하여 계산할 수 있습니까?

+0

클러스터 번호를 사용하는 LBA가 있고 NTFS 파일 시스템의 VBR에서 LBA를 시작합니다. – andwella

답변

1

나는 당신의 질문에 대해 완전히 확신하지 못한다. 그러나 단순히 디스크의 논리적 위치를 찾으려고한다면,이를 달성 할 수있는 다양한 IOCTL이있다. 예를 들어

, MFT 파일 레코드 : FSCTL_GET_NTFS_FILE_RECORD HANDLE을 통해 특정 파일의 디스크에 http://msdn.microsoft.com/en-us/library/windows/desktop/aa364568(v=vs.85).aspx

위치 : FSCTL_GET_RETRIEVAL_POINTERS http://msdn.microsoft.com/en-us/library/windows/desktop/aa364572(v=vs.85).aspx

당신은 당신이거야, 자신에 NTFS를 분석하려는 경우 $ DATA 속성을 따라야합니다. 항상 비거주 데이터 실행이됩니다 (MFT 내에있을 수있는 작은 파일이 아닌 경우). Microsoft의 데이터 실행은 데이터의 다음 실행에 대한 오프셋과 길이를 지정하는 첫 번째 두 개의 니블에 포함 된 상당히 간단한 데이터 구조입니다.

0

IMHO 모든 것을 위해 IOCTL과 FSCTL을 사용하는 대신 기본 계산을 수행하여 코드를 작성해야합니다. 디스크의 크기와 볼륨이 시작되는 오프셋 (또는 IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS를 사용하여 모든 범위)을 알고 그 값을 어딘가에 저장해야합니다. 그런 다음 클러스터 크기의 LCN에 디스크의 확장 영역 오프셋을 더하십시오.

대부분 한시적으로 처리해야합니다. 여러 범위가있는 경우 클러스터의 크기를 LCN에 클러스터 크기를 곱한 다음 IOCTL에 의해 반환 된 각 범위의 크기를 반환 된 순서대로 뺍니다. 다음 빼기 수 귀하의 현재 숫자보다 크면 해당 특정 LCN이 해당 범위에 있습니다.