From a64cccd711662dcfbfc826463afcf6c00477ba07 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 15 May 2024 01:22:17 +0900 Subject: [PATCH] [NOTEPAD] Use FILE_SHARE_READ and OPEN_ALWAYS for writing (#6880) Fix access denial on writing file "C:\freeldr.ini". JIRA issue: CORE-19575 - Add FILE_SHARE_READ flag and delete FILE_SHARE_WRITE flag in CreateFileW call. - Use OPEN_ALWAYS instead of CREATE_ALWAYS, and then explicitly use SetEndOfFile function. --- base/applications/notepad/dialog.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/base/applications/notepad/dialog.c b/base/applications/notepad/dialog.c index 82c6c5c57bc..2aa747fa4de 100644 --- a/base/applications/notepad/dialog.c +++ b/base/applications/notepad/dialog.c @@ -249,8 +249,10 @@ static BOOL DoSaveFile(VOID) WaitCursor(TRUE); - hFile = CreateFileW(Globals.szFileName, GENERIC_WRITE, FILE_SHARE_WRITE, - NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + /* Use OPEN_ALWAYS instead of CREATE_ALWAYS in order to succeed + * even if the file has HIDDEN or SYSTEM attributes */ + hFile = CreateFileW(Globals.szFileName, GENERIC_WRITE, FILE_SHARE_READ, + NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { ShowLastError(); @@ -281,6 +283,8 @@ static BOOL DoSaveFile(VOID) } } + /* Truncate the file and close it */ + SetEndOfFile(hFile); CloseHandle(hFile); if (bRet)