[IEFRAME] Sync with Wine Staging 1.9.11. CORE-11368

svn path=/trunk/; revision=71551
This commit is contained in:
Amine Khaldi 2016-06-05 19:18:20 +00:00
parent 6d8185db2f
commit bdf05dfe65
6 changed files with 322 additions and 133 deletions

View file

@ -381,8 +381,10 @@ static HRESULT WINAPI OleDocumentSite_ActivateMe(IOleDocumentSite *iface,
if(FAILED(hres))
return hres;
IOleDocument_CreateView(oledoc, (IOleInPlaceSite*) &This->IOleInPlaceSiteEx_iface, NULL, 0, &This->view);
hres = IOleDocument_CreateView(oledoc, (IOleInPlaceSite*) &This->IOleInPlaceSiteEx_iface, NULL, 0, &This->view);
IOleDocument_Release(oledoc);
if(FAILED(hres))
return hres;
GetClientRect(This->hwnd, &rect);
IOleDocumentView_SetRect(This->view, &rect);
@ -657,6 +659,11 @@ static HRESULT WINAPI ClServiceProvider_QueryService(IServiceProvider *iface, RE
return IWebBrowser2_QueryInterface(This->wb, riid, ppv);
}
if(IsEqualGUID(&IID_ITargetFrame, guidService)) {
TRACE("(%p)->(IID_ITargetFrame %s %p)\n", This, debugstr_guid(riid), ppv);
return IWebBrowser2_QueryInterface(This->wb, riid, ppv);
}
if(IsEqualGUID(&IID_IWebBrowserApp, guidService)) {
TRACE("IWebBrowserApp service\n");
return IWebBrowser2_QueryInterface(This->wb, riid, ppv);

View file

@ -72,6 +72,7 @@ typedef struct {
typedef struct {
IHlinkFrame IHlinkFrame_iface;
ITargetFrame ITargetFrame_iface;
ITargetFrame2 ITargetFrame2_iface;
ITargetFramePriv2 ITargetFramePriv2_iface;
IWebBrowserPriv2IE9 IWebBrowserPriv2IE9_iface;
@ -206,6 +207,7 @@ struct WebBrowser {
INT version;
IOleClientSite *client;
IOleClientSite *client_closed;
IOleContainer *container;
IOleInPlaceSiteEx *inplace;

View file

@ -404,135 +404,119 @@ static HRESULT WINAPI PersistFile_IsDirty(IPersistFile *pFile)
return This->isDirty ? S_OK : S_FALSE;
}
/* A helper function: Allocate and fill rString. Return number of bytes read. */
static DWORD get_profile_string(LPCWSTR lpAppName, LPCWSTR lpKeyName,
/* Returns allocated profile string and a standard return code. */
static HRESULT get_profile_string(LPCWSTR lpAppName, LPCWSTR lpKeyName,
LPCWSTR lpFileName, WCHAR **rString )
{
DWORD r = 0;
DWORD len = 128;
WCHAR *buffer;
*rString = NULL;
buffer = CoTaskMemAlloc(len * sizeof(*buffer));
if (buffer != NULL)
if (!buffer)
return E_OUTOFMEMORY;
r = GetPrivateProfileStringW(lpAppName, lpKeyName, NULL, buffer, len, lpFileName);
while (r == len-1)
{
r = GetPrivateProfileStringW(lpAppName, lpKeyName, NULL, buffer, len, lpFileName);
while (r == len-1)
WCHAR *realloc_buf;
len *= 2;
realloc_buf = CoTaskMemRealloc(buffer, len * sizeof(*buffer));
if (realloc_buf == NULL)
{
WCHAR *realloc_buf;
len *= 2;
realloc_buf = CoTaskMemRealloc(buffer, len * sizeof(*buffer));
if (realloc_buf == NULL)
{
CoTaskMemFree(buffer);
*rString = NULL;
return 0;
}
buffer = realloc_buf;
r = GetPrivateProfileStringW(lpAppName, lpKeyName, NULL, buffer, len, lpFileName);
CoTaskMemFree(buffer);
return E_OUTOFMEMORY;
}
buffer = realloc_buf;
r = GetPrivateProfileStringW(lpAppName, lpKeyName, NULL, buffer, len, lpFileName);
}
*rString = buffer;
return r;
return r ? S_OK : E_FAIL;
}
static HRESULT WINAPI PersistFile_Load(IPersistFile *pFile, LPCOLESTR pszFileName, DWORD dwMode)
{
WCHAR str_header[] = {'I','n','t','e','r','n','e','t','S','h','o','r','t','c','u','t',0};
WCHAR str_URL[] = {'U','R','L',0};
WCHAR str_iconfile[] = {'i','c','o','n','f','i','l','e',0};
WCHAR str_iconindex[] = {'i','c','o','n','i','n','d','e','x',0};
WCHAR *filename = NULL;
HRESULT hr;
InternetShortcut *This = impl_from_IPersistFile(pFile);
static WCHAR str_header[] = {'I','n','t','e','r','n','e','t','S','h','o','r','t','c','u','t',0};
static WCHAR str_URL[] = {'U','R','L',0};
static WCHAR str_iconfile[] = {'i','c','o','n','f','i','l','e',0};
static WCHAR str_iconindex[] = {'i','c','o','n','i','n','d','e','x',0};
WCHAR *filename = NULL;
WCHAR *url;
HRESULT hr;
IPropertyStorage *pPropStg;
WCHAR *iconfile;
WCHAR *iconindexstring;
TRACE("(%p, %s, 0x%x)\n", pFile, debugstr_w(pszFileName), dwMode);
if (dwMode != 0)
FIXME("ignoring unimplemented mode 0x%x\n", dwMode);
filename = co_strdupW(pszFileName);
if (filename != NULL)
if (!filename)
return E_OUTOFMEMORY;
if (FAILED(hr = get_profile_string(str_header, str_URL, pszFileName, &url)))
{
DWORD r;
WCHAR *url;
r = get_profile_string(str_header, str_URL, pszFileName, &url);
if (url == NULL)
{
hr = E_OUTOFMEMORY;
CoTaskMemFree(filename);
}
else if (r == 0)
{
hr = E_FAIL;
CoTaskMemFree(filename);
}
else
{
hr = S_OK;
CoTaskMemFree(This->currentFile);
This->currentFile = filename;
CoTaskMemFree(This->url);
This->url = url;
This->isDirty = FALSE;
}
/* Now we're going to read in the iconfile and iconindex.
If we don't find them, that's not a failure case -- it's possible
that they just aren't in there. */
if (SUCCEEDED(hr))
{
IPropertyStorage *pPropStg;
WCHAR *iconfile;
WCHAR *iconindexstring;
hr = IPropertySetStorage_Open(This->property_set_storage, &FMTID_Intshcut,
STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
&pPropStg);
if (get_profile_string(str_header, str_iconfile, pszFileName, &iconfile))
{
PROPSPEC ps;
PROPVARIANT pv;
ps.ulKind = PRSPEC_PROPID;
ps.u.propid = PID_IS_ICONFILE;
pv.vt = VT_LPWSTR;
pv.u.pwszVal = iconfile;
hr = IPropertyStorage_WriteMultiple(pPropStg, 1, &ps, &pv, 0);
if (FAILED(hr))
{
TRACE("Failed to store the iconfile to our property storage. hr = 0x%x\n", hr);
}
}
CoTaskMemFree(iconfile);
if (get_profile_string(str_header, str_iconindex, pszFileName, &iconindexstring))
{
int iconindex;
PROPSPEC ps;
PROPVARIANT pv;
char *iconindexastring = co_strdupWtoA(iconindexstring);
sscanf(iconindexastring, "%d", &iconindex);
CoTaskMemFree(iconindexastring);
ps.ulKind = PRSPEC_PROPID;
ps.u.propid = PID_IS_ICONINDEX;
pv.vt = VT_I4;
pv.u.iVal = iconindex;
hr = IPropertyStorage_WriteMultiple(pPropStg, 1, &ps, &pv, 0);
if (FAILED(hr))
{
TRACE("Failed to store the iconindex to our property storage. hr = 0x%x\n", hr);
}
}
CoTaskMemFree(iconindexstring);
IPropertyStorage_Release(pPropStg);
}
else
hr = E_OUTOFMEMORY;
CoTaskMemFree(filename);
return hr;
}
else
hr = E_OUTOFMEMORY;
hr = IPropertySetStorage_Open(This->property_set_storage, &FMTID_Intshcut,
STGM_READWRITE | STGM_SHARE_EXCLUSIVE, &pPropStg);
if (FAILED(hr))
{
CoTaskMemFree(filename);
CoTaskMemFree(url);
return hr;
}
CoTaskMemFree(This->currentFile);
This->currentFile = filename;
CoTaskMemFree(This->url);
This->url = url;
This->isDirty = FALSE;
/* Now we're going to read in the iconfile and iconindex.
If we don't find them, that's not a failure case -- it's possible
that they just aren't in there. */
if (get_profile_string(str_header, str_iconfile, pszFileName, &iconfile) == S_OK)
{
PROPSPEC ps;
PROPVARIANT pv;
ps.ulKind = PRSPEC_PROPID;
ps.u.propid = PID_IS_ICONFILE;
pv.vt = VT_LPWSTR;
pv.u.pwszVal = iconfile;
hr = IPropertyStorage_WriteMultiple(pPropStg, 1, &ps, &pv, 0);
if (FAILED(hr))
TRACE("Failed to store the iconfile to our property storage. hr = 0x%x\n", hr);
}
CoTaskMemFree(iconfile);
if (get_profile_string(str_header, str_iconindex, pszFileName, &iconindexstring) == S_OK)
{
int iconindex;
PROPSPEC ps;
PROPVARIANT pv;
iconindex = strtolW(iconindexstring, NULL, 10);
ps.ulKind = PRSPEC_PROPID;
ps.u.propid = PID_IS_ICONINDEX;
pv.vt = VT_I4;
pv.u.iVal = iconindex;
hr = IPropertyStorage_WriteMultiple(pPropStg, 1, &ps, &pv, 0);
if (FAILED(hr))
TRACE("Failed to store the iconindex to our property storage. hr = 0x%x\n", hr);
}
CoTaskMemFree(iconindexstring);
IPropertyStorage_Release(pPropStg);
return hr;
}

View file

@ -1228,9 +1228,152 @@ static const IHlinkFrameVtbl HlinkFrameVtbl = {
HlinkFrame_UpdateHlink
};
static inline HlinkFrame *impl_from_ITargetFrame(ITargetFrame *iface)
{
return CONTAINING_RECORD(iface, HlinkFrame, ITargetFrame_iface);
}
static HRESULT WINAPI TargetFrame_QueryInterface(ITargetFrame *iface, REFIID riid, void **ppv)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
return IUnknown_QueryInterface(This->outer, riid, ppv);
}
static ULONG WINAPI TargetFrame_AddRef(ITargetFrame *iface)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
return IUnknown_AddRef(This->outer);
}
static ULONG WINAPI TargetFrame_Release(ITargetFrame *iface)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
return IUnknown_Release(This->outer);
}
static HRESULT WINAPI TargetFrame_SetFrameName(ITargetFrame *iface, LPCWSTR pszFrameName)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(pszFrameName));
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_GetFrameName(ITargetFrame *iface, LPWSTR *ppszFrameName)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%p)\n", This, ppszFrameName);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_GetParentFrame(ITargetFrame *iface, IUnknown **ppunkParent)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%p)\n", This, ppunkParent);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_FindFrame(ITargetFrame *iface, LPCWSTR pszTargetName,
IUnknown *ppunkContextFrame, DWORD dwFlags, IUnknown **ppunkTargetFrame)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%s %p %x %p)\n", This, debugstr_w(pszTargetName),
ppunkContextFrame, dwFlags, ppunkTargetFrame);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_SetFrameSrc(ITargetFrame *iface, LPCWSTR pszFrameSrc)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(pszFrameSrc));
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_GetFrameSrc(ITargetFrame *iface, LPWSTR *ppszFrameSrc)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%p)\n", This, ppszFrameSrc);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_GetFramesContainer(ITargetFrame *iface, IOleContainer **ppContainer)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%p)\n", This, ppContainer);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_SetFrameOptions(ITargetFrame *iface, DWORD dwFlags)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%x)\n", This, dwFlags);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_GetFrameOptions(ITargetFrame *iface, DWORD *pdwFlags)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%p)\n", This, pdwFlags);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_SetFrameMargins(ITargetFrame *iface, DWORD dwWidth, DWORD dwHeight)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%d %d)\n", This, dwWidth, dwHeight);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_GetFrameMargins(ITargetFrame *iface, DWORD *pdwWidth, DWORD *pdwHeight)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%p %p)\n", This, pdwWidth, pdwHeight);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_RemoteNavigate(ITargetFrame *iface, ULONG cLength, ULONG *pulData)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%u %p)\n", This, cLength, pulData);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_OnChildFrameActivate(ITargetFrame *iface, IUnknown *pUnkChildFrame)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%p)\n", This, pUnkChildFrame);
return E_NOTIMPL;
}
static HRESULT WINAPI TargetFrame_OnChildFrameDeactivate(ITargetFrame *iface, IUnknown *pUnkChildFrame)
{
HlinkFrame *This = impl_from_ITargetFrame(iface);
FIXME("(%p)->(%p)\n", This, pUnkChildFrame);
return E_NOTIMPL;
}
static const ITargetFrameVtbl TargetFrameVtbl = {
TargetFrame_QueryInterface,
TargetFrame_AddRef,
TargetFrame_Release,
TargetFrame_SetFrameName,
TargetFrame_GetFrameName,
TargetFrame_GetParentFrame,
TargetFrame_FindFrame,
TargetFrame_SetFrameSrc,
TargetFrame_GetFrameSrc,
TargetFrame_GetFramesContainer,
TargetFrame_SetFrameOptions,
TargetFrame_GetFrameOptions,
TargetFrame_SetFrameMargins,
TargetFrame_GetFrameMargins,
TargetFrame_RemoteNavigate,
TargetFrame_OnChildFrameActivate,
TargetFrame_OnChildFrameDeactivate
};
static inline HlinkFrame *impl_from_ITargetFrame2(ITargetFrame2 *iface)
{
return CONTAINING_RECORD(iface, HlinkFrame, IHlinkFrame_iface);
return CONTAINING_RECORD(iface, HlinkFrame, ITargetFrame2_iface);
}
static HRESULT WINAPI TargetFrame2_QueryInterface(ITargetFrame2 *iface, REFIID riid, void **ppv)
@ -1504,6 +1647,9 @@ BOOL HlinkFrame_QI(HlinkFrame *This, REFIID riid, void **ppv)
if(IsEqualGUID(&IID_IHlinkFrame, riid)) {
TRACE("(%p)->(IID_IHlinkFrame %p)\n", This, ppv);
*ppv = &This->IHlinkFrame_iface;
}else if(IsEqualGUID(&IID_ITargetFrame, riid)) {
TRACE("(%p)->(IID_ITargetFrame %p)\n", This, ppv);
*ppv = &This->ITargetFrame_iface;
}else if(IsEqualGUID(&IID_ITargetFrame2, riid)) {
TRACE("(%p)->(IID_ITargetFrame2 %p)\n", This, ppv);
*ppv = &This->ITargetFrame2_iface;
@ -1526,7 +1672,8 @@ BOOL HlinkFrame_QI(HlinkFrame *This, REFIID riid, void **ppv)
void HlinkFrame_Init(HlinkFrame *This, IUnknown *outer, DocHost *doc_host)
{
This->IHlinkFrame_iface.lpVtbl = &HlinkFrameVtbl;
This->IHlinkFrame_iface.lpVtbl = &HlinkFrameVtbl;
This->ITargetFrame_iface.lpVtbl = &TargetFrameVtbl;
This->ITargetFrame2_iface.lpVtbl = &TargetFrame2Vtbl;
This->ITargetFramePriv2_iface.lpVtbl = &TargetFramePriv2Vtbl;
This->IWebBrowserPriv2IE9_iface.lpVtbl = &WebBrowserPriv2IE9Vtbl;

View file

@ -273,7 +273,7 @@ static HRESULT on_silent_change(WebBrowser *This)
return S_OK;
}
static void release_client_site(WebBrowser *This)
static void release_client_site(WebBrowser *This, BOOL destroy_win)
{
release_dochost_client(&This->doc_host);
@ -282,7 +282,12 @@ static void release_client_site(WebBrowser *This)
This->client = NULL;
}
if(This->shell_embedding_hwnd) {
if(This->client_closed) {
IOleClientSite_Release(This->client_closed);
This->client_closed = NULL;
}
if(destroy_win && This->shell_embedding_hwnd) {
DestroyWindow(This->shell_embedding_hwnd);
This->shell_embedding_hwnd = NULL;
}
@ -444,16 +449,29 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE
WebBrowser *This = impl_from_IOleObject(iface);
IDocHostUIHandler *hostui;
IOleCommandTarget *olecmd;
BOOL get_olecmd = TRUE;
IOleContainer *container;
IDispatch *disp;
HRESULT hres;
TRACE("(%p)->(%p)\n", This, pClientSite);
if(This->client_closed) {
IOleClientSite_Release(This->client_closed);
This->client_closed = NULL;
}
if(This->client == pClientSite)
return S_OK;
release_client_site(This);
if(This->client && pClientSite) {
get_olecmd = FALSE;
olecmd = This->doc_host.olecmd;
if(olecmd)
IOleCommandTarget_AddRef(olecmd);
}
release_client_site(This, !pClientSite);
if(!pClientSite) {
on_commandstate_change(&This->doc_host, CSC_NAVIGATEBACK, FALSE);
@ -477,31 +495,46 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE
if(SUCCEEDED(hres))
This->doc_host.hostui = hostui;
hres = IOleClientSite_GetContainer(This->client, &container);
if(SUCCEEDED(hres)) {
ITargetContainer *target_container;
hres = IOleContainer_QueryInterface(container, &IID_ITargetContainer,
(void**)&target_container);
if(get_olecmd) {
hres = IOleClientSite_GetContainer(This->client, &container);
if(SUCCEEDED(hres)) {
FIXME("Unsupported ITargetContainer\n");
ITargetContainer_Release(target_container);
ITargetContainer *target_container;
hres = IOleContainer_QueryInterface(container, &IID_ITargetContainer,
(void**)&target_container);
if(SUCCEEDED(hres)) {
FIXME("Unsupported ITargetContainer\n");
ITargetContainer_Release(target_container);
}
hres = IOleContainer_QueryInterface(container, &IID_IOleCommandTarget, (void**)&olecmd);
if(FAILED(hres))
olecmd = NULL;
IOleContainer_Release(container);
}else {
hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&olecmd);
if(FAILED(hres))
olecmd = NULL;
}
hres = IOleContainer_QueryInterface(container, &IID_IOleCommandTarget, (void**)&olecmd);
if(FAILED(hres))
olecmd = NULL;
IOleContainer_Release(container);
}else {
hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&olecmd);
if(FAILED(hres))
olecmd = NULL;
}
This->doc_host.olecmd = olecmd;
create_shell_embedding_hwnd(This);
if(This->shell_embedding_hwnd) {
IOleInPlaceSite *inplace;
HWND parent;
hres = IOleClientSite_QueryInterface(This->client, &IID_IOleInPlaceSite, (void**)&inplace);
if(SUCCEEDED(hres)) {
hres = IOleInPlaceSite_GetWindow(inplace, &parent);
IOleInPlaceSite_Release(inplace);
if(SUCCEEDED(hres))
SHSetParentHwnd(This->shell_embedding_hwnd, parent);
}
}else {
create_shell_embedding_hwnd(This);
}
on_offlineconnected_change(This);
on_silent_change(This);
@ -539,6 +572,8 @@ static HRESULT WINAPI OleObject_SetHostNames(IOleObject *iface, LPCOLESTR szCont
static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD dwSaveOption)
{
WebBrowser *This = impl_from_IOleObject(iface);
IOleClientSite *client;
HRESULT hres;
TRACE("(%p)->(%d)\n", This, dwSaveOption);
@ -559,7 +594,13 @@ static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD dwSaveOption)
if(This->inplace)
IOleInPlaceSiteEx_OnInPlaceDeactivate(This->inplace);
return IOleObject_SetClientSite(iface, NULL);
/* store old client site - we need to restore it in DoVerb */
client = This->client;
if(This->client)
IOleClientSite_AddRef(This->client);
hres = IOleObject_SetClientSite(iface, NULL);
This->client_closed = client;
return hres;
}
static HRESULT WINAPI OleObject_SetMoniker(IOleObject *iface, DWORD dwWhichMoniker, IMoniker* pmk)
@ -601,6 +642,14 @@ static HRESULT WINAPI OleObject_DoVerb(IOleObject *iface, LONG iVerb, struct tag
TRACE("(%p)->(%d %p %p %d %p %s)\n", This, iVerb, lpmsg, pActiveSite, lindex, hwndParent,
wine_dbgstr_rect(lprcPosRect));
/* restore closed client site if we have one */
if(!This->client && This->client_closed) {
IOleClientSite *client = This->client_closed;
This->client_closed = NULL;
IOleObject_SetClientSite(iface, client);
IOleClientSite_Release(client);
}
switch (iVerb)
{
case OLEIVERB_SHOW:
@ -1162,5 +1211,5 @@ void WebBrowser_OleObject_Init(WebBrowser *This)
void WebBrowser_OleObject_Destroy(WebBrowser *This)
{
release_client_site(This);
release_client_site(This, TRUE);
}

View file

@ -74,7 +74,7 @@ reactos/dll/win32/hlink # Synced to WineStaging-1.9.4
reactos/dll/win32/hnetcfg # Synced to WineStaging-1.9.11
reactos/dll/win32/httpapi # Synced to WineStaging-1.9.4
reactos/dll/win32/iccvid # Synced to WineStaging-1.9.11
reactos/dll/win32/ieframe # Synced to WineStaging-1.9.4
reactos/dll/win32/ieframe # Synced to WineStaging-1.9.11
reactos/dll/win32/imaadp32.acm # Synced to WineStaging-1.9.4
reactos/dll/win32/imagehlp # Synced to WineStaging-1.9.4
reactos/dll/win32/imm32 # Synced to Wine-1.7.27