From 2b0d1faaa95da9c003efb809f488290f3e6313cd Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 15 May 2024 01:23:30 +0900 Subject: [PATCH] [WORDPAD] Use FILE_SHARE_READ and OPEN_ALWAYS for writing (#6883) Follow-up to #6880. Fix access denial on writing file "C:\freeldr.ini". JIRA issue: CORE-19575 - Add FILE_SHARE_READ flag in CreateFileW call. - Use OPEN_ALWAYS instead of CREATE_ALWAYS, and then explicitly use SetEndOfFile function. --- base/applications/wordpad/wordpad.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/base/applications/wordpad/wordpad.c b/base/applications/wordpad/wordpad.c index 1c0b820308a..85a9be92223 100644 --- a/base/applications/wordpad/wordpad.c +++ b/base/applications/wordpad/wordpad.c @@ -843,8 +843,15 @@ static BOOL DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) EDITSTREAM stream; LRESULT ret; +#ifdef __REACTOS__ + /* Use OPEN_ALWAYS instead of CREATE_ALWAYS in order to succeed + * even if the file has HIDDEN or SYSTEM attributes */ + hFile = CreateFileW(wszSaveFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, + FILE_ATTRIBUTE_NORMAL, NULL); +#else hFile = CreateFileW(wszSaveFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); +#endif if(hFile == INVALID_HANDLE_VALUE) { @@ -870,6 +877,10 @@ static BOOL DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) ret = SendMessageW(hEditorWnd, EM_STREAMOUT, format, (LPARAM)&stream); +#ifdef __REACTOS__ + /* Truncate the file and close it */ + SetEndOfFile(hFile); +#endif CloseHandle(hFile); SetFocus(hEditorWnd);