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,ppmkReduced);
+
+    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,pchEaten,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**)ppmk);
+
+    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]