/**@file\r
\r
-Copyright (c) 2006 - 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
EFIAPI\r
WinNtSimpleFileSystemOpenVolume (\r
IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,\r
- OUT EFI_FILE **Root\r
+ OUT EFI_FILE_PROTOCOL **Root\r
)\r
/*++\r
\r
WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *Private;\r
WIN_NT_EFI_FILE_PRIVATE *PrivateFile;\r
EFI_TPL OldTpl;\r
+ CHAR16 *TempFileName;\r
+ UINTN Size;\r
\r
if (This == NULL || Root == NULL) {\r
return EFI_INVALID_PARAMETER;\r
PrivateFile->EfiFile.GetInfo = WinNtSimpleFileSystemGetInfo;\r
PrivateFile->EfiFile.SetInfo = WinNtSimpleFileSystemSetInfo;\r
PrivateFile->EfiFile.Flush = WinNtSimpleFileSystemFlush;\r
- PrivateFile->LHandle = INVALID_HANDLE_VALUE;\r
- PrivateFile->DirHandle = INVALID_HANDLE_VALUE;\r
PrivateFile->IsValidFindBuf = FALSE;\r
\r
+ //\r
+ // Set DirHandle\r
+ //\r
+ PrivateFile->DirHandle = PrivateFile->WinNtThunk->CreateFile (\r
+ PrivateFile->FilePath,\r
+ GENERIC_READ,\r
+ FILE_SHARE_READ | FILE_SHARE_WRITE,\r
+ NULL,\r
+ OPEN_EXISTING,\r
+ FILE_FLAG_BACKUP_SEMANTICS,\r
+ NULL\r
+ );\r
+\r
+ if (PrivateFile->DirHandle == INVALID_HANDLE_VALUE) {\r
+ Status = EFI_NOT_FOUND;\r
+ goto Done;\r
+ }\r
+\r
+ //\r
+ // Find the first file under it\r
+ //\r
+ Size = StrSize (PrivateFile->FilePath);\r
+ Size += StrSize (L"\\*");\r
+ Status = gBS->AllocatePool (\r
+ EfiBootServicesData,\r
+ Size,\r
+ (VOID **)&TempFileName\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
+ StrCpy (TempFileName, PrivateFile->FilePath);\r
+ StrCat (TempFileName, L"\\*");\r
+\r
+ PrivateFile->LHandle = PrivateFile->WinNtThunk->FindFirstFile (TempFileName, &PrivateFile->FindBuf);\r
+ FreePool (TempFileName);\r
+\r
+ if (PrivateFile->LHandle == INVALID_HANDLE_VALUE) {\r
+ PrivateFile->IsValidFindBuf = FALSE;\r
+ } else {\r
+ PrivateFile->IsValidFindBuf = TRUE;\r
+ }\r
*Root = &PrivateFile->EfiFile;\r
\r
Status = EFI_SUCCESS;\r
// Point *FileName to the next character after L'\'.\r
//\r
*FileName = *FileName + Offset + 1;\r
+ //\r
+ // If *FileName is an empty string, then set *FileName to NULL\r
+ //\r
+ if (**FileName == L'\0') {\r
+ *FileName = NULL;\r
+ }\r
}\r
\r
return Token;\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemOpen (\r
- IN EFI_FILE *This,\r
- OUT EFI_FILE **NewHandle,\r
- IN CHAR16 *FileName,\r
- IN UINT64 OpenMode,\r
- IN UINT64 Attributes\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ OUT EFI_FILE_PROTOCOL **NewHandle,\r
+ IN CHAR16 *FileName,\r
+ IN UINT64 OpenMode,\r
+ IN UINT64 Attributes\r
)\r
/*++\r
\r
\r
Arguments:\r
\r
- This - A pointer to the seource file location.\r
+ This - A pointer to the source file location.\r
\r
NewHandle - Pointer to storage for the new file handle.\r
\r
// TODO: EFI_INVALID_PARAMETER - add return value to function comment\r
// TODO: EFI_INVALID_PARAMETER - add return value to function comment\r
{\r
- EFI_FILE *Root;\r
WIN_NT_EFI_FILE_PRIVATE *PrivateFile;\r
WIN_NT_EFI_FILE_PRIVATE *NewPrivateFile;\r
WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE *PrivateRoot;\r
StrCpy (TempFileName, FileName);\r
FileName = TempFileName;\r
\r
- //\r
- // BUGBUG: assume an open of root\r
- // if current location, return current data\r
- //\r
- if (StrCmp (FileName, L"\\") == 0 || (StrCmp (FileName, L".") == 0 && PrivateFile->IsRootDirectory)) {\r
- //\r
- // BUGBUG: assume an open root\r
- //\r
-OpenRoot:\r
- Status = WinNtSimpleFileSystemOpenVolume (PrivateFile->SimpleFileSystem, &Root);\r
- NewPrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (Root);\r
- goto Done;\r
- }\r
-\r
if (FileName[StrLen (FileName) - 1] == L'\\') {\r
FileName[StrLen (FileName) - 1] = 0;\r
}\r
}\r
}\r
\r
- if (StrCmp (NewPrivateFile->FileName, PrivateRoot->FilePath) == 0) {\r
- NewPrivateFile->IsRootDirectory = TRUE;\r
- FreePool (NewPrivateFile->FilePath);\r
- FreePool (NewPrivateFile->FileName);\r
- FreePool (NewPrivateFile);\r
- goto OpenRoot;\r
- }\r
-\r
RealFileName = NewPrivateFile->FileName;\r
while (EfiStrChr (RealFileName, L'\\') != NULL) {\r
RealFileName = EfiStrChr (RealFileName, L'\\') + 1;\r
}\r
\r
- TempChar = *(RealFileName - 1);\r
- *(RealFileName - 1) = 0;\r
-\r
+ TempChar = 0;\r
+ if (RealFileName != NewPrivateFile->FileName) {\r
+ TempChar = *(RealFileName - 1);\r
+ *(RealFileName - 1) = 0;\r
+ }\r
+ \r
FreePool (NewPrivateFile->FilePath);\r
NewPrivateFile->FilePath = NULL;\r
NewPrivateFile->FilePath = AllocatePool (StrSize (NewPrivateFile->FileName));\r
}\r
\r
StrCpy (NewPrivateFile->FilePath, NewPrivateFile->FileName);\r
-\r
- *(RealFileName - 1) = TempChar;\r
+ if (TempChar != 0) {\r
+ *(RealFileName - 1) = TempChar;\r
+ }\r
\r
NewPrivateFile->IsRootDirectory = FALSE;\r
\r
Status = EFI_NOT_FOUND;\r
}\r
\r
+ FreePool (TempFileName);\r
goto Done;\r
}\r
\r
//\r
StrCat (TempFileName, L"\\*");\r
NewPrivateFile->LHandle = NewPrivateFile->WinNtThunk->FindFirstFile (TempFileName, &NewPrivateFile->FindBuf);\r
+ FreePool (TempFileName);\r
\r
if (NewPrivateFile->LHandle == INVALID_HANDLE_VALUE) {\r
NewPrivateFile->IsValidFindBuf = FALSE;\r
Status = WinNtSimpleFileSystemGetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, &InfoSize, Info);\r
\r
if (EFI_ERROR (Status)) {\r
+ FreePool (Info);\r
goto Done;\r
}\r
\r
Info->Attribute = Attributes;\r
\r
WinNtSimpleFileSystemSetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, InfoSize, Info);\r
+ FreePool (Info);\r
}\r
\r
Done:\r
}\r
} else {\r
*NewHandle = &NewPrivateFile->EfiFile;\r
+ if (StrCmp (NewPrivateFile->FileName, PrivateRoot->FilePath) == 0) {\r
+ NewPrivateFile->IsRootDirectory = TRUE;\r
+ } \r
}\r
\r
return Status;\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemClose (\r
- IN EFI_FILE *This\r
+ IN EFI_FILE_PROTOCOL *This\r
)\r
/*++\r
\r
FreePool (PrivateFile->FileName);\r
}\r
\r
+ if (PrivateFile->FilePath) {\r
+ FreePool (PrivateFile->FilePath);\r
+ }\r
+\r
FreePool (PrivateFile);\r
\r
gBS->RestoreTPL (OldTpl);\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemDelete (\r
- IN EFI_FILE *This\r
+ IN EFI_FILE_PROTOCOL *This\r
)\r
/*++\r
\r
}\r
\r
FreePool (PrivateFile->FileName);\r
+ FreePool (PrivateFile->FilePath);\r
FreePool (PrivateFile);\r
\r
gBS->RestoreTPL (OldTpl);\r
}\r
}\r
\r
+/**\r
+ Convert the FileTime to EfiTime.\r
+\r
+ @param PrivateFile Pointer to WIN_NT_EFI_FILE_PRIVATE.\r
+ @param TimeZone Pointer to the current time zone.\r
+ @param FileTime Pointer to file time.\r
+ @param EfiTime Pointer to EFI time.\r
+**/\r
+VOID\r
+WinNtFileTimeToEfiTime ( \r
+ IN CONST WIN_NT_EFI_FILE_PRIVATE *PrivateFile,\r
+ IN TIME_ZONE_INFORMATION *TimeZone,\r
+ IN CONST FILETIME *FileTime,\r
+ OUT EFI_TIME *EfiTime\r
+ )\r
+{\r
+ FILETIME TempFileTime;\r
+ SYSTEMTIME SystemTime;\r
+\r
+ PrivateFile->WinNtThunk->FileTimeToLocalFileTime (FileTime, &TempFileTime);\r
+ PrivateFile->WinNtThunk->FileTimeToSystemTime (&TempFileTime, &SystemTime);\r
+ WinNtSystemTimeToEfiTime (&SystemTime, TimeZone, EfiTime);\r
+}\r
+\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemRead (\r
- IN EFI_FILE *This,\r
- IN OUT UINTN *BufferSize,\r
- OUT VOID *Buffer\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ IN OUT UINTN *BufferSize,\r
+ OUT VOID *Buffer\r
)\r
/*++\r
\r
UINTN NameSize;\r
UINTN ResultSize;\r
UINTN Index;\r
- SYSTEMTIME SystemTime;\r
EFI_FILE_INFO *Info;\r
WCHAR *pw;\r
TIME_ZONE_INFORMATION TimeZone;\r
Status = PrivateFile->WinNtThunk->ReadFile (\r
PrivateFile->LHandle,\r
Buffer,\r
- *BufferSize,\r
+ (DWORD)*BufferSize,\r
(LPDWORD)BufferSize,\r
NULL\r
) ? EFI_SUCCESS : EFI_DEVICE_ERROR;\r
Info->Size = ResultSize;\r
\r
PrivateFile->WinNtThunk->GetTimeZoneInformation (&TimeZone);\r
-\r
- PrivateFile->WinNtThunk->FileTimeToLocalFileTime (\r
- &PrivateFile->FindBuf.ftCreationTime,\r
- &PrivateFile->FindBuf.ftCreationTime\r
- );\r
-\r
- PrivateFile->WinNtThunk->FileTimeToSystemTime (&PrivateFile->FindBuf.ftCreationTime, &SystemTime);\r
-\r
- WinNtSystemTimeToEfiTime (&SystemTime, &TimeZone, &Info->CreateTime);\r
-\r
- PrivateFile->WinNtThunk->FileTimeToLocalFileTime (\r
- &PrivateFile->FindBuf.ftLastWriteTime,\r
- &PrivateFile->FindBuf.ftLastWriteTime\r
- );\r
-\r
- PrivateFile->WinNtThunk->FileTimeToSystemTime (&PrivateFile->FindBuf.ftLastWriteTime, &SystemTime);\r
-\r
- WinNtSystemTimeToEfiTime (&SystemTime, &TimeZone, &Info->ModificationTime);\r
+ WinNtFileTimeToEfiTime (PrivateFile, &TimeZone, &PrivateFile->FindBuf.ftCreationTime, &Info->CreateTime);\r
+ WinNtFileTimeToEfiTime (PrivateFile, &TimeZone, &PrivateFile->FindBuf.ftLastAccessTime, &Info->LastAccessTime);\r
+ WinNtFileTimeToEfiTime (PrivateFile, &TimeZone, &PrivateFile->FindBuf.ftLastWriteTime, &Info->ModificationTime);\r
\r
Info->FileSize = PrivateFile->FindBuf.nFileSizeLow;\r
\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemWrite (\r
- IN EFI_FILE *This,\r
- IN OUT UINTN *BufferSize,\r
- IN VOID *Buffer\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ IN OUT UINTN *BufferSize,\r
+ IN VOID *Buffer\r
)\r
/*++\r
\r
Status = PrivateFile->WinNtThunk->WriteFile (\r
PrivateFile->LHandle,\r
Buffer,\r
- *BufferSize,\r
+ (DWORD)*BufferSize,\r
(LPDWORD)BufferSize,\r
NULL\r
) ? EFI_SUCCESS : EFI_DEVICE_ERROR;\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemSetPosition (\r
- IN EFI_FILE *This,\r
- IN UINT64 Position\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ IN UINT64 Position\r
)\r
/*++\r
\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemGetPosition (\r
- IN EFI_FILE *This,\r
- OUT UINT64 *Position\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ OUT UINT64 *Position\r
)\r
/*++\r
\r
UINTN ResultSize;\r
EFI_FILE_INFO *Info;\r
BY_HANDLE_FILE_INFORMATION FileInfo;\r
- SYSTEMTIME SystemTime;\r
CHAR16 *RealFileName;\r
CHAR16 *TempPointer;\r
- EFI_FILE_INFO *DirInfo;\r
- UINTN ReadSize;\r
- UINT64 Location;\r
- EFI_STATUS DirStatus;\r
-\r
+ TIME_ZONE_INFORMATION TimeZone;\r
\r
Size = SIZE_OF_EFI_FILE_INFO;\r
- NameSize = StrSize (PrivateFile->FileName);\r
- ResultSize = Size + NameSize;\r
+\r
+ RealFileName = PrivateFile->FileName;\r
+ TempPointer = RealFileName;\r
+ while (*TempPointer) {\r
+ if (*TempPointer == '\\') {\r
+ RealFileName = TempPointer + 1;\r
+ }\r
+\r
+ TempPointer++;\r
+ }\r
+ NameSize = StrSize (RealFileName);\r
+\r
+ ResultSize = Size + NameSize; \r
\r
Status = EFI_BUFFER_TOO_SMALL;\r
if (*BufferSize >= ResultSize) {\r
Info->FileSize = FileInfo.nFileSizeLow;\r
Info->PhysicalSize = Info->FileSize;\r
\r
- PrivateFile->WinNtThunk->FileTimeToSystemTime (&FileInfo.ftCreationTime, &SystemTime);\r
- Info->CreateTime.Year = SystemTime.wYear;\r
- Info->CreateTime.Month = (UINT8) SystemTime.wMonth;\r
- Info->CreateTime.Day = (UINT8) SystemTime.wDay;\r
- Info->CreateTime.Hour = (UINT8) SystemTime.wHour;\r
- Info->CreateTime.Minute = (UINT8) SystemTime.wMinute;\r
- Info->CreateTime.Second = (UINT8) SystemTime.wSecond;\r
-\r
- PrivateFile->WinNtThunk->FileTimeToSystemTime (&FileInfo.ftLastAccessTime, &SystemTime);\r
- Info->LastAccessTime.Year = SystemTime.wYear;\r
- Info->LastAccessTime.Month = (UINT8) SystemTime.wMonth;\r
- Info->LastAccessTime.Day = (UINT8) SystemTime.wDay;\r
- Info->LastAccessTime.Hour = (UINT8) SystemTime.wHour;\r
- Info->LastAccessTime.Minute = (UINT8) SystemTime.wMinute;\r
- Info->LastAccessTime.Second = (UINT8) SystemTime.wSecond;\r
-\r
- PrivateFile->WinNtThunk->FileTimeToSystemTime (&FileInfo.ftLastWriteTime, &SystemTime);\r
- Info->ModificationTime.Year = SystemTime.wYear;\r
- Info->ModificationTime.Month = (UINT8) SystemTime.wMonth;\r
- Info->ModificationTime.Day = (UINT8) SystemTime.wDay;\r
- Info->ModificationTime.Hour = (UINT8) SystemTime.wHour;\r
- Info->ModificationTime.Minute = (UINT8) SystemTime.wMinute;\r
- Info->ModificationTime.Second = (UINT8) SystemTime.wSecond;\r
+ PrivateFile->WinNtThunk->GetTimeZoneInformation (&TimeZone);\r
+ WinNtFileTimeToEfiTime (PrivateFile, &TimeZone, &FileInfo.ftCreationTime, &Info->CreateTime);\r
+ WinNtFileTimeToEfiTime (PrivateFile, &TimeZone, &FileInfo.ftLastAccessTime, &Info->LastAccessTime);\r
+ WinNtFileTimeToEfiTime (PrivateFile, &TimeZone, &FileInfo.ftLastWriteTime, &Info->ModificationTime);\r
\r
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) {\r
Info->Attribute |= EFI_FILE_ARCHIVE;\r
Info->Attribute |= EFI_FILE_DIRECTORY;\r
}\r
\r
- RealFileName = PrivateFile->FileName;\r
- TempPointer = RealFileName;\r
-\r
- while (*TempPointer) {\r
- if (*TempPointer == '\\') {\r
- RealFileName = TempPointer + 1;\r
- }\r
-\r
- TempPointer++;\r
- }\r
-\r
if (PrivateFile->IsRootDirectory) {\r
*((CHAR8 *) Buffer + Size) = 0;\r
} else {\r
CopyMem ((CHAR8 *) Buffer + Size, RealFileName, NameSize);\r
}\r
-\r
- if (Info->Attribute & EFI_FILE_DIRECTORY) {\r
- //\r
- // The GetFileInformationByHandle.nFileSizeLow is bogus for dir so we \r
- // need to do the same thing the caller would do to get the right value\r
- //\r
- ASSERT (PrivateFile->EfiFile.Read != NULL);\r
- DirStatus = PrivateFile->EfiFile.GetPosition (&PrivateFile->EfiFile, &Location);\r
- if (EFI_ERROR (DirStatus)) {\r
- Location = 0;\r
- }\r
-\r
- PrivateFile->EfiFile.SetPosition (&PrivateFile->EfiFile, 0);\r
- Info->FileSize = 0; \r
- do {\r
- ReadSize = 0;\r
- DirInfo = NULL;\r
- DirStatus = PrivateFile->EfiFile.Read (&PrivateFile->EfiFile, &ReadSize, DirInfo);\r
- if (DirStatus == EFI_BUFFER_TOO_SMALL) {\r
- DirInfo = AllocatePool (ReadSize);\r
- if (DirInfo != NULL) {\r
- //\r
- // Read each dir entry to figure out how big the directory is\r
- //\r
- DirStatus = PrivateFile->EfiFile.Read (&PrivateFile->EfiFile, &ReadSize, DirInfo);\r
- if (!EFI_ERROR (DirStatus) && (ReadSize != 0)) {\r
- Info->FileSize += ReadSize;\r
- }\r
- FreePool (DirInfo);\r
- }\r
- }\r
- \r
- } while (!EFI_ERROR (DirStatus) && (ReadSize != 0));\r
-\r
- //\r
- // reset the file possition back to the previous location\r
- //\r
- PrivateFile->EfiFile.SetPosition (&PrivateFile->EfiFile, Location);\r
- }\r
}\r
\r
*BufferSize = ResultSize;\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemGetInfo (\r
- IN EFI_FILE *This,\r
- IN EFI_GUID *InformationType,\r
- IN OUT UINTN *BufferSize,\r
- OUT VOID *Buffer\r
+ IN EFI_FILE_PROTOCOL *This,\r
+ IN EFI_GUID *InformationType,\r
+ IN OUT UINTN *BufferSize,\r
+ OUT VOID *Buffer\r
)\r
/*++\r
\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemSetInfo (\r
- IN EFI_FILE *This,\r
+ IN EFI_FILE_PROTOCOL*This,\r
IN EFI_GUID *InformationType,\r
IN UINTN BufferSize,\r
IN VOID *Buffer\r
// Set file system information.\r
//\r
if (CompareGuid (InformationType, &gEfiFileSystemInfoGuid)) {\r
- if (BufferSize < SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel)) {\r
+ NewFileSystemInfo = (EFI_FILE_SYSTEM_INFO *) Buffer;\r
+ if (BufferSize < SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (NewFileSystemInfo->VolumeLabel)) {\r
Status = EFI_BAD_BUFFER_SIZE;\r
goto Done;\r
}\r
\r
- NewFileSystemInfo = (EFI_FILE_SYSTEM_INFO *) Buffer;\r
\r
FreePool (PrivateRoot->VolumeLabel);\r
PrivateRoot->VolumeLabel = AllocatePool (StrSize (NewFileSystemInfo->VolumeLabel));\r
//\r
NewFileInfo = (EFI_FILE_INFO *) Buffer;\r
\r
- if (NewFileInfo->Size <= sizeof (EFI_FILE_INFO) ||\r
+ if ((NewFileInfo->Size <= SIZE_OF_EFI_FILE_INFO) ||\r
(NewFileInfo->Attribute &~(EFI_FILE_VALID_ATTR)) ||\r
(sizeof (UINTN) == 4 && NewFileInfo->Size > 0xFFFFFFFF)\r
) {\r
FreePool (TempFileName);\r
}\r
} else {\r
+ Status = EFI_ACCESS_DENIED;\r
Reopen: ;\r
- Status = EFI_DEVICE_ERROR;\r
\r
NtStatus = PrivateFile->WinNtThunk->SetFileAttributes (OldFileName, OldAttr);\r
\r
goto Done;\r
}\r
\r
+ if (!PrivateFile->WinNtThunk->LocalFileTimeToFileTime (\r
+ &NewCreationFileTime,\r
+ &NewCreationFileTime\r
+ )) {\r
+ goto Done;\r
+ }\r
+\r
NewLastAccessSystemTime.wYear = NewFileInfo->LastAccessTime.Year;\r
NewLastAccessSystemTime.wMonth = NewFileInfo->LastAccessTime.Month;\r
NewLastAccessSystemTime.wDay = NewFileInfo->LastAccessTime.Day;\r
goto Done;\r
}\r
\r
+ if (!PrivateFile->WinNtThunk->LocalFileTimeToFileTime (\r
+ &NewLastAccessFileTime,\r
+ &NewLastAccessFileTime\r
+ )) {\r
+ goto Done;\r
+ }\r
+\r
NewLastWriteSystemTime.wYear = NewFileInfo->ModificationTime.Year;\r
NewLastWriteSystemTime.wMonth = NewFileInfo->ModificationTime.Month;\r
NewLastWriteSystemTime.wDay = NewFileInfo->ModificationTime.Day;\r
goto Done;\r
}\r
\r
+ if (!PrivateFile->WinNtThunk->LocalFileTimeToFileTime (\r
+ &NewLastWriteFileTime,\r
+ &NewLastWriteFileTime\r
+ )) {\r
+ goto Done;\r
+ }\r
+\r
if (!PrivateFile->WinNtThunk->SetFileTime (\r
PrivateFile->IsDirectoryPath ? PrivateFile->DirHandle : PrivateFile->LHandle,\r
&NewCreationFileTime,\r
NtStatus = PrivateFile->WinNtThunk->SetFileAttributes (NewFileName, NewAttr);\r
\r
if (!NtStatus) {\r
+ Status = EFI_DEVICE_ERROR;\r
goto Reopen;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
WinNtSimpleFileSystemFlush (\r
- IN EFI_FILE *This\r
+ IN EFI_FILE_PROTOCOL *This\r
)\r
/*++\r
\r