diff --git a/FatPkg/EnhancedFatDxe/Delete.c b/FatPkg/EnhancedFatDxe/Delete.c index 448d669f9d..2c84b5282a 100644 --- a/FatPkg/EnhancedFatDxe/Delete.c +++ b/FatPkg/EnhancedFatDxe/Delete.c @@ -31,6 +31,10 @@ FatDelete ( EFI_STATUS Status; UINTN Round; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + IFile = IFILE_FROM_FHAND (FHand); OFile = IFile->OFile; diff --git a/FatPkg/EnhancedFatDxe/DirectoryManage.c b/FatPkg/EnhancedFatDxe/DirectoryManage.c index 723fc35f38..d296033b13 100644 --- a/FatPkg/EnhancedFatDxe/DirectoryManage.c +++ b/FatPkg/EnhancedFatDxe/DirectoryManage.c @@ -73,6 +73,10 @@ FatStoreDirEnt ( UINT8 EntryCount; UINT8 LfnOrdinal; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + EntryPos = DirEnt->EntryPos; EntryCount = DirEnt->EntryCount; // @@ -709,6 +713,9 @@ FatExpandODir ( IN FAT_OFILE *OFile ) { + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } return FatExpandOFile (OFile, OFile->FileSize + OFile->Volume->ClusterSize); } @@ -954,6 +961,10 @@ FatSetVolumeEntry ( FAT_DIRENT LabelDirEnt; FAT_OFILE *Root; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + Root = Volume->Root; Status = FatSeekVolumeId (Volume->Root, &LabelDirEnt); if (EFI_ERROR (Status)) { @@ -1001,6 +1012,10 @@ FatCreateDotDirEnts ( EFI_STATUS Status; FAT_DIRENT *DirEnt; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + Status = FatExpandODir (OFile); if (EFI_ERROR (Status)) { return Status; @@ -1048,6 +1063,10 @@ FatCreateDirEnt ( FAT_ODIR *ODir; EFI_STATUS Status; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + ASSERT (OFile != NULL); ODir = OFile->ODir; ASSERT (ODir != NULL); @@ -1105,6 +1124,10 @@ FatRemoveDirEnt ( { FAT_ODIR *ODir; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + ODir = OFile->ODir; if (ODir->CurrentCursor == &DirEnt->Link) { // diff --git a/FatPkg/EnhancedFatDxe/FileSpace.c b/FatPkg/EnhancedFatDxe/FileSpace.c index 909d4980d2..d1573df5fb 100644 --- a/FatPkg/EnhancedFatDxe/FileSpace.c +++ b/FatPkg/EnhancedFatDxe/FileSpace.c @@ -362,6 +362,10 @@ FatShrinkEof ( UINTN Cluster; UINTN LastCluster; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + Volume = OFile->Volume; ASSERT_VOLUME_LOCKED (Volume); @@ -440,6 +444,10 @@ FatGrowEof ( UINTN NewCluster; UINTN ClusterCount; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + // // For FAT file system, the max file is 4GB. // diff --git a/FatPkg/EnhancedFatDxe/Flush.c b/FatPkg/EnhancedFatDxe/Flush.c index 8c6010328b..294641e798 100644 --- a/FatPkg/EnhancedFatDxe/Flush.c +++ b/FatPkg/EnhancedFatDxe/Flush.c @@ -35,6 +35,10 @@ FatFlushEx ( EFI_STATUS Status; FAT_TASK *Task; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + IFile = IFILE_FROM_FHAND (FHand); OFile = IFile->OFile; Volume = OFile->Volume; @@ -112,6 +116,9 @@ FatFlush ( IN EFI_FILE_PROTOCOL *FHand ) { + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } return FatFlushEx (FHand, NULL); } diff --git a/FatPkg/EnhancedFatDxe/ReadWrite.c b/FatPkg/EnhancedFatDxe/ReadWrite.c index 8f525044d1..cf0ed0f52b 100644 --- a/FatPkg/EnhancedFatDxe/ReadWrite.c +++ b/FatPkg/EnhancedFatDxe/ReadWrite.c @@ -211,6 +211,10 @@ FatIFileAccess ( UINT64 EndPosition; FAT_TASK *Task; + if (FeaturePcdGet (PcdFatReadOnlyMode) && IoMode == WriteData) { + return EFI_WRITE_PROTECTED; + } + IFile = IFILE_FROM_FHAND (FHand); OFile = IFile->OFile; Volume = OFile->Volume; @@ -414,6 +418,9 @@ FatWrite ( IN VOID *Buffer ) { + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } return FatIFileAccess (FHand, WriteData, BufferSize, Buffer, NULL); } @@ -437,6 +444,9 @@ FatWriteEx ( IN OUT EFI_FILE_IO_TOKEN *Token ) { + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } return FatIFileAccess (FHand, WriteData, &Token->BufferSize, Token->Buffer, Token); } @@ -471,6 +481,10 @@ FatAccessOFile ( EFI_STATUS Status; UINTN BufferSize; + if (FeaturePcdGet (PcdFatReadOnlyMode) && IoMode == WriteData) { + return EFI_WRITE_PROTECTED; + } + BufferSize = *DataBufferSize; Volume = OFile->Volume; ASSERT_VOLUME_LOCKED (Volume); @@ -542,6 +556,10 @@ FatExpandOFile ( EFI_STATUS Status; UINTN WritePos; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + WritePos = OFile->FileSize; Status = FatGrowEof (OFile, ExpandedSize); if (!EFI_ERROR (Status)) { @@ -575,6 +593,10 @@ FatWriteZeroPool ( UINTN BufferSize; UINTN WriteSize; + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + AppendedSize = OFile->FileSize - WritePos; BufferSize = AppendedSize; if (AppendedSize > FAT_MAX_ALLOCATE_SIZE) { @@ -624,6 +646,10 @@ FatTruncateOFile ( IN UINTN TruncatedSize ) { + if (FeaturePcdGet (PcdFatReadOnlyMode)) { + return EFI_WRITE_PROTECTED; + } + OFile->FileSize = TruncatedSize; return FatShrinkEof (OFile); }