mirror of
https://github.com/reactos/reactos.git
synced 2024-07-04 03:34:16 +00:00
[URLMON] Sync with Wine 3.0. CORE-14225
This commit is contained in:
parent
a0b6db8b7f
commit
2eb77351e0
|
@ -243,12 +243,25 @@ static HRESULT install_inf_file(install_ctx_t *ctx)
|
||||||
|
|
||||||
len = GetPrivateProfileStringW(add_codeW, NULL, NULL, buf, sizeof(buf)/sizeof(*buf), ctx->install_file);
|
len = GetPrivateProfileStringW(add_codeW, NULL, NULL, buf, sizeof(buf)/sizeof(*buf), ctx->install_file);
|
||||||
if(len) {
|
if(len) {
|
||||||
FIXME("[Add.Code] section not supported\n");
|
default_install = FALSE;
|
||||||
|
|
||||||
/* Don't throw an error if we successfully ran setup hooks;
|
for(key = buf; *key; key += strlenW(key)+1) {
|
||||||
installation is likely to be complete enough */
|
TRACE("[Add.Code] key: %s\n", debugstr_w(key));
|
||||||
if(default_install)
|
|
||||||
return E_NOTIMPL;
|
len = GetPrivateProfileStringW(add_codeW, key, NULL, sect_name, sizeof(sect_name)/sizeof(*sect_name),
|
||||||
|
ctx->install_file);
|
||||||
|
if(!len) {
|
||||||
|
WARN("Could not get key value\n");
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = RunSetupCommandW(ctx->hwnd, ctx->install_file, sect_name,
|
||||||
|
ctx->tmp_dir, NULL, NULL, RSC_FLAG_INF, NULL);
|
||||||
|
if(FAILED(hres)) {
|
||||||
|
WARN("RunSetupCommandW failed: %08x\n", hres);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(default_install) {
|
if(default_install) {
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
|
|
||||||
#include "urlmon_main.h"
|
#include "urlmon_main.h"
|
||||||
|
|
||||||
|
#include <ole2.h>
|
||||||
|
|
||||||
HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(IWinInetHttpInfo* This,
|
HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(IWinInetHttpInfo* This,
|
||||||
DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
|
DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
|
||||||
DWORD *pdwReserved)
|
DWORD *pdwReserved)
|
||||||
|
@ -80,51 +82,281 @@ HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(IBindHost* This,
|
||||||
return IBindHost_MonikerBindToObject(This, moniker, bc, bsc, riid, (void**)obj);
|
return IBindHost_MonikerBindToObject(This, moniker, bc, bsc, riid, (void**)obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT marshal_stgmed(STGMEDIUM *stgmed, RemSTGMEDIUM **ret)
|
||||||
|
{
|
||||||
|
RemSTGMEDIUM *rem_stgmed;
|
||||||
|
IStream *stream = NULL;
|
||||||
|
ULONG size = 0;
|
||||||
|
HRESULT hres = S_OK;
|
||||||
|
|
||||||
|
if((stgmed->tymed == TYMED_ISTREAM && stgmed->u.pstm) || stgmed->pUnkForRelease) {
|
||||||
|
hres = CreateStreamOnHGlobal(NULL, TRUE, &stream);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(stgmed->tymed) {
|
||||||
|
case TYMED_NULL:
|
||||||
|
break;
|
||||||
|
case TYMED_ISTREAM:
|
||||||
|
if(stgmed->u.pstm)
|
||||||
|
hres = CoMarshalInterface(stream, &IID_IStream, (IUnknown*)stgmed->u.pstm,
|
||||||
|
MSHCTX_LOCAL, NULL, MSHLFLAGS_NORMAL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
FIXME("unsupported tymed %u\n", stgmed->tymed);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(SUCCEEDED(hres) && stgmed->pUnkForRelease)
|
||||||
|
hres = CoMarshalInterface(stream, &IID_IUnknown, stgmed->pUnkForRelease,
|
||||||
|
MSHCTX_LOCAL, NULL, MSHLFLAGS_NORMAL);
|
||||||
|
if(FAILED(hres)) {
|
||||||
|
if(stream)
|
||||||
|
IStream_Release(stream);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(stream) {
|
||||||
|
LARGE_INTEGER zero;
|
||||||
|
ULARGE_INTEGER off;
|
||||||
|
|
||||||
|
zero.QuadPart = 0;
|
||||||
|
IStream_Seek(stream, zero, STREAM_SEEK_CUR, &off);
|
||||||
|
size = off.QuadPart;
|
||||||
|
IStream_Seek(stream, zero, STREAM_SEEK_SET, &off);
|
||||||
|
}
|
||||||
|
|
||||||
|
rem_stgmed = heap_alloc_zero(FIELD_OFFSET(RemSTGMEDIUM, data[size]));
|
||||||
|
if(!rem_stgmed) {
|
||||||
|
if(stream)
|
||||||
|
IStream_Release(stream);
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
rem_stgmed->tymed = stgmed->tymed;
|
||||||
|
rem_stgmed->dwHandleType = 0;
|
||||||
|
rem_stgmed->pData = stgmed->u.pstm != NULL;
|
||||||
|
rem_stgmed->pUnkForRelease = stgmed->pUnkForRelease != NULL;
|
||||||
|
rem_stgmed->cbData = size;
|
||||||
|
if(stream) {
|
||||||
|
IStream_Read(stream, rem_stgmed->data, size, &size);
|
||||||
|
IStream_Release(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
*ret = rem_stgmed;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT unmarshal_stgmed(RemSTGMEDIUM *rem_stgmed, STGMEDIUM *stgmed)
|
||||||
|
{
|
||||||
|
IStream *stream = NULL;
|
||||||
|
HRESULT hres = S_OK;
|
||||||
|
|
||||||
|
stgmed->tymed = rem_stgmed->tymed;
|
||||||
|
|
||||||
|
if((stgmed->tymed == TYMED_ISTREAM && rem_stgmed->pData) || rem_stgmed->pUnkForRelease) {
|
||||||
|
LARGE_INTEGER zero;
|
||||||
|
|
||||||
|
hres = CreateStreamOnHGlobal(NULL, TRUE, &stream);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
|
||||||
|
hres = IStream_Write(stream, rem_stgmed->data, rem_stgmed->cbData, NULL);
|
||||||
|
if(FAILED(hres)) {
|
||||||
|
IStream_Release(stream);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
|
zero.QuadPart = 0;
|
||||||
|
IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(stgmed->tymed) {
|
||||||
|
case TYMED_NULL:
|
||||||
|
break;
|
||||||
|
case TYMED_ISTREAM:
|
||||||
|
if(rem_stgmed->pData)
|
||||||
|
hres = CoUnmarshalInterface(stream, &IID_IStream, (void**)&stgmed->u.pstm);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
FIXME("unsupported tymed %u\n", stgmed->tymed);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(SUCCEEDED(hres) && rem_stgmed->pUnkForRelease)
|
||||||
|
hres = CoUnmarshalInterface(stream, &IID_IUnknown, (void**)&stgmed->pUnkForRelease);
|
||||||
|
if(stream)
|
||||||
|
IStream_Release(stream);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void proxy_marshal_bindinfo(BINDINFO *bindinfo, RemBINDINFO *rem_bindinfo)
|
||||||
|
{
|
||||||
|
rem_bindinfo->szExtraInfo = bindinfo->szExtraInfo;
|
||||||
|
rem_bindinfo->grfBindInfoF = bindinfo->grfBindInfoF;
|
||||||
|
rem_bindinfo->dwBindVerb = bindinfo->dwBindVerb;
|
||||||
|
rem_bindinfo->szCustomVerb = bindinfo->szCustomVerb;
|
||||||
|
rem_bindinfo->cbstgmedData = bindinfo->cbstgmedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void proxy_unmarshal_bindinfo(RemBINDINFO *rem_bindinfo, BINDINFO *bindinfo)
|
||||||
|
{
|
||||||
|
bindinfo->szExtraInfo = rem_bindinfo->szExtraInfo;
|
||||||
|
bindinfo->grfBindInfoF = rem_bindinfo->grfBindInfoF;
|
||||||
|
bindinfo->dwBindVerb = rem_bindinfo->dwBindVerb;
|
||||||
|
bindinfo->szCustomVerb = rem_bindinfo->szCustomVerb;
|
||||||
|
bindinfo->cbstgmedData = rem_bindinfo->cbstgmedData;
|
||||||
|
bindinfo->dwOptions = rem_bindinfo->dwOptions;
|
||||||
|
bindinfo->dwOptionsFlags = rem_bindinfo->dwOptionsFlags;
|
||||||
|
bindinfo->dwCodePage = rem_bindinfo->dwCodePage;
|
||||||
|
bindinfo->iid = IID_NULL;
|
||||||
|
bindinfo->pUnk = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void stub_unmarshal_bindinfo(RemBINDINFO *rem_bindinfo, BINDINFO *bindinfo)
|
||||||
|
{
|
||||||
|
bindinfo->szExtraInfo = rem_bindinfo->szExtraInfo;
|
||||||
|
bindinfo->grfBindInfoF = rem_bindinfo->grfBindInfoF;
|
||||||
|
bindinfo->dwBindVerb = rem_bindinfo->dwBindVerb;
|
||||||
|
bindinfo->szCustomVerb = rem_bindinfo->szCustomVerb;
|
||||||
|
bindinfo->cbstgmedData = rem_bindinfo->cbstgmedData;
|
||||||
|
|
||||||
|
if(bindinfo->stgmedData.tymed != TYMED_NULL)
|
||||||
|
WARN("stgmed data (tymed %u) will be lost!\n", bindinfo->stgmedData.tymed);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void stub_marshal_bindinfo(BINDINFO *bindinfo, RemBINDINFO *rem_bindinfo)
|
||||||
|
{
|
||||||
|
rem_bindinfo->cbSize = sizeof(*rem_bindinfo);
|
||||||
|
rem_bindinfo->szExtraInfo = bindinfo->szExtraInfo;
|
||||||
|
rem_bindinfo->grfBindInfoF = bindinfo->grfBindInfoF;
|
||||||
|
rem_bindinfo->dwBindVerb = bindinfo->dwBindVerb;
|
||||||
|
rem_bindinfo->szCustomVerb = bindinfo->szCustomVerb;
|
||||||
|
rem_bindinfo->cbstgmedData = bindinfo->cbstgmedData;
|
||||||
|
rem_bindinfo->dwOptions = bindinfo->dwOptions;
|
||||||
|
rem_bindinfo->dwOptionsFlags = bindinfo->dwOptionsFlags;
|
||||||
|
rem_bindinfo->dwCodePage = bindinfo->dwCodePage;
|
||||||
|
rem_bindinfo->pUnk = NULL;
|
||||||
|
rem_bindinfo->dwReserved = bindinfo->dwReserved;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy(
|
HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy(
|
||||||
IBindStatusCallbackEx* This, DWORD *grfBINDF, BINDINFO *pbindinfo,
|
IBindStatusCallbackEx* This, DWORD *grfBINDF, BINDINFO *bindinfo,
|
||||||
DWORD *grfBINDF2, DWORD *pdwReserved)
|
DWORD *grfBINDF2, DWORD *pdwReserved)
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
RemBINDINFO rem_bindinfo = {sizeof(rem_bindinfo)};
|
||||||
return E_NOTIMPL;
|
RemSTGMEDIUM rem_stgmed = {0};
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%p %p %p %p)\n", This, grfBINDF, bindinfo, grfBINDF2, pdwReserved);
|
||||||
|
|
||||||
|
proxy_marshal_bindinfo(bindinfo, &rem_bindinfo);
|
||||||
|
hres = IBindStatusCallbackEx_RemoteGetBindInfoEx_Proxy(This, grfBINDF, &rem_bindinfo,
|
||||||
|
&rem_stgmed, grfBINDF2, pdwReserved);
|
||||||
|
proxy_unmarshal_bindinfo(&rem_bindinfo, bindinfo);
|
||||||
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub(
|
HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub(
|
||||||
IBindStatusCallbackEx* This, DWORD *grfBINDF, RemBINDINFO *pbindinfo,
|
IBindStatusCallbackEx* This, DWORD *grfBINDF, RemBINDINFO *rem_bindinfo,
|
||||||
RemSTGMEDIUM *pstgmed, DWORD *grfBINDF2, DWORD *pdwReserved)
|
RemSTGMEDIUM *rem_stgmed, DWORD *grfBINDF2, DWORD *pdwReserved)
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
BINDINFO bindinfo = {sizeof(bindinfo)};
|
||||||
return E_NOTIMPL;
|
HRESULT hres;
|
||||||
}
|
|
||||||
|
|
||||||
|
TRACE("(%p)->(%p %p %p %p %p)\n", This, grfBINDF, rem_bindinfo, rem_stgmed, grfBINDF2, pdwReserved);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Although arguments suggest support for STGMEDIUM from BINDINFO, tests show
|
||||||
|
* that it's not supported and returned data is lost.
|
||||||
|
*/
|
||||||
|
stub_unmarshal_bindinfo(rem_bindinfo, &bindinfo);
|
||||||
|
hres = IBindStatusCallbackEx_GetBindInfoEx(This, grfBINDF, &bindinfo, grfBINDF2, pdwReserved);
|
||||||
|
stub_marshal_bindinfo(&bindinfo, rem_bindinfo);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
|
HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
|
||||||
IBindStatusCallback* This, DWORD *grfBINDF, BINDINFO *pbindinfo)
|
IBindStatusCallback* This, DWORD *grfBINDF, BINDINFO *bindinfo)
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
RemBINDINFO rem_bindinfo = {sizeof(rem_bindinfo)};
|
||||||
return E_NOTIMPL;
|
RemSTGMEDIUM rem_stgmed = {0};
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%p %p)\n", This, grfBINDF, bindinfo);
|
||||||
|
|
||||||
|
proxy_marshal_bindinfo(bindinfo, &rem_bindinfo);
|
||||||
|
hres = IBindStatusCallback_RemoteGetBindInfo_Proxy(This, grfBINDF, &rem_bindinfo, &rem_stgmed);
|
||||||
|
proxy_unmarshal_bindinfo(&rem_bindinfo, bindinfo);
|
||||||
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub(
|
HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub(
|
||||||
IBindStatusCallback* This, DWORD *grfBINDF,
|
IBindStatusCallback* This, DWORD *grfBINDF,
|
||||||
RemBINDINFO *pbindinfo, RemSTGMEDIUM *pstgmed)
|
RemBINDINFO *rem_bindinfo, RemSTGMEDIUM *rem_stgmed)
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
BINDINFO bindinfo = {sizeof(bindinfo)};
|
||||||
return E_NOTIMPL;
|
HRESULT hres;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%p %p %p)\n", This, grfBINDF, rem_bindinfo, rem_stgmed);
|
||||||
|
|
||||||
|
stub_unmarshal_bindinfo(rem_bindinfo, &bindinfo);
|
||||||
|
hres = IBindStatusCallback_GetBindInfo(This, grfBINDF, &bindinfo);
|
||||||
|
stub_marshal_bindinfo(&bindinfo, rem_bindinfo);
|
||||||
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
|
HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
|
||||||
IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
|
IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
|
||||||
FORMATETC *pformatetc, STGMEDIUM *pstgmed)
|
FORMATETC *pformatetc, STGMEDIUM *pstgmed)
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
RemFORMATETC rem_formatetc;
|
||||||
return E_NOTIMPL;
|
RemSTGMEDIUM *rem_stgmed;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%x %u %p %p)\n", This, grfBSCF, dwSize, pformatetc, pstgmed);
|
||||||
|
|
||||||
|
hres = marshal_stgmed(pstgmed, &rem_stgmed);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
|
||||||
|
rem_formatetc.cfFormat = pformatetc->cfFormat;
|
||||||
|
rem_formatetc.ptd = 0;
|
||||||
|
rem_formatetc.dwAspect = pformatetc->dwAspect;
|
||||||
|
rem_formatetc.lindex = pformatetc->lindex;
|
||||||
|
rem_formatetc.tymed = pformatetc->tymed;
|
||||||
|
|
||||||
|
hres = IBindStatusCallback_RemoteOnDataAvailable_Proxy(This, grfBSCF, dwSize, &rem_formatetc, rem_stgmed);
|
||||||
|
|
||||||
|
heap_free(rem_stgmed);
|
||||||
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub(
|
HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub(
|
||||||
IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
|
IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
|
||||||
RemFORMATETC *pformatetc, RemSTGMEDIUM *pstgmed)
|
RemFORMATETC *pformatetc, RemSTGMEDIUM *pstgmed)
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
STGMEDIUM stgmed = { TYMED_NULL };
|
||||||
return E_NOTIMPL;
|
FORMATETC formatetc;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%x %u %p %p)\n", This, grfBSCF, dwSize, pformatetc, pstgmed);
|
||||||
|
|
||||||
|
hres = unmarshal_stgmed(pstgmed, &stgmed);
|
||||||
|
if(FAILED(hres))
|
||||||
|
return hres;
|
||||||
|
|
||||||
|
formatetc.cfFormat = pformatetc->cfFormat;
|
||||||
|
formatetc.ptd = NULL;
|
||||||
|
formatetc.dwAspect = pformatetc->dwAspect;
|
||||||
|
formatetc.lindex = pformatetc->lindex;
|
||||||
|
formatetc.tymed = pformatetc->tymed;
|
||||||
|
|
||||||
|
hres = IBindStatusCallback_OnDataAvailable(This, grfBSCF, dwSize, &formatetc, &stgmed);
|
||||||
|
|
||||||
|
ReleaseStgMedium(&stgmed);
|
||||||
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CALLBACK IBinding_GetBindResult_Proxy(IBinding* This,
|
HRESULT CALLBACK IBinding_GetBindResult_Proxy(IBinding* This,
|
||||||
|
|
|
@ -188,7 +188,7 @@ reactos/dll/win32/traffic # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/twain_32 # Synced to Wine-3.0
|
reactos/dll/win32/twain_32 # Synced to Wine-3.0
|
||||||
reactos/dll/win32/updspapi # Synced to WineStaging-2.9
|
reactos/dll/win32/updspapi # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/url # Synced to WineStaging-2.9
|
reactos/dll/win32/url # Synced to WineStaging-2.9
|
||||||
reactos/dll/win32/urlmon # Synced to WineStaging-2.16
|
reactos/dll/win32/urlmon # Synced to Wine-3.0
|
||||||
reactos/dll/win32/usp10 # Synced to Wine-3.0
|
reactos/dll/win32/usp10 # Synced to Wine-3.0
|
||||||
reactos/dll/win32/uxtheme # Forked
|
reactos/dll/win32/uxtheme # Forked
|
||||||
reactos/dll/win32/vbscript # Synced to WineStaging-2.9
|
reactos/dll/win32/vbscript # Synced to WineStaging-2.9
|
||||||
|
|
Loading…
Reference in a new issue