ole2: Implement ReadClassStm().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
995fe92652
commit
1053b4d4fa
|
@ -274,6 +274,9 @@ HRESULT WINAPI OleFlushClipboard16(void)
|
||||||
return OleFlushClipboard();
|
return OleFlushClipboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GET_SEGPTR_METHOD_ADDR(ifacename,segptr,methodname) \
|
||||||
|
((SEGPTR)((const ifacename##Vtbl*)MapSL((SEGPTR)((ifacename*)MapSL(segptr))->lpVtbl))->methodname)
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ReadClassStg (OLE2.18)
|
* ReadClassStg (OLE2.18)
|
||||||
*
|
*
|
||||||
|
@ -308,17 +311,15 @@ HRESULT WINAPI ReadClassStg16(SEGPTR pstg, CLSID *pclsid)
|
||||||
/*
|
/*
|
||||||
* read a STATSTG structure (contains the clsid) from the storage
|
* read a STATSTG structure (contains the clsid) from the storage
|
||||||
*/
|
*/
|
||||||
args[0] = (DWORD)pstg; /* iface */
|
args[0] = pstg; /* iface */
|
||||||
args[1] = WOWGlobalAllocLock16( 0, sizeof(STATSTG16), &hstatstg );
|
args[1] = WOWGlobalAllocLock16( 0, sizeof(STATSTG16), &hstatstg );
|
||||||
args[2] = STATFLAG_DEFAULT;
|
args[2] = STATFLAG_DEFAULT;
|
||||||
|
|
||||||
if (!WOWCallback16Ex(
|
if (!WOWCallback16Ex(
|
||||||
(DWORD)((const IStorage16Vtbl*)MapSL(
|
GET_SEGPTR_METHOD_ADDR(IStorage16, pstg, Stat),
|
||||||
(SEGPTR)((LPSTORAGE16)MapSL(pstg))->lpVtbl)
|
|
||||||
)->Stat,
|
|
||||||
WCB16_PASCAL,
|
WCB16_PASCAL,
|
||||||
3*sizeof(DWORD),
|
3*sizeof(DWORD),
|
||||||
(LPVOID)args,
|
args,
|
||||||
(LPDWORD)&hres
|
(LPDWORD)&hres
|
||||||
)) {
|
)) {
|
||||||
WOWGlobalUnlockFree16(args[1]);
|
WOWGlobalUnlockFree16(args[1]);
|
||||||
|
@ -335,6 +336,58 @@ HRESULT WINAPI ReadClassStg16(SEGPTR pstg, CLSID *pclsid)
|
||||||
return hres;
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* ReadClassStm (OLE2.20)
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI ReadClassStm16(SEGPTR stream, CLSID *clsid)
|
||||||
|
{
|
||||||
|
HANDLE16 hclsid, hread;
|
||||||
|
HRESULT hres;
|
||||||
|
DWORD args[4];
|
||||||
|
|
||||||
|
TRACE("(0x%x, %p)\n", stream, clsid);
|
||||||
|
|
||||||
|
if (!clsid)
|
||||||
|
return E_INVALIDARG16;
|
||||||
|
|
||||||
|
memset(clsid, 0, sizeof(*clsid));
|
||||||
|
|
||||||
|
if (!stream)
|
||||||
|
return E_INVALIDARG16;
|
||||||
|
|
||||||
|
args[0] = stream; /* iface */
|
||||||
|
args[1] = WOWGlobalAllocLock16( 0, sizeof(CLSID), &hclsid );
|
||||||
|
args[2] = sizeof(CLSID);
|
||||||
|
args[3] = WOWGlobalAllocLock16( 0, sizeof(ULONG), &hread );
|
||||||
|
|
||||||
|
if (WOWCallback16Ex(
|
||||||
|
GET_SEGPTR_METHOD_ADDR(IStream16, stream, Read),
|
||||||
|
WCB16_PASCAL,
|
||||||
|
4*sizeof(DWORD),
|
||||||
|
args,
|
||||||
|
(DWORD*)&hres))
|
||||||
|
{
|
||||||
|
ULONG readlen;
|
||||||
|
|
||||||
|
memcpy(&readlen, MapSL(args[3]), sizeof(readlen));
|
||||||
|
if (readlen == sizeof(CLSID))
|
||||||
|
memcpy(clsid, MapSL(args[1]), sizeof(CLSID));
|
||||||
|
else
|
||||||
|
hres = STG_E_READFAULT;
|
||||||
|
|
||||||
|
TRACE("clsid is %s\n", debugstr_guid(clsid));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERR("CallTo16 IStream16::Read() failed, hres %x\n", hres);
|
||||||
|
hres = E_FAIL;
|
||||||
|
}
|
||||||
|
WOWGlobalUnlockFree16(args[1]);
|
||||||
|
WOWGlobalUnlockFree16(args[3]);
|
||||||
|
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetConvertStg (OLE2.82)
|
* GetConvertStg (OLE2.82)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
17 stub OLELOCKRUNNING
|
17 stub OLELOCKRUNNING
|
||||||
18 pascal ReadClassStg(segptr ptr) ReadClassStg16
|
18 pascal ReadClassStg(segptr ptr) ReadClassStg16
|
||||||
19 pascal WriteClassStg(segptr ptr) WriteClassStg16
|
19 pascal WriteClassStg(segptr ptr) WriteClassStg16
|
||||||
20 stub READCLASSSTM
|
20 pascal ReadClassStm(segptr ptr) ReadClassStm16
|
||||||
21 stub WRITECLASSSTM
|
21 stub WRITECLASSSTM
|
||||||
22 stub BINDMONIKER
|
22 stub BINDMONIKER
|
||||||
23 stub MKPARSEDISPLAYNAME
|
23 stub MKPARSEDISPLAYNAME
|
||||||
|
|
Loading…
Reference in New Issue