From a570cb25f4907ce6d04cd19fd39bf088b6ff73ac Mon Sep 17 00:00:00 2001 From: Jactry Zeng Date: Sat, 7 Sep 2013 16:53:49 +0800 Subject: [PATCH 3/6] riched20: Add access mode support for ITextDocument_fnOpen. --- dlls/riched20/richole.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c index bd8aa60..c75aefb 100644 --- a/dlls/riched20/richole.c +++ b/dlls/riched20/richole.c @@ -596,6 +596,23 @@ static DWORD get_open_creation_mode(LONG Flags) } } +static DWORD get_open_access_mode(LONG Flags) +{ + switch(Flags & 0xf00) + { + case tomReadOnly: + return GENERIC_READ; + case tomReadOnly|tomShareDenyRead: + return GENERIC_READ; + case tomReadOnly|tomShareDenyWrite: + return GENERIC_READ; + case tomReadOnly|tomShareDenyRead|tomShareDenyWrite: + return GENERIC_READ; + default: + return GENERIC_READ|GENERIC_WRITE; + } +} + static HRESULT WINAPI ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags, LONG CodePage) @@ -603,7 +620,7 @@ ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags, IRichEditOleImpl *This = impl_from_ITextDocument(me); HANDLE hFile; - DWORD dwReadSize, size, creationMode; + DWORD dwReadSize, size, creationMode, accessMode; SETTEXTEX settextex; LPSTR chBuffer; @@ -612,8 +629,9 @@ ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags, if(V_VT(pVar) != VT_BSTR) return E_INVALIDARG; creationMode = get_open_creation_mode(Flags); + accessMode = get_open_access_mode(Flags); - hFile = CreateFileW(V_BSTR(pVar), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ| + hFile = CreateFileW(V_BSTR(pVar), accessMode, FILE_SHARE_READ| FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, creationMode, 0, NULL); -- 1.7.10.4