mirror of
https://github.com/reactos/reactos.git
synced 2026-05-31 08:17:09 +08:00
[FREELDR] Allow booting from NTFS volume. (#3775)
This commit is contained in:
@@ -65,6 +65,8 @@
|
||||
#define NTFS_FILE_NAME_DOS 2
|
||||
#define NTFS_FILE_NAME_WIN32_AND_DOS 3
|
||||
|
||||
#define NTFS_MFT_MASK 0x0000FFFFFFFFFFFFULL
|
||||
|
||||
#include <pshpack1.h>
|
||||
typedef struct
|
||||
{
|
||||
@@ -115,6 +117,8 @@ typedef struct
|
||||
ULONG BytesAllocated;
|
||||
ULONGLONG BaseMFTRecord;
|
||||
USHORT NextAttributeInstance;
|
||||
USHORT Padding; // Align to 4 UCHAR boundary (NTFS 3.1+ (Windows XP and above))
|
||||
ULONG MFTRecordNumber; // Number of this MFT Record (NTFS 3.1+ (Windows XP and above))
|
||||
} NTFS_MFT_RECORD, *PNTFS_MFT_RECORD;
|
||||
|
||||
typedef struct
|
||||
@@ -185,7 +189,7 @@ typedef struct
|
||||
USHORT Reserved;
|
||||
UCHAR FileNameLength;
|
||||
UCHAR FileNameType;
|
||||
WCHAR FileName[0];
|
||||
WCHAR FileName[1];
|
||||
} NTFS_FILE_NAME_ATTR, *PNTFS_FILE_NAME_ATTR;
|
||||
|
||||
typedef struct
|
||||
@@ -197,7 +201,7 @@ typedef struct
|
||||
ULONGLONG StartingVCN;
|
||||
ULONGLONG BaseFileRef;
|
||||
USHORT AttrId;
|
||||
PWCHAR Name;
|
||||
WCHAR Name[1];
|
||||
} NTFS_ATTR_LIST_ATTR, *PNTFS_ATTR_LIST_ATTR;
|
||||
|
||||
typedef struct
|
||||
|
||||
@@ -505,7 +505,7 @@ VOID NtfsPrintFile(PNTFS_INDEX_ENTRY IndexEntry)
|
||||
AnsiFileName[i] = (CHAR)FileName[i];
|
||||
AnsiFileName[i] = 0;
|
||||
|
||||
TRACE("- %s (%x)\n", AnsiFileName, IndexEntry->Data.Directory.IndexedFile);
|
||||
TRACE("- %s (%x)\n", AnsiFileName, (IndexEntry->Data.Directory.IndexedFile & NTFS_MFT_MASK));
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -596,7 +596,7 @@ static BOOLEAN NtfsFindMftRecord(PNTFS_VOLUME_INFO Volume, ULONGLONG MFTIndex, P
|
||||
{
|
||||
if (NtfsCompareFileName(FileName, IndexEntry))
|
||||
{
|
||||
*OutMFTIndex = IndexEntry->Data.Directory.IndexedFile;
|
||||
*OutMFTIndex = (IndexEntry->Data.Directory.IndexedFile & NTFS_MFT_MASK);
|
||||
FrLdrTempFree(IndexRecord, TAG_NTFS_INDEX_REC);
|
||||
FrLdrTempFree(MftRecord, TAG_NTFS_MFT);
|
||||
return TRUE;
|
||||
@@ -680,7 +680,7 @@ static BOOLEAN NtfsFindMftRecord(PNTFS_VOLUME_INFO Volume, ULONGLONG MFTIndex, P
|
||||
if (NtfsCompareFileName(FileName, IndexEntry))
|
||||
{
|
||||
TRACE("File found\n");
|
||||
*OutMFTIndex = IndexEntry->Data.Directory.IndexedFile;
|
||||
*OutMFTIndex = (IndexEntry->Data.Directory.IndexedFile & NTFS_MFT_MASK);
|
||||
FrLdrTempFree(BitmapData, TAG_NTFS_BITMAP);
|
||||
FrLdrTempFree(IndexRecord, TAG_NTFS_INDEX_REC);
|
||||
FrLdrTempFree(MftRecord, TAG_NTFS_MFT);
|
||||
|
||||
Reference in New Issue
Block a user