Wine-20041201 vendor drop Added: vendor/wine/dlls/ole32/ Added: vendor/wine/dlls/ole32/current/ Added: vendor/wine/dlls/ole32/current/Makefile.in Added: vendor/wine/dlls/ole32/current/antimoniker.c Added: vendor/wine/dlls/ole32/current/bindctx.c Added: vendor/wine/dlls/ole32/current/clipboard.c Added: vendor/wine/dlls/ole32/current/compobj.c Added: vendor/wine/dlls/ole32/current/compobj.spec Added: vendor/wine/dlls/ole32/current/compobj_private.h Added: vendor/wine/dlls/ole32/current/compositemoniker.c Added: vendor/wine/dlls/ole32/current/datacache.c Added: vendor/wine/dlls/ole32/current/dcom.idl Added: vendor/wine/dlls/ole32/current/defaulthandler.c Added: vendor/wine/dlls/ole32/current/errorinfo.c Added: vendor/wine/dlls/ole32/current/filemoniker.c Added: vendor/wine/dlls/ole32/current/ftmarshal.c Added: vendor/wine/dlls/ole32/current/git.c Added: vendor/wine/dlls/ole32/current/hglobalstream.c Added: vendor/wine/dlls/ole32/current/ifs.c Added: vendor/wine/dlls/ole32/current/ifs.h Added: vendor/wine/dlls/ole32/current/itemmoniker.c Added: vendor/wine/dlls/ole32/current/marshal.c Added: vendor/wine/dlls/ole32/current/memlockbytes.c Added: vendor/wine/dlls/ole32/current/memlockbytes16.c Added: vendor/wine/dlls/ole32/current/moniker.c Added: vendor/wine/dlls/ole32/current/moniker.h Added: vendor/wine/dlls/ole32/current/ole16.c Added: vendor/wine/dlls/ole32/current/ole2.c Added: vendor/wine/dlls/ole32/current/ole2.spec Added: vendor/wine/dlls/ole32/current/ole2_16.c Added: vendor/wine/dlls/ole32/current/ole2conv.spec Added: vendor/wine/dlls/ole32/current/ole2impl.c Added: vendor/wine/dlls/ole32/current/ole2nls.c Added: vendor/wine/dlls/ole32/current/ole2nls.spec Added: vendor/wine/dlls/ole32/current/ole2prox.spec Added: vendor/wine/dlls/ole32/current/ole2stubs.c Added: vendor/wine/dlls/ole32/current/ole2thk.spec Added: vendor/wine/dlls/ole32/current/ole32.spec Added: vendor/wine/dlls/ole32/current/ole32_main.c Added: vendor/wine/dlls/ole32/current/ole32_main.h Added: vendor/wine/dlls/ole32/current/ole32res.rc Added: vendor/wine/dlls/ole32/current/oleobj.c Added: vendor/wine/dlls/ole32/current/oleproxy.c Added: vendor/wine/dlls/ole32/current/olestd.h Added: vendor/wine/dlls/ole32/current/regsvr.c Added: vendor/wine/dlls/ole32/current/rpc.c Added: vendor/wine/dlls/ole32/current/stg_bigblockfile.c Added: vendor/wine/dlls/ole32/current/stg_stream.c Added: vendor/wine/dlls/ole32/current/storage.c Added: vendor/wine/dlls/ole32/current/storage.spec Added: vendor/wine/dlls/ole32/current/storage32.c Added: vendor/wine/dlls/ole32/current/storage32.h Added: vendor/wine/dlls/ole32/current/version.rc _____
Added: vendor/wine/dlls/ole32/current/Makefile.in --- vendor/wine/dlls/ole32/current/Makefile.in 2004-12-31 15:14:19 UTC (rev 12571) +++ vendor/wine/dlls/ole32/current/Makefile.in 2004-12-31 15:17:24 UTC (rev 12572) @@ -0,0 +1,74 @@
+EXTRADEFS = -D_OLE32_ -DCOM_NO_WINDOWS_H +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +MODULE = ole32.dll +IMPORTS = advapi32 user32 gdi32 rpcrt4 kernel32 ntdll +EXTRALIBS = -luuid + +C_SRCS = \ + antimoniker.c \ + bindctx.c \ + clipboard.c \ + compobj.c \ + compositemoniker.c \ + datacache.c \ + defaulthandler.c \ + errorinfo.c \ + filemoniker.c \ + ftmarshal.c \ + git.c \ + hglobalstream.c \ + ifs.c \ + itemmoniker.c \ + marshal.c \ + memlockbytes.c \ + moniker.c \ + ole2.c \ + ole2stubs.c \ + ole2impl.c \ + ole32_main.c \ + oleobj.c \ + oleproxy.c \ + regsvr.c \ + rpc.c \ + stg_bigblockfile.c \ + stg_stream.c \ + storage32.c + +C_SRCS16 = \ + memlockbytes16.c \ + ole16.c \ + ole2_16.c \ + ole2nls.c \ + storage.c + +SPEC_SRCS16 = \ + compobj.spec \ + ole2.spec \ + ole2conv.spec \ + ole2nls.spec \ + ole2prox.spec \ + ole2thk.spec \ + storage.spec + +RC_SRCS = ole32res.rc +RC_BINSRC = ole32res.rc +RC_BINARIES = \ + drag_copy.cur \ + drag_link.cur \ + drag_move.cur \ + nodrop.cur + +IDL_SRCS = \ + dcom.idl + +SUBDIRS = tests + +@MAKE_DLL_RULES@ + +### Dependencies: + +# note: this will get overwritten by make depend +$(ALL_OBJS): $(IDL_SRCS:.idl=.h) _____
Added: vendor/wine/dlls/ole32/current/antimoniker.c --- vendor/wine/dlls/ole32/current/antimoniker.c 2004-12-31 15:14:19 UTC (rev 12571) +++ vendor/wine/dlls/ole32/current/antimoniker.c 2004-12-31 15:17:24 UTC (rev 12572) @@ -0,0 +1,666 @@
+/********************************************************************** ***************** + * AntiMonikers implementation + * + * Copyright 1999 Noomen Hamza + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ************************************************************************ ***************/ + +#include <assert.h> +#include <stdarg.h> +#include <string.h> + +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include "windef.h" +#include "winbase.h" +#include "winerror.h" +#include "wine/unicode.h" +#include "objbase.h" +#include "wine/debug.h" +#include "moniker.h" + +WINE_DEFAULT_DEBUG_CHANNEL(ole); + +const CLSID CLSID_AntiMoniker = { + 0x305, 0, 0, {0xC0, 0, 0, 0, 0, 0, 0, 0x46} +}; + +/* AntiMoniker data structure */ +typedef struct AntiMonikerImpl{ + + IMonikerVtbl* lpvtbl1; /* VTable relative to the IMoniker interface.*/ + + /* The ROT (RunningObjectTable implementation) uses the IROTData interface to test whether + * two monikers are equal. That's whay IROTData interface is implemented by monikers. + */ + IROTDataVtbl* lpvtbl2; /* VTable relative to the IROTData interface.*/ + + ULONG ref; /* reference counter for this object */ + +} AntiMonikerImpl; + +/********************************************************************** **********/ +/* AntiMoniker prototype functions : */ + +/* IUnknown prototype functions */ +static HRESULT WINAPI AntiMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject); +static ULONG WINAPI AntiMonikerImpl_AddRef(IMoniker* iface); +static ULONG WINAPI AntiMonikerImpl_Release(IMoniker* iface); + +/* IPersist prototype functions */ +static HRESULT WINAPI AntiMonikerImpl_GetClassID(IMoniker* iface, CLSID *pClassID); + +/* IPersistStream prototype functions */ +static HRESULT WINAPI AntiMonikerImpl_IsDirty(IMoniker* iface); +static HRESULT WINAPI AntiMonikerImpl_Load(IMoniker* iface, IStream* pStm); +static HRESULT WINAPI AntiMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty); +static HRESULT WINAPI AntiMonikerImpl_GetSizeMax(IMoniker* iface, ULARGE_INTEGER* pcbSize); + +/* IMoniker prototype functions */ +static HRESULT WINAPI AntiMonikerImpl_BindToObject(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult); +static HRESULT WINAPI AntiMonikerImpl_BindToStorage(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, VOID** ppvResult); +static HRESULT WINAPI AntiMonikerImpl_Reduce(IMoniker* iface,IBindCtx* pbc, DWORD dwReduceHowFar,IMoniker** ppmkToLeft, IMoniker** ppmkReduced); +static HRESULT WINAPI AntiMonikerImpl_ComposeWith(IMoniker* iface,IMoniker* pmkRight,BOOL fOnlyIfNotGeneric, IMoniker** ppmkComposite); +static HRESULT WINAPI AntiMonikerImpl_Enum(IMoniker* iface,BOOL fForward, IEnumMoniker** ppenumMoniker); +static HRESULT WINAPI AntiMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker); +static HRESULT WINAPI AntiMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash); +static HRESULT WINAPI AntiMonikerImpl_IsRunning(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, IMoniker* pmkNewlyRunning); +static HRESULT WINAPI AntiMonikerImpl_GetTimeOfLastChange(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, FILETIME* pAntiTime); +static HRESULT WINAPI AntiMonikerImpl_Inverse(IMoniker* iface,IMoniker** ppmk); +static HRESULT WINAPI AntiMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther, IMoniker** ppmkPrefix); +static HRESULT WINAPI AntiMonikerImpl_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppmkRelPath); +static HRESULT WINAPI AntiMonikerImpl_GetDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR *ppszDisplayName); +static HRESULT WINAPI AntiMonikerImpl_ParseDisplayName(IMoniker* iface,IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut); +static HRESULT WINAPI AntiMonikerImpl_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys); + +/********************************************************************** **********/ +/* IROTData prototype functions */ + +/* IUnknown prototype functions */ +static HRESULT WINAPI AntiMonikerROTDataImpl_QueryInterface(IROTData* iface,REFIID riid,VOID** ppvObject); +static ULONG WINAPI AntiMonikerROTDataImpl_AddRef(IROTData* iface); +static ULONG WINAPI AntiMonikerROTDataImpl_Release(IROTData* iface); + +/* IROTData prototype function */ +static HRESULT WINAPI AntiMonikerROTDataImpl_GetComparaisonData(IROTData* iface,BYTE* pbData,ULONG cbMax,ULONG* pcbData); + +/* Local function used by AntiMoniker implementation */ +HRESULT WINAPI AntiMonikerImpl_Construct(AntiMonikerImpl* iface); +HRESULT WINAPI AntiMonikerImpl_Destroy(AntiMonikerImpl* iface); + +/********************************************************************** **********/ +/* Virtual function table for the AntiMonikerImpl class which include IPersist,*/ +/* IPersistStream and IMoniker functions. */ +static IMonikerVtbl VT_AntiMonikerImpl = +{ + AntiMonikerImpl_QueryInterface, + AntiMonikerImpl_AddRef, + AntiMonikerImpl_Release, + AntiMonikerImpl_GetClassID, + AntiMonikerImpl_IsDirty, + AntiMonikerImpl_Load, + AntiMonikerImpl_Save, + AntiMonikerImpl_GetSizeMax, + AntiMonikerImpl_BindToObject, + AntiMonikerImpl_BindToStorage, + AntiMonikerImpl_Reduce, + AntiMonikerImpl_ComposeWith, + AntiMonikerImpl_Enum, + AntiMonikerImpl_IsEqual, + AntiMonikerImpl_Hash, + AntiMonikerImpl_IsRunning, + AntiMonikerImpl_GetTimeOfLastChange, + AntiMonikerImpl_Inverse, + AntiMonikerImpl_CommonPrefixWith, + AntiMonikerImpl_RelativePathTo, + AntiMonikerImpl_GetDisplayName, + AntiMonikerImpl_ParseDisplayName, + AntiMonikerImpl_IsSystemMoniker +}; + +/********************************************************************** **********/ +/* Virtual function table for the IROTData class. */ +static IROTDataVtbl VT_ROTDataImpl = +{ + AntiMonikerROTDataImpl_QueryInterface, + AntiMonikerROTDataImpl_AddRef, + AntiMonikerROTDataImpl_Release, + AntiMonikerROTDataImpl_GetComparaisonData +}; + +/********************************************************************** ********* + * AntiMoniker_QueryInterface + ************************************************************************ *******/ +HRESULT WINAPI AntiMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject) +{ + AntiMonikerImpl *This = (AntiMonikerImpl *)iface; + + TRACE("(%p,%p,%p)\n",This,riid,ppvObject); + + /* Perform a sanity check on the parameters.*/ + if ( (This==0) || (ppvObject==0) ) + return E_INVALIDARG; + + /* Initialize the return parameter */ + *ppvObject = 0; + + /* Compare the riid with the interface IDs implemented by this object.*/ + if (IsEqualIID(&IID_IUnknown, riid) || + IsEqualIID(&IID_IPersist, riid) || + IsEqualIID(&IID_IPersistStream, riid) || + IsEqualIID(&IID_IMoniker, riid) + ) + *ppvObject = iface; + else if (IsEqualIID(&IID_IROTData, riid)) + *ppvObject = (IROTData*)&(This->lpvtbl2); + + /* Check that we obtained an interface.*/ + if ((*ppvObject)==0) + return E_NOINTERFACE; + + /* Query Interface always increases the reference count by one when it is successful */ + AntiMonikerImpl_AddRef(iface); + + return S_OK; +} + +/********************************************************************** ******** + * AntiMoniker_AddRef + ************************************************************************ ******/ +ULONG WINAPI AntiMonikerImpl_AddRef(IMoniker* iface) +{ + AntiMonikerImpl *This = (AntiMonikerImpl *)iface; + + TRACE("(%p)\n",This); + + return InterlockedIncrement(&This->ref); +} + +/********************************************************************** ******** + * AntiMoniker_Release + ************************************************************************ ******/ +ULONG WINAPI AntiMonikerImpl_Release(IMoniker* iface) +{ + AntiMonikerImpl *This = (AntiMonikerImpl *)iface; + ULONG ref; + + TRACE("(%p)\n",This); + + ref = InterlockedDecrement(&This->ref); + + /* destroy the object if there's no more reference on it */ + if (ref == 0) AntiMonikerImpl_Destroy(This); + + return ref; +} + +/********************************************************************** ******** + * AntiMoniker_GetClassID + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_GetClassID(IMoniker* iface,CLSID *pClassID) +{ + TRACE("(%p,%p),stub!\n",iface,pClassID); + + if (pClassID==NULL) + return E_POINTER; + + *pClassID = CLSID_AntiMoniker; + + return S_OK; +} + +/********************************************************************** ******** + * AntiMoniker_IsDirty + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_IsDirty(IMoniker* iface) +{ + /* Note that the OLE-provided implementations of the IPersistStream::IsDirty + method in the OLE-provided moniker interfaces always return S_FALSE because + their internal state never changes. */ + + TRACE("(%p)\n",iface); + + return S_FALSE; +} + +/********************************************************************** ******** + * AntiMoniker_Load + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_Load(IMoniker* iface,IStream* pStm) +{ + DWORD constant=1,dwbuffer; + HRESULT res; + + /* data read by this function is only a DWORD constant (must be 1) ! */ + res=IStream_Read(pStm,&dwbuffer,sizeof(DWORD),NULL); + + if (SUCCEEDED(res)&& dwbuffer!=constant) + return E_FAIL; + + return res; +} + +/********************************************************************** ******** + * AntiMoniker_Save + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_Save(IMoniker* iface,IStream* pStm,BOOL fClearDirty) +{ + DWORD constant=1; + HRESULT res; + + /* data written by this function is only a DWORD constant set to 1 ! */ + res=IStream_Write(pStm,&constant,sizeof(constant),NULL); + + return res; +} + +/********************************************************************** ******** + * AntiMoniker_GetSizeMax + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_GetSizeMax(IMoniker* iface, + ULARGE_INTEGER* pcbSize)/* Pointer to size of stream needed to save object */ +{ + TRACE("(%p,%p)\n",iface,pcbSize); + + if (pcbSize!=NULL) + return E_POINTER; + + /* for more details see AntiMonikerImpl_Save coments */ + + /* Normaly the sizemax must be the size of DWORD ! but I tested this function it ususlly return 16 bytes */ + /* more than the number of bytes used by AntiMoniker::Save function */ + pcbSize->u.LowPart = sizeof(DWORD)+16; + + pcbSize->u.HighPart=0; + + return S_OK; +} + +/********************************************************************** ******** + * AntiMoniker_Construct (local function) + ************************************************************************ *******/ +HRESULT WINAPI AntiMonikerImpl_Construct(AntiMonikerImpl* This) +{ + + TRACE("(%p)\n",This); + + /* Initialize the virtual fgunction table. */ + This->lpvtbl1 = &VT_AntiMonikerImpl; + This->lpvtbl2 = &VT_ROTDataImpl; + This->ref = 0; + + return S_OK; +} + +/********************************************************************** ******** + * AntiMoniker_Destroy (local function) + ************************************************************************ *******/ +HRESULT WINAPI AntiMonikerImpl_Destroy(AntiMonikerImpl* This) +{ + TRACE("(%p)\n",This); + + return HeapFree(GetProcessHeap(),0,This); +} + +/********************************************************************** ******** + * AntiMoniker_BindToObject + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_BindToObject(IMoniker* iface, + IBindCtx* pbc, + IMoniker* pmkToLeft, + REFIID riid, + VOID** ppvResult) +{ + TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult); + return E_NOTIMPL; +} + +/********************************************************************** ******** + * AntiMoniker_BindToStorage + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_BindToStorage(IMoniker* iface, + IBindCtx* pbc, + IMoniker* pmkToLeft, + REFIID riid, + VOID** ppvResult) +{ + TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult); + return E_NOTIMPL; +} + +/********************************************************************** ******** + * AntiMoniker_Reduce + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_Reduce(IMoniker* iface, + IBindCtx* pbc, + DWORD dwReduceHowFar, + IMoniker** ppmkToLeft, + IMoniker** ppmkReduced) +{ + TRACE("(%p,%p,%ld,%p,%p)\n",iface,pbc,dwReduceHowFar,ppmkToLeft,ppmkRedu ced); + + if (ppmkReduced==NULL) + return E_POINTER; + + AntiMonikerImpl_AddRef(iface); + + *ppmkReduced=iface; + + return MK_S_REDUCED_TO_SELF; +} +/********************************************************************** ******** + * AntiMoniker_ComposeWith + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_ComposeWith(IMoniker* iface, + IMoniker* pmkRight, + BOOL fOnlyIfNotGeneric, + IMoniker** ppmkComposite) +{ + + TRACE("(%p,%p,%d,%p)\n",iface,pmkRight,fOnlyIfNotGeneric,ppmkComposite); + + if ((ppmkComposite==NULL)||(pmkRight==NULL)) + return E_POINTER; + + *ppmkComposite=0; + + if (fOnlyIfNotGeneric) + return MK_E_NEEDGENERIC; + else + return CreateGenericComposite(iface,pmkRight,ppmkComposite); +} + +/********************************************************************** ******** + * AntiMoniker_Enum + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_Enum(IMoniker* iface,BOOL fForward, IEnumMoniker** ppenumMoniker) +{ + TRACE("(%p,%d,%p)\n",iface,fForward,ppenumMoniker); + + if (ppenumMoniker == NULL) + return E_POINTER; + + *ppenumMoniker = NULL; + + return S_OK; +} + +/********************************************************************** ******** + * AntiMoniker_IsEqual + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker) +{ + DWORD mkSys; + + TRACE("(%p,%p)\n",iface,pmkOtherMoniker); + + if (pmkOtherMoniker==NULL) + return S_FALSE; + + IMoniker_IsSystemMoniker(pmkOtherMoniker,&mkSys); + + if (mkSys==MKSYS_ANTIMONIKER) + return S_OK; + else + return S_FALSE; +} + +/********************************************************************** ******** + * AntiMoniker_Hash + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash) +{ + if (pdwHash==NULL) + return E_POINTER; + + *pdwHash=0; + + return S_OK; +} + +/********************************************************************** ******** + * AntiMoniker_IsRunning + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_IsRunning(IMoniker* iface, + IBindCtx* pbc, + IMoniker* pmkToLeft, + IMoniker* pmkNewlyRunning) +{ + IRunningObjectTable* rot; + HRESULT res; + + TRACE("(%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,pmkNewlyRunning); + + if (pbc==NULL) + return E_INVALIDARG; + + res=IBindCtx_GetRunningObjectTable(pbc,&rot); + + if (FAILED(res)) + return res; + + res = IRunningObjectTable_IsRunning(rot,iface); + + IRunningObjectTable_Release(rot); + + return res; +} + +/********************************************************************** ******** + * AntiMoniker_GetTimeOfLastChange + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_GetTimeOfLastChange(IMoniker* iface, + IBindCtx* pbc, + IMoniker* pmkToLeft, + FILETIME* pAntiTime) +{ + TRACE("(%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,pAntiTime); + return E_NOTIMPL; +} + +/********************************************************************** ******** + * AntiMoniker_Inverse + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_Inverse(IMoniker* iface,IMoniker** ppmk) +{ + TRACE("(%p,%p)\n",iface,ppmk); + + if (ppmk==NULL) + return E_POINTER; + + *ppmk=0; + + return MK_E_NOINVERSE; +} + +/********************************************************************** ******** + * AntiMoniker_CommonPrefixWith + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther,IMoniker** ppmkPrefix) +{ + DWORD mkSys; + + IMoniker_IsSystemMoniker(pmkOther,&mkSys); + + if(mkSys==MKSYS_ITEMMONIKER){ + + IMoniker_AddRef(iface); + + *ppmkPrefix=iface; + + IMoniker_AddRef(iface); + + return MK_S_US; + } + else + return MonikerCommonPrefixWith(iface,pmkOther,ppmkPrefix); +} + +/********************************************************************** ******** + * AntiMoniker_RelativePathTo + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppmkRelPath) +{ + TRACE("(%p,%p,%p)\n",iface,pmOther,ppmkRelPath); + + if (ppmkRelPath==NULL) + return E_POINTER; + + IMoniker_AddRef(pmOther); + + *ppmkRelPath=pmOther; + + return MK_S_HIM; +} + +/********************************************************************** ******** + * AntiMoniker_GetDisplayName + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_GetDisplayName(IMoniker* iface, + IBindCtx* pbc, + IMoniker* pmkToLeft, + LPOLESTR *ppszDisplayName) +{ + static const WCHAR back[]={'\','.','.',0}; + + TRACE("(%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,ppszDisplayName); + + if (ppszDisplayName==NULL) + return E_POINTER; + + if (pmkToLeft!=NULL){ + FIXME("() pmkToLeft!=NULL not implemented \n"); + return E_NOTIMPL; + } + + *ppszDisplayName=CoTaskMemAlloc(sizeof(back)); + + if (*ppszDisplayName==NULL) + return E_OUTOFMEMORY; + + strcpyW(*ppszDisplayName,back); + + return S_OK; +} + +/********************************************************************** ******** + * AntiMoniker_ParseDisplayName + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_ParseDisplayName(IMoniker* iface, + IBindCtx* pbc, + IMoniker* pmkToLeft, + LPOLESTR pszDisplayName, + ULONG* pchEaten, + IMoniker** ppmkOut) +{ + TRACE("(%p,%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,pszDisplayName,pchEate n,ppmkOut); + return E_NOTIMPL; +} + +/********************************************************************** ******** + * AntiMoniker_IsSystemMoniker + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerImpl_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys) +{ + TRACE("(%p,%p)\n",iface,pwdMksys); + + if (!pwdMksys) + return E_POINTER; + + (*pwdMksys)=MKSYS_ANTIMONIKER; + + return S_OK; +} + +/********************************************************************** ********* + * AntiMonikerIROTData_QueryInterface + ************************************************************************ *******/ +HRESULT WINAPI AntiMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObject) +{ + + ICOM_THIS_From_IROTData(IMoniker, iface); + + TRACE("(%p,%p,%p)\n",iface,riid,ppvObject); + + return AntiMonikerImpl_QueryInterface(This, riid, ppvObject); +} + +/********************************************************************** * + * AntiMonikerIROTData_AddRef + */ +ULONG WINAPI AntiMonikerROTDataImpl_AddRef(IROTData *iface) +{ + ICOM_THIS_From_IROTData(IMoniker, iface); + + TRACE("(%p)\n",iface); + + return AntiMonikerImpl_AddRef(This); +} + +/********************************************************************** * + * AntiMonikerIROTData_Release + */ +ULONG WINAPI AntiMonikerROTDataImpl_Release(IROTData* iface) +{ + ICOM_THIS_From_IROTData(IMoniker, iface); + + TRACE("(%p)\n",iface); + + return AntiMonikerImpl_Release(This); +} + +/********************************************************************** ******** + * AntiMonikerIROTData_GetComparaisonData + ************************************************************************ ******/ +HRESULT WINAPI AntiMonikerROTDataImpl_GetComparaisonData(IROTData* iface, + BYTE* pbData, + ULONG cbMax, + ULONG* pcbData) +{ + FIXME("(),stub!\n"); + return E_NOTIMPL; +} + +/********************************************************************** ******** + * CreateAntiMoniker [OLE32.@] + ************************************************************************ ******/ +HRESULT WINAPI CreateAntiMoniker(LPMONIKER * ppmk) +{ + AntiMonikerImpl* newAntiMoniker = 0; + HRESULT hr = S_OK; + IID riid=IID_IMoniker; + + TRACE("(%p)\n",ppmk); + + newAntiMoniker = HeapAlloc(GetProcessHeap(), 0, sizeof(AntiMonikerImpl)); + + if (newAntiMoniker == 0) + return STG_E_INSUFFICIENTMEMORY; + + hr = AntiMonikerImpl_Construct(newAntiMoniker); + + if (FAILED(hr)){ + + HeapFree(GetProcessHeap(),0,newAntiMoniker); + return hr; + } + + hr = AntiMonikerImpl_QueryInterface((IMoniker*)newAntiMoniker,&riid,(void**)p pmk); + + return hr; +} _____
Added: vendor/wine/dlls/ole32/current/bindctx.c --- vendor/wine/dlls/ole32/current/bindctx.c 2004-12-31 15:14:19 UTC (rev 12571) +++ vendor/wine/dlls/ole32/current/bindctx.c 2004-12-31 15:17:24 UTC (rev 12572) @@ -0,0 +1,590 @@
+/********************************************************************** ***************** + * BindCtx implementation + * + * Copyright 1999 Noomen Hamza + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ************************************************************************ ***************/ + +#include <stdarg.h> +#include <string.h> +#include <assert.h> + +#define COBJMACROS + +#include "winerror.h" +#include "windef.h" +#include "winbase.h" +#include "wine/unicode.h" +#include "objbase.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(ole); + +/* represent the first size table and it's increment block size */ +#define BLOCK_TAB_SIZE 10 +#define MAX_TAB_SIZE 0xFFFFFFFF + +/* data structure of the BindCtx table elements */ +typedef struct BindCtxObject{ + + IUnknown* pObj; /* point on a bound object */ + + LPOLESTR pkeyObj; /* key associated to this bound object */ + + BYTE regType; /* registration type: 1 if RegisterObjectParam and 0 if RegisterObjectBound */ + +} BindCtxObject; + +/* BindCtx data strucrture */ +typedef struct BindCtxImpl{ + + IBindCtxVtbl *lpVtbl; /* VTable relative to the IBindCtx interface.*/ + + ULONG ref; /* reference counter for this object */ + + BindCtxObject* bindCtxTable; /* this is a table in which all bounded objects are stored*/ + DWORD bindCtxTableLastIndex; /* first free index in the table */ + DWORD bindCtxTableSize; /* size table */ + + BIND_OPTS2 bindOption2; /* a structure which contains the bind options*/ + +} BindCtxImpl; + +/* IBindCtx prototype functions : */ + +/* IUnknown functions*/ +static HRESULT WINAPI BindCtxImpl_QueryInterface(IBindCtx* iface,REFIID riid,void** ppvObject); +static ULONG WINAPI BindCtxImpl_AddRef(IBindCtx* iface); +static ULONG WINAPI BindCtxImpl_Release(IBindCtx* iface); +/* IBindCtx functions */ +static HRESULT WINAPI BindCtxImpl_RegisterObjectBound(IBindCtx* iface,IUnknown* punk); +static HRESULT WINAPI BindCtxImpl_RevokeObjectBound(IBindCtx* iface, IUnknown* punk); +static HRESULT WINAPI BindCtxImpl_ReleaseBoundObjects(IBindCtx* iface); +static HRESULT WINAPI BindCtxImpl_SetBindOptions(IBindCtx* iface,BIND_OPTS *pbindopts); +static HRESULT WINAPI BindCtxImpl_GetBindOptions(IBindCtx* iface,BIND_OPTS *pbindopts); +static HRESULT WINAPI BindCtxImpl_GetRunningObjectTable(IBindCtx* iface,IRunningObjectTable** pprot); +static HRESULT WINAPI BindCtxImpl_RegisterObjectParam(IBindCtx* iface,LPOLESTR pszkey, IUnknown* punk); +static HRESULT WINAPI BindCtxImpl_GetObjectParam(IBindCtx* iface,LPOLESTR pszkey, IUnknown** punk); +static HRESULT WINAPI BindCtxImpl_EnumObjectParam(IBindCtx* iface,IEnumString** ppenum); +static HRESULT WINAPI BindCtxImpl_RevokeObjectParam(IBindCtx* iface,LPOLESTR pszkey); +/* Local functions*/ +HRESULT WINAPI BindCtxImpl_Construct(BindCtxImpl* This); +HRESULT WINAPI BindCtxImpl_Destroy(BindCtxImpl* This); +HRESULT WINAPI BindCtxImpl_GetObjectIndex(BindCtxImpl* This,IUnknown* punk,LPOLESTR pszkey,DWORD *index); + +/* Virtual function table for the BindCtx class. */ +static IBindCtxVtbl VT_BindCtxImpl = + { + BindCtxImpl_QueryInterface, + BindCtxImpl_AddRef, + BindCtxImpl_Release, + BindCtxImpl_RegisterObjectBound, + BindCtxImpl_RevokeObjectBound, + BindCtxImpl_ReleaseBoundObjects, + BindCtxImpl_SetBindOptions, + BindCtxImpl_GetBindOptions, + BindCtxImpl_GetRunningObjectTable, + BindCtxImpl_RegisterObjectParam, + BindCtxImpl_GetObjectParam, + BindCtxImpl_EnumObjectParam, + BindCtxImpl_RevokeObjectParam +}; + +/********************************************************************** ********* + * BindCtx_QueryInterface + ************************************************************************ *******/ +HRESULT WINAPI BindCtxImpl_QueryInterface(IBindCtx* iface,REFIID riid,void** ppvObject) +{ + BindCtxImpl *This = (BindCtxImpl *)iface; + + TRACE("(%p,%p,%p)\n",This,riid,ppvObject); + + /* Perform a sanity check on the parameters.*/ + if ( (This==0) || (ppvObject==0) ) + return E_INVALIDARG; + + /* Initialize the return parameter.*/ + *ppvObject = 0; + + /* Compare the riid with the interface IDs implemented by this object.*/ + if (IsEqualIID(&IID_IUnknown, riid)) + *ppvObject = (IBindCtx*)This; + else + if (IsEqualIID(&IID_IBindCtx, riid)) + *ppvObject = (IBindCtx*)This; + + /* Check that we obtained an interface.*/ + if ((*ppvObject)==0) + return E_NOINTERFACE; + + /* Query Interface always increases the reference count by one when it is successful */ + BindCtxImpl_AddRef(iface); + + return S_OK; +} + +/********************************************************************** ******** + * BindCtx_AddRef + ************************************************************************ ******/ +ULONG WINAPI BindCtxImpl_AddRef(IBindCtx* iface) +{ + BindCtxImpl *This = (BindCtxImpl *)iface; + + TRACE("(%p)\n",This); + + return InterlockedIncrement(&This->ref); +} + +/********************************************************************** ******** + * BindCtx_Release + ************************************************************************ ******/ +ULONG WINAPI BindCtxImpl_Release(IBindCtx* iface) +{ + BindCtxImpl *This = (BindCtxImpl *)iface; + ULONG ref; + + TRACE("(%p)\n",This); + + ref = InterlockedDecrement(&This->ref); + + if (ref == 0){ + /* release all registered objects */ + BindCtxImpl_ReleaseBoundObjects((IBindCtx*)This); + + BindCtxImpl_Destroy(This); + } + return ref; +} + + +/********************************************************************** ******** + * BindCtx_Construct (local function) + ************************************************************************ *******/ +HRESULT WINAPI BindCtxImpl_Construct(BindCtxImpl* This) +{ + TRACE("(%p)\n",This); + + /* Initialize the virtual function table.*/ + This->lpVtbl = &VT_BindCtxImpl; + This->ref = 0; + + /* Initialize the BIND_OPTS2 structure */ + This->bindOption2.cbStruct = sizeof(BIND_OPTS2); + This->bindOption2.grfFlags = 0; + This->bindOption2.grfMode = STGM_READWRITE; + This->bindOption2.dwTickCountDeadline = 0; + + This->bindOption2.dwTrackFlags = 0; + This->bindOption2.dwClassContext = CLSCTX_SERVER; + This->bindOption2.locale = 1033; + This->bindOption2.pServerInfo = 0; + + /* Initialize the bindctx table */ + This->bindCtxTableSize=BLOCK_TAB_SIZE; + This->bindCtxTableLastIndex=0; + This->bindCtxTable= HeapAlloc(GetProcessHeap(), 0,This->bindCtxTableSize*sizeof(BindCtxObject)); + + if (This->bindCtxTable==NULL) + return E_OUTOFMEMORY; + + return S_OK; +} + +/********************************************************************** ******** + * BindCtx_Destroy (local function) + ************************************************************************ *******/ +HRESULT WINAPI BindCtxImpl_Destroy(BindCtxImpl* This) +{ + TRACE("(%p)\n",This); + + /* free the table space memory */ + HeapFree(GetProcessHeap(),0,This->bindCtxTable); + + /* free the bindctx structure */ + HeapFree(GetProcessHeap(),0,This); + + return S_OK; +} + + +/********************************************************************** ******** + * BindCtx_RegisterObjectBound + ************************************************************************ ******/ +HRESULT WINAPI BindCtxImpl_RegisterObjectBound(IBindCtx* iface,IUnknown* punk) +{ + BindCtxImpl *This = (BindCtxImpl *)iface; + DWORD lastIndex=This->bindCtxTableLastIndex; + + TRACE("(%p,%p)\n",This,punk); + + if (punk==NULL) + return E_POINTER; + + IUnknown_AddRef(punk); + + /* put the object in the first free element in the table */ + This->bindCtxTable[lastIndex].pObj = punk; + This->bindCtxTable[lastIndex].pkeyObj = NULL; + This->bindCtxTable[lastIndex].regType = 0; + lastIndex= ++This->bindCtxTableLastIndex; + + if (lastIndex == This->bindCtxTableSize){ /* the table is full so it must be resized */ + [truncated at 1000 lines; 38414 more skipped]