From b1281f9cf89fa50c36fbd7a8b3acbb4475ef9a77 Mon Sep 17 00:00:00 2001 From: Akihiro Sagawa Date: Fri, 12 Aug 2022 19:45:46 +0900 Subject: [PATCH] ieframe: Allow STGM_WRITE in IPropertyStorage::Open. Signed-off-by: Akihiro Sagawa --- dlls/ieframe/intshcut.c | 5 +++++ dlls/ieframe/tests/intshcut.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dlls/ieframe/intshcut.c b/dlls/ieframe/intshcut.c index 8938a2d9c71..e1dda3f6c1c 100644 --- a/dlls/ieframe/intshcut.c +++ b/dlls/ieframe/intshcut.c @@ -718,9 +718,14 @@ static HRESULT WINAPI PropertySetStorage_Open( DWORD grfMode, IPropertyStorage **ppprstg) { + const DWORD STGM_ACCESS_MASK = 0x0000000f; InternetShortcut *This = impl_from_IPropertySetStorage(iface); TRACE("(%s, 0x%lx, %p)\n", debugstr_guid(rfmtid), grfMode, ppprstg); + /* ole32 doesn't like STGM_WRITE */ + if ((grfMode & STGM_ACCESS_MASK) == STGM_WRITE) + grfMode = (grfMode & ~STGM_ACCESS_MASK) | STGM_READWRITE; + /* Note: The |STGM_SHARE_EXCLUSIVE is to cope with a bug in the implementation. Should be fixed in ole32. */ return IPropertySetStorage_Open(This->property_set_storage, rfmtid, diff --git a/dlls/ieframe/tests/intshcut.c b/dlls/ieframe/tests/intshcut.c index 5d9baa7cd9f..b5487491414 100644 --- a/dlls/ieframe/tests/intshcut.c +++ b/dlls/ieframe/tests/intshcut.c @@ -236,7 +236,7 @@ static void test_ReadAndWriteProperties(void) /* Test with STGM_WRITE */ hr = IPropertySetStorage_Open(pPropSetStg, &FMTID_Intshcut, STGM_WRITE, &pPropStgWrite); - todo_wine ok(hr == S_OK, "Unable to get an IPropertyStorage for writing, hr=0x%lx\n", hr); + ok(hr == S_OK, "Unable to get an IPropertyStorage for writing, hr=0x%lx\n", hr); if (hr == S_OK) {