15 IN CONST
EFI_FS *FileSystem,
23 ASSERT (FileSystem != NULL);
30 if (EFI_ERROR (Status)) {
31 DEBUG ((DEBUG_INFO,
"NTFS: Could not find $Volume file.\n"));
36 BaseMftRecord->
FileRecord = AllocateZeroPool (FileSystem->FileRecordSize);
38 DEBUG ((DEBUG_INFO,
"NTFS: Failed to allocate buffer for FileRecord.\n"));
40 FreePool (BaseMftRecord);
41 return EFI_OUT_OF_RESOURCES;
45 if (EFI_ERROR (Status)) {
46 DEBUG ((DEBUG_INFO,
"NTFS: Could not read Mft Record #%d.\n", BaseMftRecord->
Inode));
48 FreePool (BaseMftRecord);
54 if (EFI_ERROR (Status)) {
55 DEBUG ((DEBUG_INFO,
"NTFS: Could not initialize attribute.\n"));
57 FreePool (BaseMftRecord);
68 DEBUG ((DEBUG_INFO,
"NTFS: Volume Name is too huge.\n"));
70 FreePool (BaseMftRecord);
71 return EFI_VOLUME_CORRUPTED;
74 *Label = AllocateZeroPool (Res->
InfoLength + sizeof (CHAR16));
76 DEBUG ((DEBUG_INFO,
"NTFS: Failed to allocate buffer for *Label\n"));
78 FreePool (BaseMftRecord);
79 return EFI_OUT_OF_RESOURCES;
86 FreePool (BaseMftRecord);
105 IN EFI_FILE_PROTOCOL *This,
114 EFI_FILE_SYSTEM_INFO *FSInfo;
115 EFI_FILE_SYSTEM_VOLUME_LABEL *VLInfo;
131 Info = (EFI_FILE_INFO *)Data;
135 }
else if (File->
Path != NULL) {
136 Length =
sizeof (EFI_FILE_INFO) + StrSize (File->
Path);
138 return EFI_VOLUME_CORRUPTED;
143 return EFI_BUFFER_TOO_SMALL;
146 ZeroMem (Data,
sizeof (EFI_FILE_INFO));
148 Info->Size = (UINT64)
Length;
149 Info->Attribute = EFI_FILE_READ_ONLY;
155 Info->Attribute |= EFI_FILE_DIRECTORY;
176 FSInfo = (EFI_FILE_SYSTEM_INFO *)Data;
180 return EFI_BUFFER_TOO_SMALL;
183 FSInfo->ReadOnly = TRUE;
185 if (FSInfo->BlockSize == 0) {
186 DEBUG ((DEBUG_INFO,
"NTFS: Corrected Media BlockSize\n"));
187 FSInfo->BlockSize = 512;
190 FSInfo->VolumeSize = (File->
FileSystem->
BlockIo->Media->LastBlock + 1U) * FSInfo->BlockSize;
194 FSInfo->FreeSpace = 0;
196 Length = *
Len -
sizeof (EFI_FILE_SYSTEM_INFO);
204 FSInfo->Size = (UINT64)
Length +
sizeof (EFI_FILE_SYSTEM_INFO);
205 *
Len = (UINTN)FSInfo->Size;
214 VLInfo = (EFI_FILE_SYSTEM_VOLUME_LABEL *)Data;
217 if (EFI_ERROR (Status)) {
218 DEBUG ((DEBUG_INFO,
"NTFS: Could not read disk label - %r\n", Status));
219 return EFI_DEVICE_ERROR;
223 DEBUG ((DEBUG_INFO,
"NTFS: Volume has no label\n"));
226 if (*
Len < StrSize (Label)) {
227 *
Len = StrSize (Label);
228 return EFI_BUFFER_TOO_SMALL;
231 *
Len = StrSize (Label);
238 return EFI_UNSUPPORTED;
244 IN EFI_FILE_PROTOCOL *This,
245 IN EFI_GUID *InformationType,
250 return EFI_WRITE_PROTECTED;
EFI_STATUS EFIAPI ReadMftRecord(IN EFI_NTFS_FILE *File, OUT UINT8 *Buffer, IN UINT64 RecordNumber)
VOID FreeFile(IN NTFS_FILE *File)
EFI_STATUS InitAttr(OUT NTFS_ATTR *Attr, IN NTFS_FILE *File)
UINT8 * FindAttr(IN NTFS_ATTR *Attr, IN UINT32 Type)
#define MINIMUM_FS_INFO_LENGTH
VOID NtfsToEfiTime(EFI_TIME *EfiTime, UINT64 NtfsTime)
EFI_STATUS FsHelpFindFile(IN CONST CHAR16 *Path, IN NTFS_FILE *RootNode, OUT NTFS_FILE **FoundNode, IN FSHELP_FILETYPE Type)
EFI_STATUS EFIAPI FileSetInfo(IN EFI_FILE_PROTOCOL *This, IN EFI_GUID *InformationType, IN UINTN BufferSize, IN VOID *Buffer)
EFI_STATUS EFIAPI FileGetInfo(IN EFI_FILE_PROTOCOL *This, IN EFI_GUID *Type, IN OUT UINTN *Len, OUT VOID *Data)
STATIC EFI_STATUS GetLabel(IN CONST EFI_FS *FileSystem, IN OUT CHAR16 **Label)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_GUID gEfiFileInfoGuid
EFI_GUID gEfiFileSystemInfoGuid
EFI_GUID gEfiFileSystemVolumeLabelInfoIdGuid
EFI_BLOCK_IO_PROTOCOL * BlockIo