Sync to Wine-20050725:
authorGé van Geldorp <ge@gse.nl>
Fri, 12 Aug 2005 17:19:46 +0000 (17:19 +0000)
committerGé van Geldorp <ge@gse.nl>
Fri, 12 Aug 2005 17:19:46 +0000 (17:19 +0000)
Robert Shearman <rob@codeweavers.com>
- Marshal return value from IRemUnknown_RemQueryInterface.
- We should be starting with 1 reference.
- IRpcStubBuffer_Disconnect can be called more than once.
- Silence now noisy error messages caused by changes in the way we call
  ipid_to_stubmanager. Move the error message to the one place it is
  needed.
- By-pass the RPC runtime if possible when calling an STA by posting a
  message directly to the apartment window for it to process. Fixes a
  deadlock in InstallShield caused by having to create a thread when
  freeing an object that comes from an STA apartment. Added tests that
  fail without this fix.
- Hack around broken state management so InstallShield works.
- Delete the stub manager outside of the apartment critical section
  because the deletion may require the object to re-enter the
  apartment.
- Always query for the correct stub interface, otherwise we will be
  pointing to the completely wrong object when a proxy does a
  queryinterface.
- Remove assumption that the stub buffer will handle the lifetime of
  the object.
Alex Villacis Lasso <a_villacis@palosanto.com>
- Initialize RegisteredClass properly in CoRegisterClassObject to
  prevent crash in CoRevokeClassObject when accessing (uninitialized)
  pMarshalledData.
Mike McCormack <mike@codeweavers.com>
- Fix gcc 4.0 -Wpointer-sign warnings.
Vitaly Lipatov <lav@etersoft.ru>
- Added some documentation.
Stefan Huehner <stefan@huehner.org>
- Fix some missing-declarations warnings.
Marcus Meissner <meissner@suse.de>
- 16bit interfaces are cdecl, so drop the WINAPI.
- 16bit COM interfaces are cdecl, not WINAPI.
- OleInitializeWOW gets 2 arguments.
- Added OleSetMenuDescriptor16 stub.
Marcus Meissner <marcus@jet.franken.de>
- Implemented IsValidInterface16, CoMemAlloc.
  Added debug to HGLOBALLockBytes16_QueryInterface.

svn path=/trunk/; revision=17332

38 files changed:
reactos/lib/ole32/antimoniker.c
reactos/lib/ole32/bindctx.c
reactos/lib/ole32/clipboard.c
reactos/lib/ole32/compobj.c
reactos/lib/ole32/compobj.spec
reactos/lib/ole32/compobj_private.h
reactos/lib/ole32/compositemoniker.c
reactos/lib/ole32/datacache.c
reactos/lib/ole32/defaulthandler.c
reactos/lib/ole32/errorinfo.c
reactos/lib/ole32/filemoniker.c
reactos/lib/ole32/ftmarshal.c
reactos/lib/ole32/hglobalstream.c
reactos/lib/ole32/ifs.c
reactos/lib/ole32/ifs.h
reactos/lib/ole32/itemmoniker.c
reactos/lib/ole32/marshal.c
reactos/lib/ole32/memlockbytes.c
reactos/lib/ole32/memlockbytes16.c
reactos/lib/ole32/moniker.c
reactos/lib/ole32/ole16.c
reactos/lib/ole32/ole2.c
reactos/lib/ole32/ole2.spec
reactos/lib/ole32/ole2_16.c
reactos/lib/ole32/ole2conv.spec
reactos/lib/ole32/ole2nls.spec
reactos/lib/ole32/ole2prox.spec
reactos/lib/ole32/ole2thk.spec
reactos/lib/ole32/ole32.spec
reactos/lib/ole32/oleobj.c
reactos/lib/ole32/oleproxy.c
reactos/lib/ole32/rpc.c
reactos/lib/ole32/stg_prop.c
reactos/lib/ole32/storage.c
reactos/lib/ole32/storage.spec
reactos/lib/ole32/storage32.c
reactos/lib/ole32/storage32.h
reactos/lib/ole32/stubmanager.c

index 8ec4513..6993b42 100644 (file)
@@ -49,7 +49,7 @@ typedef struct AntiMonikerImpl{
      */
     const IROTDataVtbl*  lpvtbl2;  /* VTable relative to the IROTData interface.*/
 
-    ULONG ref; /* reference counter for this object */
+    LONG ref; /* reference counter for this object */
 
 } AntiMonikerImpl;
 
index 3d19e06..6b427f4 100644 (file)
@@ -52,7 +52,7 @@ typedef struct BindCtxImpl{
 
     const IBindCtxVtbl *lpVtbl; /* VTable relative to the IBindCtx interface.*/
 
-    ULONG ref; /* reference counter for this object */
+    LONG 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 */
index 4368ef5..75b706d 100644 (file)
@@ -122,7 +122,7 @@ struct OLEClipbrd
   /*
    * Reference count of this object
    */
-  ULONG                      ref;
+  LONG                       ref;
 };
 
 typedef struct OLEClipbrd OLEClipbrd;
@@ -145,7 +145,7 @@ typedef struct
   /*
    * Reference count of this object
    */
-  DWORD                        ref;
+  LONG                         ref;
 
   /*
    * IUnknown implementation of the parent data object.
index cf58207..f0a72d4 100644 (file)
@@ -1403,6 +1403,8 @@ HRESULT WINAPI CoRegisterClassObject(
   newClass->classIdentifier = *rclsid;
   newClass->runContext      = dwClsContext;
   newClass->connectFlags    = flags;
+  newClass->pMarshaledData  = NULL;
+
   /*
    * Use the address of the chain node as the cookie since we are sure it's
    * unique. FIXME: not on 64-bit platforms.
index 0a5384a..f218cce 100644 (file)
-1 pascal CoBuildVersion() CoBuildVersion\r
-2 pascal CoInitialize(long) CoInitialize16\r
-3 pascal CoUninitialize() CoUninitialize16\r
-4 pascal CoGetMalloc(long ptr) CoGetMalloc16\r
-5 pascal CoRegisterClassObject(ptr ptr long long ptr) CoRegisterClassObject16\r
-6 pascal CoRevokeClassObject(long) CoRevokeClassObject16\r
-7 pascal CoGetClassObject(ptr long ptr ptr ptr) CoGetClassObject\r
-8 stub COMARSHALINTERFACE\r
-9 stub COUNMARSHALINTERFACE\r
-10 stub COLOADLIBRARY\r
-11 stub COFREELIBRARY\r
-12 stub COFREEALLLIBRARIES\r
-13 pascal CoCreateInstance(ptr ptr long ptr ptr) CoCreateInstance\r
-14 stub STRINGFROMIID\r
-15 pascal CoDisconnectObject(ptr long) CoDisconnectObject\r
-16 stub CORELEASEMARSHALDATA\r
-17 pascal -ret16 CoFreeUnusedLibraries() CoFreeUnusedLibraries\r
-18 pascal -ret16 IsEqualGUID(ptr ptr) IsEqualGUID16\r
-19 pascal StringFromCLSID(ptr ptr) StringFromCLSID16\r
-20 pascal CLSIDFromString(str ptr) CLSIDFromString16\r
-21 stub ISVALIDPTRIN\r
-22 stub ISVALIDPTROUT\r
-23 stub ISVALIDINTERFACE\r
-24 stub ISVALIDIID\r
-25 stub RESULTFROMSCODE\r
-26 stub GETSCODE\r
-27 pascal CoRegisterMessageFilter(ptr ptr) CoRegisterMessageFilter16\r
-28 stub COISHANDLERCONNECTED\r
-29 stub SHRADDREF\r
-30 pascal -ret16 CoFileTimeToDosDateTime(ptr ptr ptr) CoFileTimeToDosDateTime16\r
-31 pascal -ret16 CoDosDateTimeToFileTime(word word ptr) CoDosDateTimeToFileTime16\r
-32 stub COMARSHALHRESULT\r
-33 stub COUNMARSHALHRESULT\r
-34 pascal CoGetCurrentProcess() CoGetCurrentProcess\r
-35 stub SHRCREATE\r
-36 stub COISOLE1CLASS\r
-37 stub _GUID_NULL\r
-38 stub _IID_IUNKNOWN\r
-39 stub _IID_ICLASSFACTORY\r
-40 stub _IID_IMALLOC\r
-41 stub _IID_IMARSHAL\r
-42 stub _IID_IRPCCHANNEL\r
-43 stub _IID_IRPCSTUB\r
-44 stub _IID_ISTUBMANAGER\r
-45 stub _IID_IRPCPROXY\r
-46 stub _IID_IPROXYMANAGER\r
-47 stub _IID_IPSFACTORY\r
-48 stub _IID_ILOCKBYTES\r
-49 stub _IID_ISTORAGE\r
-50 stub _IID_ISTREAM\r
-51 stub _IID_IENUMSTATSTG\r
-52 stub _IID_IBINDCTX\r
-53 stub _IID_IMONIKER\r
-54 stub _IID_IRUNNINGOBJECTTABLE\r
-55 stub _IID_IINTERNALMONIKER\r
-56 stub _IID_IROOTSTORAGE\r
-57 stub _IID_IDFRESERVED1\r
-58 stub _IID_IDFRESERVED2\r
-59 stub _IID_IDFRESERVED3\r
-60 stub _IID_IMESSAGEFILTER\r
-61 pascal CLSIDFromProgID(str ptr) CLSIDFromProgID16\r
-62 pascal ProgIDFromCLSID(ptr ptr) ProgIDFromCLSID16\r
-63 pascal CoLockObjectExternal(segptr word word) CoLockObjectExternal16\r
-64 stub _CLSID_STDMARSHAL\r
-65 stub COGETTREATASCLASS\r
-66 stub COTREATASCLASS\r
-67 stub COGETSTANDARDMARSHAL\r
-68 stub PROPAGATERESULT\r
-69 stub IIDFROMSTRING\r
-70 stub _IID_ISTDMARSHALINFO\r
-71 pascal CoCreateStandardMalloc(long ptr) CoCreateStandardMalloc16\r
-72 stub _IID_IEXTERNALCONNECTION\r
-73 stub COCREATEGUID\r
-75 stub FNASSERT\r
-76 pascal StringFromGUID2(ptr ptr word) StringFromGUID2\r
-77 stub COGETCLASSEXT\r
-78 stub OLE1CLASSFROMCLSID2\r
-79 stub CLSIDFROMOLE1CLASS\r
-80 stub COOPENCLASSKEY\r
-81 stub GUIDFROMSTRING\r
-82 pascal CoFileTimeNow(ptr) CoFileTimeNow\r
-83 stub REMALLOCOID\r
-84 stub REMFREEOID\r
-85 stub REMCREATEREMOTEHANDLER\r
-86 stub REMCONNECTTOOBJECT\r
-87 stub REMGETINFOFORCID\r
-88 stub LRPCCALL\r
-89 stub LRPCDISPATCH\r
-90 stub LRPCREGISTERMONITOR\r
-91 stub LRPCREVOKEMONITOR\r
-92 stub LRPCGETTHREADWINDOW\r
-93 stub TIMERCALLBACKPROC\r
-94 pascal LookupETask(ptr ptr) LookupETask16\r
-95 pascal -ret16 SetETask(word ptr) SetETask16\r
-96 stub LRPCFREEMONITORDATA\r
-97 stub REMLOOKUPSHUNK\r
-98 stub SHRGETSIZE\r
-99 stub CALLTHKMGRUNINITIALIZE\r
-100 stub ??0CARRAYFVALUE@@REC@KI@Z\r
-101 stub ??1CARRAYFVALUE@@REC@XZ\r
-102 stub ?ASSERTVALID@CARRAYFVALUE@@RFCXXZ\r
-103 stub ?FREEEXTRA@CARRAYFVALUE@@RECXXZ\r
-104 stub ?_GETAT@CARRAYFVALUE@@RFCPEXH@Z\r
-105 stub ?GETSIZE@CARRAYFVALUE@@RFCHXZ\r
-106 stub ?REMOVEALL@CARRAYFVALUE@@RECXXZ\r
-107 stub SHRDESTROY\r
-108 stub ?INDEXOF@CARRAYFVALUE@@RECHPEXII@Z\r
-109 stub ?INSERTAT@CARRAYFVALUE@@RECHHPEXH@Z\r
-110 stub COSETSTATE\r
-111 stub ?REMOVEAT@CARRAYFVALUE@@RECXHH@Z\r
-112 stub ?SETAT@CARRAYFVALUE@@RECXHPEX@Z\r
-113 stub ?SETATGROW@CARRAYFVALUE@@RECHHPEX@Z\r
-114 stub ?SETSIZE@CARRAYFVALUE@@RECHHH@Z\r
-115 pascal CoGetState(ptr) CoGetState16\r
-116 pascal DllEntryPoint(long word word word long word) COMPOBJ_DllEntryPoint\r
-117 stub ?RELEASE@CSTDMALLOC@@VEAKXZ\r
-118 stub ?ALLOC@CSTDMALLOC@@VEAPEXK@Z\r
-119 stub SHRRELEASE\r
-120 stub ?GETASSOCAT@CMAPKEYTOVALUE@@BFCPEUCASSOC@1@PEXIAEI@Z\r
-121 stub ?SETASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z\r
-122 stub ??1CMAPKEYTOVALUE@@REC@XZ\r
-123 stub ?GETASSOCKEYPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEXPEI@Z\r
-124 stub ?NEWASSOC@CMAPKEYTOVALUE@@BECPEUCASSOC@1@IPEXI0@Z\r
-125 stub ?SIZEASSOC@CMAPKEYTOVALUE@@BFCIXZ\r
-126 stub ?FREEASSOC@CMAPKEYTOVALUE@@BECXPEUCASSOC@1@@Z\r
-127 stub ?GETSTARTPOSITION@CMAPKEYTOVALUE@@RFCPEXXZ\r
-128 stub ?GETNEXTASSOC@CMAPKEYTOVALUE@@RFCXPEPEXPEXPEI1@Z\r
-129 stub ?COMPAREASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z\r
-130 stub ?REMOVEHKEY@CMAPKEYTOVALUE@@RECHK@Z\r
-131 stub ?GETHKEY@CMAPKEYTOVALUE@@RFCKPEXI@Z\r
-132 stub ?GETCOUNT@CMAPKEYTOVALUE@@RFCHXZ\r
-133 stub ?LOOKUP@CMAPKEYTOVALUE@@RFCHPEXI0@Z\r
-134 stub ?GETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z\r
-135 stub ?REMOVEKEY@CMAPKEYTOVALUE@@RECHPEXI@Z\r
-136 stub ?REMOVEALL@CMAPKEYTOVALUE@@RECXXZ\r
-137 stub SHRALLOC\r
-138 stub ?FREEASSOCKEY@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@@Z\r
-139 stub ?SETAT@CMAPKEYTOVALUE@@RECHPEXI0@Z\r
-140 stub ?LOOKUPHKEY@CMAPKEYTOVALUE@@RFCHKPEX@Z\r
-141 stub ?ASSERTVALID@CMAPKEYTOVALUE@@RFCXXZ\r
-142 stub ?SETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z\r
-143 stub ?SETATHKEY@CMAPKEYTOVALUE@@RECHKPEX@Z\r
-144 stub ??0CMAPKEYTOVALUE@@REC@KIIHP7CIPEXI@ZI@Z\r
-145 stub ?INITHASHTABLE@CMAPKEYTOVALUE@@BECHXZ\r
-146 stub ?GETASSOCVALUEPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEX@Z\r
-147 stub ?LOOKUPADD@CMAPKEYTOVALUE@@RFCHPEXI0@Z\r
-148 stub MKVDEFAULTHASHKEY\r
-149 stub DELETE16\r
-150 stub COMEMCTXOF\r
-151 stub COMEMALLOC\r
-152 stub COMEMFREE\r
-153 stub SHRREALLOC\r
-154 stub ___EXPORTEDSTUB\r
-155 stub LRPCREGISTERWIN32SMONITOR\r
-156 stub MYREMGETINFOFORCID\r
-157 stub SHRFREE\r
-158 stub OPNEW16\r
-159 stub ADDCOINFO\r
-160 stub CORUNMODALLOOP\r
-161 stub COHANDLEINCOMINGCALL\r
-162 stub COSETACKSTATE\r
-163 stub SHRDIDALLOC\r
-164 stub ?GETAT@CARRAYFVALUE@@RFCPEXH@Z\r
-165 stub ?GETUPPERBOUND@CARRAYFVALUE@@RFCHXZ\r
-166 stub OPDELETE16\r
-167 stub ?GETSIZEVALUE@CARRAYFVALUE@@RFCHXZ\r
-168 stub ?PROXY1632ADDREF@@ZAKPEVCPROXY1632@@@Z\r
-# FIXME: 169 is a duplicate of 97\r
-169 stub REMLOOKUPSHUNK_dup\r
-170 stub ?ISEMPTY@CMAPKEYTOVALUE@@RFCHXZ\r
-171 stub ?FREE@CSTDMALLOC@@VEAXPEX@Z\r
-172 stub CALLTHKMGRINITIALIZE\r
-173 stub ?REALLOC@CSTDMALLOC@@VEAPEXPEXK@Z\r
-174 stub ?SM16RHQI@@ZAPEXPEVCSM16RELEASEHANDLER@@AFUGUID@@PEPEX@Z\r
-175 stub ?PROXY1632METHOD10@@ZAKPEVCPROXY1632@@@Z\r
-# FIXME: 176 is a duplicate of 154\r
-176 stub ___EXPORTEDSTUB_dup\r
-177 stub ?PROXY1632METHOD20@@ZAKPEVCPROXY1632@@@Z\r
-178 stub ?PROXY1632METHOD11@@ZAKPEVCPROXY1632@@@Z\r
-179 stub ?PROXY1632METHOD30@@ZAKPEVCPROXY1632@@@Z\r
-180 stub ?PROXY1632METHOD21@@ZAKPEVCPROXY1632@@@Z\r
-181 stub ?PROXY1632METHOD12@@ZAKPEVCPROXY1632@@@Z\r
-182 stub ?PROXY1632METHOD31@@ZAKPEVCPROXY1632@@@Z\r
-183 stub ?PROXY1632METHOD22@@ZAKPEVCPROXY1632@@@Z\r
-184 stub ?PROXY1632METHOD13@@ZAKPEVCPROXY1632@@@Z\r
-185 stub ?GETSIZE@CSTDMALLOC@@VEAKPEX@Z\r
-186 stub ?PROXY1632METHOD23@@ZAKPEVCPROXY1632@@@Z\r
-187 stub ?PROXY1632METHOD14@@ZAKPEVCPROXY1632@@@Z\r
-188 stub ?PROXY1632METHOD24@@ZAKPEVCPROXY1632@@@Z\r
-189 stub ?PROXY1632METHOD15@@ZAKPEVCPROXY1632@@@Z\r
-190 stub ?PROXY1632METHOD25@@ZAKPEVCPROXY1632@@@Z\r
-191 stub ?PROXY1632METHOD16@@ZAKPEVCPROXY1632@@@Z\r
-192 stub ?PROXY1632METHOD26@@ZAKPEVCPROXY1632@@@Z\r
-193 stub ?PROXY1632METHOD17@@ZAKPEVCPROXY1632@@@Z\r
-194 stub ?PROXY1632METHOD27@@ZAKPEVCPROXY1632@@@Z\r
-195 stub ?PROXY1632METHOD18@@ZAKPEVCPROXY1632@@@Z\r
-196 stub ?PROXY1632METHOD28@@ZAKPEVCPROXY1632@@@Z\r
-197 stub ?ADDREF@CSTDMALLOC@@VEAKXZ\r
-198 stub ?PROXY1632METHOD19@@ZAKPEVCPROXY1632@@@Z\r
-199 stub ?PROXY1632METHOD29@@ZAKPEVCPROXY1632@@@Z\r
-200 stub CALL32INITIALIZE\r
-201 pascal CALLOBJECTINWOW(ptr ptr) CallObjectInWOW\r
-203 stub CALLOBJECTINWOWCHECKINIT\r
-204 stub CALLOBJECTINWOWCHECKTHKMGR\r
-205 stub CONVERTHR1632\r
-206 stub CONVERTHR3216\r
-207 stub ADDAPPCOMPATFLAG\r
-\r
-# WINE internal relays (for Win16 interfaces)\r
-500 cdecl IMalloc16_QueryInterface(ptr ptr ptr) IMalloc16_fnQueryInterface\r
-501 cdecl IMalloc16_AddRef(ptr) IMalloc16_fnAddRef\r
-502 cdecl IMalloc16_Release(ptr) IMalloc16_fnRelease\r
-503 cdecl IMalloc16_Alloc(ptr long) IMalloc16_fnAlloc\r
-504 cdecl IMalloc16_Realloc(ptr segptr long) IMalloc16_fnRealloc\r
-505 cdecl IMalloc16_Free(ptr segptr) IMalloc16_fnFree\r
-506 cdecl IMalloc16_GetSize(ptr segptr) IMalloc16_fnGetSize\r
-507 cdecl IMalloc16_DidAlloc(ptr segptr) IMalloc16_fnDidAlloc\r
-508 cdecl IMalloc16_HeapMinimize(ptr) IMalloc16_fnHeapMinimize\r
+1 pascal CoBuildVersion() CoBuildVersion
+2 pascal CoInitialize(long) CoInitialize16
+3 pascal CoUninitialize() CoUninitialize16
+4 pascal CoGetMalloc(long ptr) CoGetMalloc16
+5 pascal CoRegisterClassObject(ptr ptr long long ptr) CoRegisterClassObject16
+6 pascal CoRevokeClassObject(long) CoRevokeClassObject16
+7 pascal CoGetClassObject(ptr long ptr ptr ptr) CoGetClassObject
+8 stub COMARSHALINTERFACE
+9 stub COUNMARSHALINTERFACE
+10 stub COLOADLIBRARY
+11 stub COFREELIBRARY
+12 stub COFREEALLLIBRARIES
+13 pascal CoCreateInstance(ptr ptr long ptr ptr) CoCreateInstance
+14 stub STRINGFROMIID
+15 pascal CoDisconnectObject(ptr long) CoDisconnectObject
+16 stub CORELEASEMARSHALDATA
+17 pascal -ret16 CoFreeUnusedLibraries() CoFreeUnusedLibraries
+18 pascal -ret16 IsEqualGUID(ptr ptr) IsEqualGUID16
+19 pascal StringFromCLSID(ptr ptr) StringFromCLSID16
+20 pascal CLSIDFromString(str ptr) CLSIDFromString16
+21 stub ISVALIDPTRIN
+22 stub ISVALIDPTROUT
+23 pascal IsValidInterface(segptr) IsValidInterface16
+24 stub ISVALIDIID
+25 stub RESULTFROMSCODE
+26 stub GETSCODE
+27 pascal CoRegisterMessageFilter(ptr ptr) CoRegisterMessageFilter16
+28 stub COISHANDLERCONNECTED
+29 stub SHRADDREF
+30 pascal -ret16 CoFileTimeToDosDateTime(ptr ptr ptr) CoFileTimeToDosDateTime16
+31 pascal -ret16 CoDosDateTimeToFileTime(word word ptr) CoDosDateTimeToFileTime16
+32 stub COMARSHALHRESULT
+33 stub COUNMARSHALHRESULT
+34 pascal CoGetCurrentProcess() CoGetCurrentProcess
+35 stub SHRCREATE
+36 stub COISOLE1CLASS
+37 stub _GUID_NULL
+38 stub _IID_IUNKNOWN
+39 stub _IID_ICLASSFACTORY
+40 stub _IID_IMALLOC
+41 stub _IID_IMARSHAL
+42 stub _IID_IRPCCHANNEL
+43 stub _IID_IRPCSTUB
+44 stub _IID_ISTUBMANAGER
+45 stub _IID_IRPCPROXY
+46 stub _IID_IPROXYMANAGER
+47 stub _IID_IPSFACTORY
+48 stub _IID_ILOCKBYTES
+49 stub _IID_ISTORAGE
+50 stub _IID_ISTREAM
+51 stub _IID_IENUMSTATSTG
+52 stub _IID_IBINDCTX
+53 stub _IID_IMONIKER
+54 stub _IID_IRUNNINGOBJECTTABLE
+55 stub _IID_IINTERNALMONIKER
+56 stub _IID_IROOTSTORAGE
+57 stub _IID_IDFRESERVED1
+58 stub _IID_IDFRESERVED2
+59 stub _IID_IDFRESERVED3
+60 stub _IID_IMESSAGEFILTER
+61 pascal CLSIDFromProgID(str ptr) CLSIDFromProgID16
+62 pascal ProgIDFromCLSID(ptr ptr) ProgIDFromCLSID16
+63 pascal CoLockObjectExternal(segptr word word) CoLockObjectExternal16
+64 stub _CLSID_STDMARSHAL
+65 stub COGETTREATASCLASS
+66 stub COTREATASCLASS
+67 stub COGETSTANDARDMARSHAL
+68 stub PROPAGATERESULT
+69 stub IIDFROMSTRING
+70 stub _IID_ISTDMARSHALINFO
+71 pascal CoCreateStandardMalloc(long ptr) CoCreateStandardMalloc16
+72 stub _IID_IEXTERNALCONNECTION
+73 stub COCREATEGUID
+75 stub FNASSERT
+76 pascal StringFromGUID2(ptr ptr word) StringFromGUID2
+77 stub COGETCLASSEXT
+78 stub OLE1CLASSFROMCLSID2
+79 stub CLSIDFROMOLE1CLASS
+80 stub COOPENCLASSKEY
+81 stub GUIDFROMSTRING
+82 pascal CoFileTimeNow(ptr) CoFileTimeNow
+83 stub REMALLOCOID
+84 stub REMFREEOID
+85 stub REMCREATEREMOTEHANDLER
+86 stub REMCONNECTTOOBJECT
+87 stub REMGETINFOFORCID
+88 stub LRPCCALL
+89 stub LRPCDISPATCH
+90 stub LRPCREGISTERMONITOR
+91 stub LRPCREVOKEMONITOR
+92 stub LRPCGETTHREADWINDOW
+93 stub TIMERCALLBACKPROC
+94 pascal LookupETask(ptr ptr) LookupETask16
+95 pascal -ret16 SetETask(word ptr) SetETask16
+96 stub LRPCFREEMONITORDATA
+97 stub REMLOOKUPSHUNK
+98 stub SHRGETSIZE
+99 stub CALLTHKMGRUNINITIALIZE
+100 stub ??0CARRAYFVALUE@@REC@KI@Z
+101 stub ??1CARRAYFVALUE@@REC@XZ
+102 stub ?ASSERTVALID@CARRAYFVALUE@@RFCXXZ
+103 stub ?FREEEXTRA@CARRAYFVALUE@@RECXXZ
+104 stub ?_GETAT@CARRAYFVALUE@@RFCPEXH@Z
+105 stub ?GETSIZE@CARRAYFVALUE@@RFCHXZ
+106 stub ?REMOVEALL@CARRAYFVALUE@@RECXXZ
+107 stub SHRDESTROY
+108 stub ?INDEXOF@CARRAYFVALUE@@RECHPEXII@Z
+109 stub ?INSERTAT@CARRAYFVALUE@@RECHHPEXH@Z
+110 stub COSETSTATE
+111 stub ?REMOVEAT@CARRAYFVALUE@@RECXHH@Z
+112 stub ?SETAT@CARRAYFVALUE@@RECXHPEX@Z
+113 stub ?SETATGROW@CARRAYFVALUE@@RECHHPEX@Z
+114 stub ?SETSIZE@CARRAYFVALUE@@RECHHH@Z
+115 pascal CoGetState(ptr) CoGetState16
+116 pascal DllEntryPoint(long word word word long word) COMPOBJ_DllEntryPoint
+117 stub ?RELEASE@CSTDMALLOC@@VEAKXZ
+118 stub ?ALLOC@CSTDMALLOC@@VEAPEXK@Z
+119 stub SHRRELEASE
+120 stub ?GETASSOCAT@CMAPKEYTOVALUE@@BFCPEUCASSOC@1@PEXIAEI@Z
+121 stub ?SETASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z
+122 stub ??1CMAPKEYTOVALUE@@REC@XZ
+123 stub ?GETASSOCKEYPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEXPEI@Z
+124 stub ?NEWASSOC@CMAPKEYTOVALUE@@BECPEUCASSOC@1@IPEXI0@Z
+125 stub ?SIZEASSOC@CMAPKEYTOVALUE@@BFCIXZ
+126 stub ?FREEASSOC@CMAPKEYTOVALUE@@BECXPEUCASSOC@1@@Z
+127 stub ?GETSTARTPOSITION@CMAPKEYTOVALUE@@RFCPEXXZ
+128 stub ?GETNEXTASSOC@CMAPKEYTOVALUE@@RFCXPEPEXPEXPEI1@Z
+129 stub ?COMPAREASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z
+130 stub ?REMOVEHKEY@CMAPKEYTOVALUE@@RECHK@Z
+131 stub ?GETHKEY@CMAPKEYTOVALUE@@RFCKPEXI@Z
+132 stub ?GETCOUNT@CMAPKEYTOVALUE@@RFCHXZ
+133 stub ?LOOKUP@CMAPKEYTOVALUE@@RFCHPEXI0@Z
+134 stub ?GETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z
+135 stub ?REMOVEKEY@CMAPKEYTOVALUE@@RECHPEXI@Z
+136 stub ?REMOVEALL@CMAPKEYTOVALUE@@RECXXZ
+137 stub SHRALLOC
+138 stub ?FREEASSOCKEY@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@@Z
+139 stub ?SETAT@CMAPKEYTOVALUE@@RECHPEXI0@Z
+140 stub ?LOOKUPHKEY@CMAPKEYTOVALUE@@RFCHKPEX@Z
+141 stub ?ASSERTVALID@CMAPKEYTOVALUE@@RFCXXZ
+142 stub ?SETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z
+143 stub ?SETATHKEY@CMAPKEYTOVALUE@@RECHKPEX@Z
+144 stub ??0CMAPKEYTOVALUE@@REC@KIIHP7CIPEXI@ZI@Z
+145 stub ?INITHASHTABLE@CMAPKEYTOVALUE@@BECHXZ
+146 stub ?GETASSOCVALUEPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEX@Z
+147 stub ?LOOKUPADD@CMAPKEYTOVALUE@@RFCHPEXI0@Z
+148 stub MKVDEFAULTHASHKEY
+149 stub DELETE16
+150 stub COMEMCTXOF
+151 pascal CoMemAlloc(long long long)
+152 stub COMEMFREE
+153 stub SHRREALLOC
+154 stub ___EXPORTEDSTUB
+155 stub LRPCREGISTERWIN32SMONITOR
+156 stub MYREMGETINFOFORCID
+157 stub SHRFREE
+158 stub OPNEW16
+159 stub ADDCOINFO
+160 stub CORUNMODALLOOP
+161 stub COHANDLEINCOMINGCALL
+162 stub COSETACKSTATE
+163 stub SHRDIDALLOC
+164 stub ?GETAT@CARRAYFVALUE@@RFCPEXH@Z
+165 stub ?GETUPPERBOUND@CARRAYFVALUE@@RFCHXZ
+166 stub OPDELETE16
+167 stub ?GETSIZEVALUE@CARRAYFVALUE@@RFCHXZ
+168 stub ?PROXY1632ADDREF@@ZAKPEVCPROXY1632@@@Z
+# FIXME: 169 is a duplicate of 97
+169 stub REMLOOKUPSHUNK_dup
+170 stub ?ISEMPTY@CMAPKEYTOVALUE@@RFCHXZ
+171 stub ?FREE@CSTDMALLOC@@VEAXPEX@Z
+172 stub CALLTHKMGRINITIALIZE
+173 stub ?REALLOC@CSTDMALLOC@@VEAPEXPEXK@Z
+174 stub ?SM16RHQI@@ZAPEXPEVCSM16RELEASEHANDLER@@AFUGUID@@PEPEX@Z
+175 stub ?PROXY1632METHOD10@@ZAKPEVCPROXY1632@@@Z
+# FIXME: 176 is a duplicate of 154
+176 stub ___EXPORTEDSTUB_dup
+177 stub ?PROXY1632METHOD20@@ZAKPEVCPROXY1632@@@Z
+178 stub ?PROXY1632METHOD11@@ZAKPEVCPROXY1632@@@Z
+179 stub ?PROXY1632METHOD30@@ZAKPEVCPROXY1632@@@Z
+180 stub ?PROXY1632METHOD21@@ZAKPEVCPROXY1632@@@Z
+181 stub ?PROXY1632METHOD12@@ZAKPEVCPROXY1632@@@Z
+182 stub ?PROXY1632METHOD31@@ZAKPEVCPROXY1632@@@Z
+183 stub ?PROXY1632METHOD22@@ZAKPEVCPROXY1632@@@Z
+184 stub ?PROXY1632METHOD13@@ZAKPEVCPROXY1632@@@Z
+185 stub ?GETSIZE@CSTDMALLOC@@VEAKPEX@Z
+186 stub ?PROXY1632METHOD23@@ZAKPEVCPROXY1632@@@Z
+187 stub ?PROXY1632METHOD14@@ZAKPEVCPROXY1632@@@Z
+188 stub ?PROXY1632METHOD24@@ZAKPEVCPROXY1632@@@Z
+189 stub ?PROXY1632METHOD15@@ZAKPEVCPROXY1632@@@Z
+190 stub ?PROXY1632METHOD25@@ZAKPEVCPROXY1632@@@Z
+191 stub ?PROXY1632METHOD16@@ZAKPEVCPROXY1632@@@Z
+192 stub ?PROXY1632METHOD26@@ZAKPEVCPROXY1632@@@Z
+193 stub ?PROXY1632METHOD17@@ZAKPEVCPROXY1632@@@Z
+194 stub ?PROXY1632METHOD27@@ZAKPEVCPROXY1632@@@Z
+195 stub ?PROXY1632METHOD18@@ZAKPEVCPROXY1632@@@Z
+196 stub ?PROXY1632METHOD28@@ZAKPEVCPROXY1632@@@Z
+197 stub ?ADDREF@CSTDMALLOC@@VEAKXZ
+198 stub ?PROXY1632METHOD19@@ZAKPEVCPROXY1632@@@Z
+199 stub ?PROXY1632METHOD29@@ZAKPEVCPROXY1632@@@Z
+200 stub CALL32INITIALIZE
+201 pascal CALLOBJECTINWOW(ptr ptr) CallObjectInWOW
+203 stub CALLOBJECTINWOWCHECKINIT
+204 stub CALLOBJECTINWOWCHECKTHKMGR
+205 stub CONVERTHR1632
+206 stub CONVERTHR3216
+207 stub ADDAPPCOMPATFLAG
+
+# WINE internal relays (for Win16 interfaces)
+500 cdecl IMalloc16_QueryInterface(ptr ptr ptr) IMalloc16_fnQueryInterface
+501 cdecl IMalloc16_AddRef(ptr) IMalloc16_fnAddRef
+502 cdecl IMalloc16_Release(ptr) IMalloc16_fnRelease
+503 cdecl IMalloc16_Alloc(ptr long) IMalloc16_fnAlloc
+504 cdecl IMalloc16_Realloc(ptr segptr long) IMalloc16_fnRealloc
+505 cdecl IMalloc16_Free(ptr segptr) IMalloc16_fnFree
+506 cdecl IMalloc16_GetSize(ptr segptr) IMalloc16_fnGetSize
+507 cdecl IMalloc16_DidAlloc(ptr segptr) IMalloc16_fnDidAlloc
+508 cdecl IMalloc16_HeapMinimize(ptr) IMalloc16_fnHeapMinimize
index de3fcc8..3289b11 100644 (file)
@@ -112,7 +112,7 @@ struct proxy_manager
   OXID oxid;                /* object exported ID (RO) */
   OID oid;                  /* object ID (RO) */
   struct list interfaces;   /* imported interfaces (CS cs) */
-  DWORD refs;               /* proxy reference count (LOCK) */
+  LONG refs;                /* proxy reference count (LOCK) */
   CRITICAL_SECTION cs;      /* thread safety for this object and children */
   ULONG sorflags;           /* STDOBJREF flags (RO) */
   IRemUnknown *remunk;      /* proxy to IRemUnknown used for lifecycle management (CS cs) */
@@ -124,12 +124,12 @@ struct apartment
 {
   struct list entry;       
 
-  DWORD refs;              /* refcount of the apartment (LOCK) */
+  LONG  refs;              /* refcount of the apartment (LOCK) */
   DWORD model;             /* threading model (RO) */
   DWORD tid;               /* thread id (RO) */
   HANDLE thread;           /* thread handle (RO) */
   OXID oxid;               /* object exporter ID (RO) */
-  DWORD ipidc;             /* interface pointer ID counter, starts at 1 (LOCK) */
+  LONG ipidc;              /* interface pointer ID counter, starts at 1 (LOCK) */
   HWND win;                /* message window (RO) */
   CRITICAL_SECTION cs;     /* thread safety */
   LPMESSAGEFILTER filter;  /* message filter (CS cs) */
index 54cd7d4..87c483a 100644 (file)
@@ -54,7 +54,7 @@ typedef struct CompositeMonikerImpl{
      */
     const IROTDataVtbl*  lpvtbl2;  /* VTable relative to the IROTData interface.*/
 
-    ULONG ref; /* reference counter for this object */
+    LONG ref; /* reference counter for this object */
 
     IMoniker** tabMoniker; /* dynamaic table containing all components (monikers) of this composite moniker */
 
@@ -70,7 +70,7 @@ typedef struct EnumMonikerImpl{
 
     const IEnumMonikerVtbl *lpVtbl;  /* VTable relative to the IEnumMoniker interface.*/
 
-    ULONG ref; /* reference counter for this object */
+    LONG ref; /* reference counter for this object */
 
     IMoniker** tabMoniker; /* dynamic table containing the enumerated monikers */
 
index 8ee3412..f53fdb1 100644 (file)
@@ -103,7 +103,7 @@ struct DataCache
   /*
    * Reference count of this object
    */
-  ULONG ref;
+  LONG ref;
 
   /*
    * IUnknown implementation of the outer object.
index a387801..d59c3b6 100644 (file)
@@ -78,7 +78,7 @@ struct DefaultHandler
   /*
    * Reference count of this object
    */
-  ULONG ref;
+  LONG ref;
 
   /*
    * IUnknown implementation of the outer object.
index 5ac51df..dc3b41e 100644 (file)
@@ -131,7 +131,7 @@ typedef struct ErrorInfoImpl
        const IErrorInfoVtbl           *lpvtei;
        const ICreateErrorInfoVtbl     *lpvtcei;
        const ISupportErrorInfoVtbl    *lpvtsei;
-       DWORD                           ref;
+       LONG                            ref;
 
        GUID m_Guid;
        BSTR bstrSource;
index 2dcb532..a4e6a73 100644 (file)
@@ -53,7 +53,7 @@ typedef struct FileMonikerImpl{
      */
     const IROTDataVtbl*  lpvtbl2;  /* VTable relative to the IROTData interface.*/
 
-    ULONG ref; /* reference counter for this object */
+    LONG ref; /* reference counter for this object */
 
     LPOLESTR filePathName; /* path string identified by this filemoniker */
 
index 0a17b34..6c0ad73 100644 (file)
@@ -38,7 +38,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
 
 typedef struct _FTMarshalImpl {
        const IUnknownVtbl *lpVtbl;
-       DWORD ref;
+       LONG ref;
        const IMarshalVtbl *lpvtblFTM;
 
        IUnknown *pUnkOuter;
index 9895df6..ca73a22 100644 (file)
@@ -60,7 +60,7 @@ struct HGLOBALStreamImpl
   /*
    * Reference count
    */
-  ULONG                     ref;
+  LONG              ref;
 
   /*
    * Support for the stream
index f0e940b..5c087f3 100644 (file)
@@ -366,7 +366,7 @@ static const IMallocSpyVtbl VT_IMallocSpy;
 
 typedef struct {
         const IMallocSpyVtbl *lpVtbl;
-        DWORD ref;
+        LONG ref;
 } _MallocSpy;
 
 /* this is the static object instance */
index 4347659..bd95d90 100644 (file)
@@ -29,6 +29,11 @@ typedef CHAR OLECHAR16;
 typedef LPSTR LPOLESTR16;
 typedef LPCSTR LPCOLESTR16;
 
+#define STDMETHOD16CALLTYPE __cdecl
+#define STDMETHOD16(m) HRESULT (STDMETHOD16CALLTYPE *m)
+#define STDMETHOD16_(t,m) t (STDMETHOD16CALLTYPE *m)
+
+
 /***********************************************************************
  * IMalloc16 interface
  */
@@ -38,16 +43,16 @@ typedef LPCSTR LPCOLESTR16;
 DECLARE_INTERFACE_(IMalloc16,IUnknown)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
-    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD16_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD16_(ULONG,Release)(THIS) PURE;
     /*** IMalloc16 methods ***/
-    STDMETHOD_(LPVOID,Alloc)(THIS_ DWORD   cb) PURE;
-    STDMETHOD_(LPVOID,Realloc)(THIS_ LPVOID  pv, DWORD  cb) PURE;
-    STDMETHOD_(void,Free)(THIS_ LPVOID  pv) PURE;
-    STDMETHOD_(DWORD,GetSize)(THIS_ LPVOID  pv) PURE;
-    STDMETHOD_(INT16,DidAlloc)(THIS_ LPVOID  pv) PURE;
-    STDMETHOD_(LPVOID,HeapMinimize)(THIS) PURE;
+    STDMETHOD16_(LPVOID,Alloc)(THIS_ DWORD   cb) PURE;
+    STDMETHOD16_(LPVOID,Realloc)(THIS_ LPVOID  pv, DWORD  cb) PURE;
+    STDMETHOD16_(void,Free)(THIS_ LPVOID  pv) PURE;
+    STDMETHOD16_(DWORD,GetSize)(THIS_ LPVOID  pv) PURE;
+    STDMETHOD16_(INT16,DidAlloc)(THIS_ LPVOID  pv) PURE;
+    STDMETHOD16_(LPVOID,HeapMinimize)(THIS) PURE;
 };
 #undef INTERFACE
 
@@ -63,17 +68,17 @@ extern LPMALLOC16 IMalloc16_Constructor(void);
 DECLARE_INTERFACE_(ILockBytes16,IUnknown)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
-    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD16_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD16_(ULONG,Release)(THIS) PURE;
     /*** ILockBytes16 methods ***/
-    STDMETHOD(ReadAt)(THIS_ ULARGE_INTEGER ulOffset, void *pv, ULONG  cb, ULONG *pcbRead) PURE;
-    STDMETHOD(WriteAt)(THIS_ ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten) PURE;
-    STDMETHOD(Flush)(THIS) PURE;
-    STDMETHOD(SetSize)(THIS_ ULARGE_INTEGER cb) PURE;
-    STDMETHOD(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER  cb, DWORD dwLockType) PURE;
-    STDMETHOD(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER  cb, DWORD dwLockType) PURE;
-    STDMETHOD(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag) PURE;
+    STDMETHOD16(ReadAt)(THIS_ ULARGE_INTEGER ulOffset, void *pv, ULONG  cb, ULONG *pcbRead) PURE;
+    STDMETHOD16(WriteAt)(THIS_ ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten) PURE;
+    STDMETHOD16(Flush)(THIS) PURE;
+    STDMETHOD16(SetSize)(THIS_ ULARGE_INTEGER cb) PURE;
+    STDMETHOD16(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER  cb, DWORD dwLockType) PURE;
+    STDMETHOD16(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER  cb, DWORD dwLockType) PURE;
+    STDMETHOD16(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag) PURE;
 };
 #undef INTERFACE
 
@@ -98,22 +103,22 @@ typedef struct tagSTATSTG16
 DECLARE_INTERFACE_(IStream16,ISequentialStream)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
-    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD16_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD16_(ULONG,Release)(THIS) PURE;
     /*** ISequentialStream methods ***/
-    STDMETHOD_(HRESULT,Read)(THIS_ void* pv, ULONG cb, ULONG* pcbRead) PURE;
-    STDMETHOD_(HRESULT,Write)(THIS_ const void* pv, ULONG cb, ULONG* pcbWritten) PURE;
+    STDMETHOD16_(HRESULT,Read)(THIS_ void* pv, ULONG cb, ULONG* pcbRead) PURE;
+    STDMETHOD16_(HRESULT,Write)(THIS_ const void* pv, ULONG cb, ULONG* pcbWritten) PURE;
     /*** IStream16 methods ***/
-    STDMETHOD(Seek)(THIS_ LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition) PURE;
-    STDMETHOD(SetSize)(THIS_ ULARGE_INTEGER libNewSize) PURE;
-    STDMETHOD(CopyTo)(THIS_ IStream16* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten) PURE;
-    STDMETHOD(Commit)(THIS_ DWORD grfCommitFlags) PURE;
-    STDMETHOD(Revert)(THIS) PURE;
-    STDMETHOD(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE;
-    STDMETHOD(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE;
-    STDMETHOD(Stat)(THIS_ STATSTG* pstatstg, DWORD grfStatFlag) PURE;
-    STDMETHOD(Clone)(THIS_ IStream16** ppstm) PURE;
+    STDMETHOD16(Seek)(THIS_ LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition) PURE;
+    STDMETHOD16(SetSize)(THIS_ ULARGE_INTEGER libNewSize) PURE;
+    STDMETHOD16(CopyTo)(THIS_ IStream16* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten) PURE;
+    STDMETHOD16(Commit)(THIS_ DWORD grfCommitFlags) PURE;
+    STDMETHOD16(Revert)(THIS) PURE;
+    STDMETHOD16(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE;
+    STDMETHOD16(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE;
+    STDMETHOD16(Stat)(THIS_ STATSTG* pstatstg, DWORD grfStatFlag) PURE;
+    STDMETHOD16(Clone)(THIS_ IStream16** ppstm) PURE;
 };
 #undef INTERFACE
 
@@ -125,25 +130,25 @@ typedef OLECHAR16 **SNB16;
 DECLARE_INTERFACE_(IStorage16,IUnknown)
 {
     /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
-    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD16_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD16_(ULONG,Release)(THIS) PURE;
     /*** IStorage16 methods ***/
-    STDMETHOD_(HRESULT,CreateStream)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream16** ppstm) PURE;
-    STDMETHOD_(HRESULT,OpenStream)(THIS_ LPCOLESTR16 pwcsName, void* reserved1, DWORD grfMode, DWORD reserved2, IStream16** ppstm) PURE;
-    STDMETHOD_(HRESULT,CreateStorage)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage16** ppstg) PURE;
-    STDMETHOD_(HRESULT,OpenStorage)(THIS_ LPCOLESTR16 pwcsName, IStorage16* pstgPriority, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16** ppstg) PURE;
-    STDMETHOD_(HRESULT,CopyTo)(THIS_ DWORD ciidExclude, const IID* rgiidExclude, SNB16 snbExclude, IStorage16* pstgDest) PURE;
-    STDMETHOD_(HRESULT,MoveElementTo)(THIS_ LPCOLESTR16 pwcsName, IStorage16* pstgDest, LPCOLESTR16 pwcsNewName, DWORD grfFlags) PURE;
-    STDMETHOD_(HRESULT,Commit)(THIS_ DWORD grfCommitFlags) PURE;
-    STDMETHOD_(HRESULT,Revert)(THIS) PURE;
-    STDMETHOD_(HRESULT,EnumElements)(THIS_ DWORD reserved1, void* reserved2, DWORD reserved3, IEnumSTATSTG** ppenum) PURE;
-    STDMETHOD_(HRESULT,DestroyElement)(THIS_ LPCOLESTR16 pwcsName) PURE;
-    STDMETHOD_(HRESULT,RenameElement)(THIS_ LPCOLESTR16 pwcsOldName, LPCOLESTR16 pwcsNewName) PURE;
-    STDMETHOD_(HRESULT,SetElementTimes)(THIS_ LPCOLESTR16 pwcsName, const FILETIME* pctime, const FILETIME* patime, const FILETIME* pmtime) PURE;
-    STDMETHOD_(HRESULT,SetClass)(THIS_ REFCLSID clsid) PURE;
-    STDMETHOD_(HRESULT,SetStateBits)(THIS_ DWORD grfStateBits, DWORD grfMask) PURE;
-    STDMETHOD_(HRESULT,Stat)(THIS_ STATSTG* pstatstg, DWORD grfStatFlag) PURE;
+    STDMETHOD16_(HRESULT,CreateStream)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream16** ppstm) PURE;
+    STDMETHOD16_(HRESULT,OpenStream)(THIS_ LPCOLESTR16 pwcsName, void* reserved1, DWORD grfMode, DWORD reserved2, IStream16** ppstm) PURE;
+    STDMETHOD16_(HRESULT,CreateStorage)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage16** ppstg) PURE;
+    STDMETHOD16_(HRESULT,OpenStorage)(THIS_ LPCOLESTR16 pwcsName, IStorage16* pstgPriority, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16** ppstg) PURE;
+    STDMETHOD16_(HRESULT,CopyTo)(THIS_ DWORD ciidExclude, const IID* rgiidExclude, SNB16 snbExclude, IStorage16* pstgDest) PURE;
+    STDMETHOD16_(HRESULT,MoveElementTo)(THIS_ LPCOLESTR16 pwcsName, IStorage16* pstgDest, LPCOLESTR16 pwcsNewName, DWORD grfFlags) PURE;
+    STDMETHOD16_(HRESULT,Commit)(THIS_ DWORD grfCommitFlags) PURE;
+    STDMETHOD16_(HRESULT,Revert)(THIS) PURE;
+    STDMETHOD16_(HRESULT,EnumElements)(THIS_ DWORD reserved1, void* reserved2, DWORD reserved3, IEnumSTATSTG** ppenum) PURE;
+    STDMETHOD16_(HRESULT,DestroyElement)(THIS_ LPCOLESTR16 pwcsName) PURE;
+    STDMETHOD16_(HRESULT,RenameElement)(THIS_ LPCOLESTR16 pwcsOldName, LPCOLESTR16 pwcsNewName) PURE;
+    STDMETHOD16_(HRESULT,SetElementTimes)(THIS_ LPCOLESTR16 pwcsName, const FILETIME* pctime, const FILETIME* patime, const FILETIME* pmtime) PURE;
+    STDMETHOD16_(HRESULT,SetClass)(THIS_ REFCLSID clsid) PURE;
+    STDMETHOD16_(HRESULT,SetStateBits)(THIS_ DWORD grfStateBits, DWORD grfMask) PURE;
+    STDMETHOD16_(HRESULT,Stat)(THIS_ STATSTG* pstatstg, DWORD grfStatFlag) PURE;
 };
 #undef INTERFACE
 
index 42ce0a5..853c28a 100644 (file)
@@ -52,7 +52,7 @@ typedef struct ItemMonikerImpl{
      */
     const IROTDataVtbl*  lpvtbl2;  /* VTable relative to the IROTData interface.*/
 
-    ULONG ref; /* reference counter for this object */
+    LONG ref; /* reference counter for this object */
 
     LPOLESTR itemName; /* item name identified by this ItemMoniker */
 
index ce69192..d0b8f80 100644 (file)
@@ -85,18 +85,27 @@ inline static HRESULT get_facbuf_for_iid(REFIID riid, IPSFactoryBuffer **facbuf)
 }
 
 /* creates a new stub manager */
-HRESULT marshal_object(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnknown *obj, MSHLFLAGS mshlflags)
+HRESULT marshal_object(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnknown *object, MSHLFLAGS mshlflags)
 {
     struct stub_manager *manager;
     struct ifstub       *ifstub;
     BOOL                 tablemarshal;
     IRpcStubBuffer      *stub = NULL;
     HRESULT              hr;
+    IUnknown            *iobject = NULL; /* object of type riid */
 
     hr = apartment_getoxid(apt, &stdobjref->oxid);
     if (hr != S_OK)
         return hr;
 
+    hr = IUnknown_QueryInterface(object, riid, (void **)&iobject);
+    if (hr != S_OK)
+    {
+        ERR("object doesn't expose interface %s, failing with error 0x%08lx\n",
+            debugstr_guid(riid), hr);
+        return E_NOINTERFACE;
+    }
+  
     /* IUnknown doesn't require a stub buffer, because it never goes out on
      * the wire */
     if (!IsEqualIID(riid, &IID_IUnknown))
@@ -107,19 +116,19 @@ HRESULT marshal_object(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnkno
         if (hr != S_OK)
         {
             ERR("couldn't get IPSFactory buffer for interface %s\n", debugstr_guid(riid));
+            IUnknown_Release(iobject);
             return hr;
         }
     
-        hr = IPSFactoryBuffer_CreateStub(psfb, riid, obj, &stub);
+        hr = IPSFactoryBuffer_CreateStub(psfb, riid, iobject, &stub);
         IPSFactoryBuffer_Release(psfb);
         if (hr != S_OK)
         {
             ERR("Failed to create an IRpcStubBuffer from IPSFactory for %s\n", debugstr_guid(riid));
+            IUnknown_Release(iobject);
             return hr;
         }
     }
-    else /* need to addref object anyway */
-        IUnknown_AddRef(obj);
 
     if (mshlflags & MSHLFLAGS_NOPING)
         stdobjref->flags = SORF_NOPING;
@@ -128,16 +137,17 @@ HRESULT marshal_object(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnkno
 
     /* FIXME: what happens if we register an interface twice with different
      * marshaling flags? */
-    if ((manager = get_stub_manager_from_object(apt, obj)))
+    if ((manager = get_stub_manager_from_object(apt, object)))
         TRACE("registering new ifstub on pre-existing manager\n");
     else
     {
         TRACE("constructing new stub manager\n");
 
-        manager = new_stub_manager(apt, obj, mshlflags);
+        manager = new_stub_manager(apt, object, mshlflags);
         if (!manager)
         {
             if (stub) IRpcStubBuffer_Release(stub);
+            IUnknown_Release(iobject);
             return E_OUTOFMEMORY;
         }
     }
@@ -145,10 +155,11 @@ HRESULT marshal_object(APARTMENT *apt, STDOBJREF *stdobjref, REFIID riid, IUnkno
 
     tablemarshal = ((mshlflags & MSHLFLAGS_TABLESTRONG) || (mshlflags & MSHLFLAGS_TABLEWEAK));
 
-    ifstub = stub_manager_new_ifstub(manager, stub, obj, riid);
+    ifstub = stub_manager_new_ifstub(manager, stub, iobject, riid);
+    IUnknown_Release(iobject);
+    if (stub) IRpcStubBuffer_Release(stub);
     if (!ifstub)
     {
-        IRpcStubBuffer_Release(stub);
         stub_manager_int_release(manager);
         /* FIXME: should we do another release to completely destroy the
          * stub manager? */
@@ -763,7 +774,7 @@ HRESULT apartment_disconnectproxies(struct apartment *apt)
 typedef struct _StdMarshalImpl
 {
     const IMarshalVtbl *lpvtbl;
-    DWORD              ref;
+    LONG               ref;
 
     IID                        iid;
     DWORD              dwDestContext;
@@ -826,7 +837,6 @@ StdMarshalImpl_MarshalInterface(
     void* pvDestContext, DWORD mshlflags)
 {
     STDOBJREF             stdobjref;
-    IUnknown             *pUnk;  
     ULONG                 res;
     HRESULT               hres;
     APARTMENT            *apt = COM_CurrentApt();
@@ -842,18 +852,7 @@ StdMarshalImpl_MarshalInterface(
     /* make sure this apartment can be reached from other threads / processes */
     RPC_StartRemoting(apt);
 
-    hres = IUnknown_QueryInterface((LPUNKNOWN)pv, riid, (LPVOID*)&pUnk);
-    if (hres != S_OK)
-    {
-        ERR("object doesn't expose interface %s, failing with error 0x%08lx\n",
-            debugstr_guid(riid), hres);
-        return E_NOINTERFACE;
-    }
-
-    hres = marshal_object(apt, &stdobjref, riid, pUnk, mshlflags);
-  
-    IUnknown_Release(pUnk);
-  
+    hres = marshal_object(apt, &stdobjref, riid, (IUnknown *)pv, mshlflags);
     if (hres)
     {
         ERR("Failed to create ifstub, hres=0x%lx\n", hres);
index c9a3a1a..2b55034 100644 (file)
@@ -57,7 +57,7 @@ struct HGLOBALLockBytesImpl
   /*
    * Reference count
    */
-  ULONG        ref;
+  LONG        ref;
 
   /*
    * Support for the LockBytes object
@@ -155,6 +155,24 @@ static const ILockBytesVtbl HGLOBALLockBytesImpl_Vtbl =
 
 /******************************************************************************
  *           CreateILockBytesOnHGlobal     [OLE32.@]
+ *
+ * Create a byte array object which is intended to be the compound file foundation.
+ * This object supports a COM implementation of the ILockBytes interface.
+ *
+ * PARAMS
+ *  hGlobal           [ I] Global memory handle
+ *  fDeleteOnRelease  [ I] Whether the handle should be freed when the object is released. 
+ *  ppLkbyt           [ O] Address of ILockBytes pointer that receives
+ *                         the interface pointer to the new byte array object.
+ *
+ * RETURNS
+ *  Success: S_OK
+ *
+ * NOTES
+ *  The supplied ILockBytes pointer can be used by the StgCreateDocfileOnILockBytes
+ *  function to build a compound file on top of this byte array object.
+ *  The ILockBytes interface instance calls the GlobalReAlloc function to grow
+ *  the memory block as required.
  */
 HRESULT WINAPI CreateILockBytesOnHGlobal(HGLOBAL      hGlobal,
                                          BOOL         fDeleteOnRelease,
@@ -176,6 +194,17 @@ HRESULT WINAPI CreateILockBytesOnHGlobal(HGLOBAL      hGlobal,
 
 /******************************************************************************
  *           GetHGlobalFromILockBytes     [OLE32.@]
+ *
+ * Retrieve a global memory handle to a byte array object created
+ * using the CreateILockBytesOnHGlobal function.
+ *
+ * PARAMS
+ *  plkbyt   [ I]  Pointer to the ILockBytes interface on byte array object
+ *  phglobal [ O]  Address to store a global memory handle
+ * RETURNS
+ *  S_OK          if *phglobal has a correct value
+ *  E_INVALIDARG  if any parameters are invalid
+ *  
  */
 HRESULT WINAPI GetHGlobalFromILockBytes(ILockBytes* plkbyt, HGLOBAL* phglobal)
 {
@@ -224,10 +253,10 @@ HRESULT WINAPI GetHGlobalFromILockBytes(ILockBytes* plkbyt, HGLOBAL* phglobal)
 /******************************************************************************
  * This is the constructor for the HGLOBALLockBytesImpl class.
  *
- * Params:
- *    hGlobal          - Handle that will support the stream. can be NULL.
- *    fDeleteOnRelease - Flag set to TRUE if the HGLOBAL will be released
- *                       when the IStream object is destroyed.
+ * PARAMS
+ *    hGlobal          [ I] Handle that will support the stream. can be NULL.
+ *    fDeleteOnRelease [ I] Flag set to TRUE if the HGLOBAL will be released
+ *                          when the IStream object is destroyed.
  */
 HGLOBALLockBytesImpl* HGLOBALLockBytesImpl_Construct(HGLOBAL hGlobal,
                                                      BOOL    fDeleteOnRelease)
index 17eaac1..d2c6598 100644 (file)
@@ -53,7 +53,7 @@ struct HGLOBALLockBytesImpl16
    * since we want to cast this in an ILockBytes pointer
    */
   const ILockBytes16Vtbl *lpVtbl;
-  ULONG        ref;
+  LONG        ref;
 
   /*
    * Support for the LockBytes object
@@ -73,61 +73,6 @@ struct HGLOBALLockBytesImpl16
 
 typedef struct HGLOBALLockBytesImpl16 HGLOBALLockBytesImpl16;
 
-HGLOBALLockBytesImpl16* HGLOBALLockBytesImpl16_Construct(
-    HGLOBAL16  hGlobal,
-    BOOL16     fDeleteOnRelease);
-
-void HGLOBALLockBytesImpl16_Destroy(HGLOBALLockBytesImpl16* This);
-
-HRESULT WINAPI HGLOBALLockBytesImpl16_QueryInterface(
-    ILockBytes16* iface,
-    REFIID        riid,        /* [in] */
-    void**        ppvObject);  /* [out][iid_is] */
-
-ULONG WINAPI HGLOBALLockBytesImpl16_AddRef(
-    ILockBytes16* iface);
-
-ULONG WINAPI HGLOBALLockBytesImpl16_Release(
-    ILockBytes16* iface);
-
-HRESULT WINAPI HGLOBALLockBytesImpl16_ReadAt(
-    ILockBytes16*  iface,
-    ULARGE_INTEGER ulOffset,  /* [in] */
-    void*          pv,        /* [out][length_is][size_is] */
-    ULONG          cb,        /* [in] */
-    ULONG*         pcbRead);  /* [out] */
-
-HRESULT WINAPI HGLOBALLockBytesImpl16_WriteAt(
-    ILockBytes16*  iface,
-    ULARGE_INTEGER ulOffset,    /* [in] */
-    const void*    pv,          /* [in][size_is] */
-    ULONG          cb,          /* [in] */
-    ULONG*         pcbWritten); /* [out] */
-
-HRESULT WINAPI HGLOBALLockBytesImpl16_Flush(
-    ILockBytes16*   iface);
-
-HRESULT WINAPI HGLOBALLockBytesImpl16_SetSize(
-    ILockBytes16*   iface,
-    ULARGE_INTEGER  libNewSize);  /* [in] */
-
-HRESULT WINAPI HGLOBALLockBytesImpl16_LockRegion(
-    ILockBytes16*  iface,
-    ULARGE_INTEGER libOffset,   /* [in] */
-    ULARGE_INTEGER cb,          /* [in] */
-    DWORD          dwLockType); /* [in] */
-
-HRESULT WINAPI HGLOBALLockBytesImpl16_UnlockRegion(
-    ILockBytes16*  iface,
-    ULARGE_INTEGER libOffset,   /* [in] */
-    ULARGE_INTEGER cb,          /* [in] */
-    DWORD          dwLockType); /* [in] */
-
-HRESULT WINAPI HGLOBALLockBytesImpl16_Stat(
-    ILockBytes16*  iface,
-    STATSTG16*     pstatstg,     /* [out] */
-    DWORD          grfStatFlag); /* [in]  */
-
 /******************************************************************************
  *
  * HGLOBALLockBytesImpl16 implementation
@@ -142,7 +87,7 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_Stat(
  *    fDeleteOnRelease - Flag set to TRUE if the HGLOBAL16 will be released
  *                       when the IStream object is destroyed.
  */
-HGLOBALLockBytesImpl16*
+static HGLOBALLockBytesImpl16*
 HGLOBALLockBytesImpl16_Construct(HGLOBAL16 hGlobal,
                                 BOOL16 fDeleteOnRelease)
 {
@@ -207,7 +152,7 @@ HGLOBALLockBytesImpl16_Construct(HGLOBAL16 hGlobal,
  * HGLOBALLockBytesImpl16 class. The pointer passed-in to this function will be
  * freed and will not be valid anymore.
  */
-void HGLOBALLockBytesImpl16_Destroy(HGLOBALLockBytesImpl16* This)
+static void HGLOBALLockBytesImpl16_Destroy(HGLOBALLockBytesImpl16* This)
 {
   TRACE("()\n");
   /*
@@ -225,11 +170,25 @@ void HGLOBALLockBytesImpl16_Destroy(HGLOBALLockBytesImpl16* This)
   HeapFree(GetProcessHeap(), 0, This);
 }
 
+/******************************************************************************
+ * This implements the IUnknown method AddRef for this
+ * class
+ */
+ULONG HGLOBALLockBytesImpl16_AddRef(ILockBytes16* iface)
+{
+  HGLOBALLockBytesImpl16* const This=(HGLOBALLockBytesImpl16*)iface;
+
+  TRACE("(%p)\n",This);
+
+  return InterlockedIncrement(&This->ref);
+}
+
+
 /******************************************************************************
  * This implements the IUnknown method QueryInterface for this
  * class
  */
-HRESULT WINAPI HGLOBALLockBytesImpl16_QueryInterface(
+HRESULT HGLOBALLockBytesImpl16_QueryInterface(
       ILockBytes16*  iface,    /* [in] SEGPTR */
       REFIID       riid,        /* [in] */
       void**       ppvObject)   /* [out][iid_is] (ptr to SEGPTR!) */
@@ -258,8 +217,10 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_QueryInterface(
   /*
    * Check that we obtained an interface.
    */
-  if ((*ppvObject)==0)
+  if ((*ppvObject)==0) {
+    FIXME("Unknown IID %s\n", debugstr_guid(riid));
     return E_NOINTERFACE;
+  }
 
   /*
    * Query Interface always increases the reference count by one when it is
@@ -270,24 +231,11 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_QueryInterface(
   return S_OK;
 }
 
-/******************************************************************************
- * This implements the IUnknown method AddRef for this
- * class
- */
-ULONG WINAPI HGLOBALLockBytesImpl16_AddRef(ILockBytes16* iface)
-{
-  HGLOBALLockBytesImpl16* const This=(HGLOBALLockBytesImpl16*)iface;
-
-  TRACE("(%p)\n",This);
-
-  return InterlockedIncrement(&This->ref);
-}
-
 /******************************************************************************
  * This implements the IUnknown method Release for this
  * class
  */
-ULONG WINAPI HGLOBALLockBytesImpl16_Release(ILockBytes16* iface)
+ULONG HGLOBALLockBytesImpl16_Release(ILockBytes16* iface)
 {
   HGLOBALLockBytesImpl16* const This=(HGLOBALLockBytesImpl16*)iface;
   ULONG ref;
@@ -312,7 +260,7 @@ ULONG WINAPI HGLOBALLockBytesImpl16_Release(ILockBytes16* iface)
  *
  * See the documentation of ILockBytes for more info.
  */
-HRESULT WINAPI HGLOBALLockBytesImpl16_ReadAt(
+HRESULT HGLOBALLockBytesImpl16_ReadAt(
       ILockBytes16*  iface,
       ULARGE_INTEGER ulOffset,  /* [in] */
       void*          pv,        /* [out][length_is][size_is] */
@@ -377,6 +325,44 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_ReadAt(
   return STG_E_READFAULT;
 }
 
+/******************************************************************************
+ * This method is part of the ILockBytes interface.
+ *
+ * It will change the size of the byte array.
+ *
+ * See the documentation of ILockBytes for more info.
+ */
+HRESULT HGLOBALLockBytesImpl16_SetSize(
+      ILockBytes16*   iface,
+      ULARGE_INTEGER  libNewSize)   /* [in] */
+{
+  HGLOBALLockBytesImpl16* const This=(HGLOBALLockBytesImpl16*)iface;
+  HGLOBAL16 supportHandle;
+
+  TRACE("(%p,%ld)\n",This,libNewSize.u.LowPart);
+  /*
+   * As documented.
+   */
+  if (libNewSize.u.HighPart != 0)
+    return STG_E_INVALIDFUNCTION;
+
+  if (This->byteArraySize.u.LowPart == libNewSize.u.LowPart)
+    return S_OK;
+
+  /*
+   * Re allocate the HGlobal to fit the new size of the stream.
+   */
+  supportHandle = GlobalReAlloc16(This->supportHandle, libNewSize.u.LowPart, 0);
+
+  if (supportHandle == 0)
+    return STG_E_MEDIUMFULL;
+
+  This->supportHandle = supportHandle;
+  This->byteArraySize.u.LowPart = libNewSize.u.LowPart;
+
+  return S_OK;
+}
+
 /******************************************************************************
  * This method is part of the ILockBytes interface.
  *
@@ -385,7 +371,7 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_ReadAt(
  *
  * See the documentation of ILockBytes for more info.
  */
-HRESULT WINAPI HGLOBALLockBytesImpl16_WriteAt(
+HRESULT HGLOBALLockBytesImpl16_WriteAt(
       ILockBytes16*  iface,
       ULARGE_INTEGER ulOffset,    /* [in] */
       const void*    pv,          /* [in][size_is] */
@@ -447,50 +433,12 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_WriteAt(
  *
  * See the documentation of ILockBytes for more info.
  */
-HRESULT WINAPI HGLOBALLockBytesImpl16_Flush(ILockBytes16* iface)
+HRESULT HGLOBALLockBytesImpl16_Flush(ILockBytes16* iface)
 {
   TRACE("(%p)\n",iface);
   return S_OK;
 }
 
-/******************************************************************************
- * This method is part of the ILockBytes interface.
- *
- * It will change the size of the byte array.
- *
- * See the documentation of ILockBytes for more info.
- */
-HRESULT WINAPI HGLOBALLockBytesImpl16_SetSize(
-      ILockBytes16*   iface,
-      ULARGE_INTEGER  libNewSize)   /* [in] */
-{
-  HGLOBALLockBytesImpl16* const This=(HGLOBALLockBytesImpl16*)iface;
-  HGLOBAL16 supportHandle;
-
-  TRACE("(%p,%ld)\n",This,libNewSize.u.LowPart);
-  /*
-   * As documented.
-   */
-  if (libNewSize.u.HighPart != 0)
-    return STG_E_INVALIDFUNCTION;
-
-  if (This->byteArraySize.u.LowPart == libNewSize.u.LowPart)
-    return S_OK;
-
-  /*
-   * Re allocate the HGlobal to fit the new size of the stream.
-   */
-  supportHandle = GlobalReAlloc16(This->supportHandle, libNewSize.u.LowPart, 0);
-
-  if (supportHandle == 0)
-    return STG_E_MEDIUMFULL;
-
-  This->supportHandle = supportHandle;
-  This->byteArraySize.u.LowPart = libNewSize.u.LowPart;
-
-  return S_OK;
-}
-
 /******************************************************************************
  * This method is part of the ILockBytes interface.
  *
@@ -498,7 +446,7 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_SetSize(
  *
  * See the documentation of ILockBytes for more info.
  */
-HRESULT WINAPI HGLOBALLockBytesImpl16_LockRegion(
+HRESULT HGLOBALLockBytesImpl16_LockRegion(
       ILockBytes16*  iface,
       ULARGE_INTEGER libOffset,   /* [in] */
       ULARGE_INTEGER cb,          /* [in] */
@@ -514,7 +462,7 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_LockRegion(
  *
  * See the documentation of ILockBytes for more info.
  */
-HRESULT WINAPI HGLOBALLockBytesImpl16_UnlockRegion(
+HRESULT HGLOBALLockBytesImpl16_UnlockRegion(
       ILockBytes16*  iface,
       ULARGE_INTEGER libOffset,   /* [in] */
       ULARGE_INTEGER cb,          /* [in] */
@@ -531,7 +479,7 @@ HRESULT WINAPI HGLOBALLockBytesImpl16_UnlockRegion(
  *
  * See the documentation of ILockBytes for more info.
  */
-HRESULT WINAPI HGLOBALLockBytesImpl16_Stat(
+HRESULT HGLOBALLockBytesImpl16_Stat(
       ILockBytes16*iface,
       STATSTG16*   pstatstg,     /* [out] */
       DWORD        grfStatFlag)  /* [in] */
index 816f506..1e7bf88 100644 (file)
@@ -60,7 +60,7 @@ struct rot_entry
 typedef struct RunningObjectTableImpl
 {
     const IRunningObjectTableVtbl *lpVtbl;
-    ULONG ref;
+    LONG ref;
 
     struct list rot; /* list of ROT entries */
     CRITICAL_SECTION lock;
@@ -73,7 +73,7 @@ static RunningObjectTableImpl* runningObjectTableInstance = NULL;
 static inline HRESULT WINAPI
 IrotRegister(DWORD *cookie)
 {
-    static DWORD last_cookie = 1;
+    static LONG last_cookie = 1;
     *cookie = InterlockedIncrement(&last_cookie);
     return S_OK;
 }
@@ -82,7 +82,7 @@ IrotRegister(DWORD *cookie)
 typedef struct EnumMonikerImpl
 {
     const IEnumMonikerVtbl *lpVtbl;
-    ULONG      ref;
+    LONG ref;
 
     MInterfacePointer **monikers;
     ULONG moniker_count;
@@ -988,7 +988,7 @@ typedef struct MonikerMarshal
     const IUnknownVtbl *lpVtbl;
     const IMarshalVtbl *lpVtblMarshal;
     
-    ULONG ref;
+    LONG ref;
     IMoniker *moniker;
 } MonikerMarshal;
 
index 57f24c8..7536d3f 100644 (file)
@@ -69,7 +69,7 @@ typedef struct
 /******************************************************************************
  *             IMalloc16_QueryInterface        [COMPOBJ.500]
  */
-HRESULT WINAPI IMalloc16_fnQueryInterface(IMalloc16* iface,REFIID refiid,LPVOID *obj) {
+HRESULT IMalloc16_fnQueryInterface(IMalloc16* iface,REFIID refiid,LPVOID *obj) {
         IMalloc16Impl *This = (IMalloc16Impl *)iface;
 
        TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj);
@@ -85,7 +85,7 @@ HRESULT WINAPI IMalloc16_fnQueryInterface(IMalloc16* iface,REFIID refiid,LPVOID
 /******************************************************************************
  *             IMalloc16_AddRef        [COMPOBJ.501]
  */
-ULONG WINAPI IMalloc16_fnAddRef(IMalloc16* iface) {
+ULONG IMalloc16_fnAddRef(IMalloc16* iface) {
         IMalloc16Impl *This = (IMalloc16Impl *)iface;
        TRACE("(%p)->AddRef()\n",This);
        return 1; /* cannot be freed */
@@ -94,7 +94,7 @@ ULONG WINAPI IMalloc16_fnAddRef(IMalloc16* iface) {
 /******************************************************************************
  *             IMalloc16_Release       [COMPOBJ.502]
  */
-ULONG WINAPI IMalloc16_fnRelease(IMalloc16* iface) {
+ULONG IMalloc16_fnRelease(IMalloc16* iface) {
         IMalloc16Impl *This = (IMalloc16Impl *)iface;
        TRACE("(%p)->Release()\n",This);
        return 1; /* cannot be freed */
@@ -103,7 +103,7 @@ ULONG WINAPI IMalloc16_fnRelease(IMalloc16* iface) {
 /******************************************************************************
  * IMalloc16_Alloc [COMPOBJ.503]
  */
-SEGPTR WINAPI IMalloc16_fnAlloc(IMalloc16* iface,DWORD cb) {
+SEGPTR IMalloc16_fnAlloc(IMalloc16* iface,DWORD cb) {
         IMalloc16Impl *This = (IMalloc16Impl *)iface;
        TRACE("(%p)->Alloc(%ld)\n",This,cb);
         return MapLS( HeapAlloc( GetProcessHeap(), 0, cb ) );
@@ -112,7 +112,7 @@ SEGPTR WINAPI IMalloc16_fnAlloc(IMalloc16* iface,DWORD cb) {
 /******************************************************************************
  * IMalloc16_Free [COMPOBJ.505]
  */
-VOID WINAPI IMalloc16_fnFree(IMalloc16* iface,SEGPTR pv)
+VOID IMalloc16_fnFree(IMalloc16* iface,SEGPTR pv)
 {
     void *ptr = MapSL(pv);
     IMalloc16Impl *This = (IMalloc16Impl *)iface;
@@ -124,7 +124,7 @@ VOID WINAPI IMalloc16_fnFree(IMalloc16* iface,SEGPTR pv)
 /******************************************************************************
  * IMalloc16_Realloc [COMPOBJ.504]
  */
-SEGPTR WINAPI IMalloc16_fnRealloc(IMalloc16* iface,SEGPTR pv,DWORD cb)
+SEGPTR IMalloc16_fnRealloc(IMalloc16* iface,SEGPTR pv,DWORD cb)
 {
     SEGPTR ret;
     IMalloc16Impl *This = (IMalloc16Impl *)iface;
@@ -144,7 +144,7 @@ SEGPTR WINAPI IMalloc16_fnRealloc(IMalloc16* iface,SEGPTR pv,DWORD cb)
 /******************************************************************************
  * IMalloc16_GetSize [COMPOBJ.506]
  */
-DWORD WINAPI IMalloc16_fnGetSize(const IMalloc16* iface,SEGPTR pv)
+DWORD IMalloc16_fnGetSize(const IMalloc16* iface,SEGPTR pv)
 {
        IMalloc16Impl *This = (IMalloc16Impl *)iface;
         TRACE("(%p)->GetSize(%08lx)\n",This,pv);
@@ -154,7 +154,7 @@ DWORD WINAPI IMalloc16_fnGetSize(const IMalloc16* iface,SEGPTR pv)
 /******************************************************************************
  * IMalloc16_DidAlloc [COMPOBJ.507]
  */
-INT16 WINAPI IMalloc16_fnDidAlloc(const IMalloc16* iface,LPVOID pv) {
+INT16 IMalloc16_fnDidAlloc(const IMalloc16* iface,LPVOID pv) {
         IMalloc16 *This = (IMalloc16 *)iface;
        TRACE("(%p)->DidAlloc(%p)\n",This,pv);
        return (INT16)-1;
@@ -163,7 +163,7 @@ INT16 WINAPI IMalloc16_fnDidAlloc(const IMalloc16* iface,LPVOID pv) {
 /******************************************************************************
  * IMalloc16_HeapMinimize [COMPOBJ.508]
  */
-LPVOID WINAPI IMalloc16_fnHeapMinimize(IMalloc16* iface) {
+LPVOID IMalloc16_fnHeapMinimize(IMalloc16* iface) {
         IMalloc16Impl *This = (IMalloc16Impl *)iface;
        TRACE("(%p)->HeapMinimize()\n",This);
        return NULL;
@@ -370,7 +370,7 @@ HRESULT WINAPI ProgIDFromCLSID16(
 
   if (ret == S_OK)
   {
-    DWORD buf2len;
+    LONG buf2len;
     char *buf2 = HeapAlloc(GetProcessHeap(), 0, 255);
     buf2len = 255;
     if (RegQueryValueA(xhkey, NULL, buf2, &buf2len))
@@ -506,3 +506,18 @@ BOOL WINAPI COMPOBJ_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst, WORD ds, WORD
         TRACE("(%08lx, %04x, %04x, %04x, %08lx, %04x)\n", Reason, hInst, ds, HeapSize, res1, res2);
         return TRUE;
 }
+
+/***********************************************************************
+ *           CoMemAlloc [COMPOBJ.151]
+ */
+SEGPTR WINAPI CoMemAlloc(DWORD size, DWORD dwMemContext, DWORD x) {
+       HRESULT         hres;
+       SEGPTR          segptr;
+
+       /* FIXME: check context handling */
+       TRACE("(%ld, 0x%08lx, 0x%08lx)\n", size, dwMemContext, x);
+       hres = _xmalloc16(size, &segptr);
+       if (hres != S_OK)
+               return (SEGPTR)0;
+       return segptr;
+}
index bca4b9a..d2304fd 100644 (file)
@@ -294,8 +294,8 @@ void WINAPI OleUninitialize(void)
 /******************************************************************************
  *             OleInitializeWOW        [OLE32.@]
  */
-HRESULT WINAPI OleInitializeWOW(DWORD x) {
-        FIXME("(0x%08lx),stub!\n",x);
+HRESULT WINAPI OleInitializeWOW(DWORD x, DWORD y) {
+        FIXME("(0x%08lx, 0x%08lx),stub!\n",x, y);
         return 0;
 }
 
@@ -394,7 +394,7 @@ HRESULT WINAPI OleRegGetUserType(
   DWORD   cbData;
   HKEY    clsidKey;
   LONG    hres;
-  LPBYTE  buffer;
+  LPSTR   buffer;
   HRESULT retVal;
   /*
    * Initialize the out parameter.
@@ -464,7 +464,7 @@ HRESULT WINAPI OleRegGetUserType(
                          "",
                          NULL,
                          &dwKeyType,
-                         buffer,
+                         (LPBYTE) buffer,
                          &cbData);
 
   RegCloseKey(clsidKey);
index e042137..5d97ec2 100644 (file)
-1 pascal OleBuildVersion() OleBuildVersion\r
-2 pascal OleInitialize(ptr) OleInitialize\r
-3 pascal OleUninitialize() OleUninitialize\r
-4 pascal DllGetClassObject(ptr ptr ptr) DllGetClassObject16\r
-#5 WEP\r
-6 stub OLEQUERYLINKFROMDATA\r
-7 stub OLEQUERYCREATEFROMDATA\r
-8 stub OLECREATEFROMDATA\r
-9 stub OLECREATELINKFROMDATA\r
-10 stub OLECREATE\r
-11 stub OLECREATELINK\r
-12 stub OLELOAD\r
-13 stub OLESAVE\r
-14 stub OLERUN\r
-#15 ___EXPORTEDSTUB\r
-16 stub OLEISRUNNING\r
-17 stub OLELOCKRUNNING\r
-18 stub READCLASSSTG\r
-19 stub WRITECLASSSTG\r
-20 stub READCLASSSTM\r
-21 stub WRITECLASSSTM\r
-22 stub BINDMONIKER\r
-23 stub MKPARSEDISPLAYNAME\r
-24 stub OLESAVETOSTREAM\r
-25 stub OLELOADFROMSTREAM\r
-26 stub CREATEBINDCTX\r
-27 pascal CreateItemMoniker(str str ptr) CreateItemMoniker16\r
-28 pascal CreateFileMoniker(str ptr) CreateFileMoniker16\r
-29 stub CREATEGENERICCOMPOSITE\r
-30 pascal GetRunningObjectTable(long ptr) GetRunningObjectTable16\r
-31 stub OLEGETMALLOC\r
-32 stub RELEASESTGMEDIUM\r
-33 stub READSTRINGSTREAM\r
-34 stub WRITESTRINGSTREAM\r
-35 pascal RegisterDragDrop(word segptr) RegisterDragDrop16\r
-36 pascal RevokeDragDrop(word) RevokeDragDrop16\r
-37 stub DODRAGDROP\r
-38 stub CREATEOLEADVISEHOLDER\r
-39 stub CREATEDATAADVISEHOLDER\r
-40 stub OLECREATEMENUDESCRIPTOR\r
-41 stub OLESETMENUDESCRIPTOR\r
-42 stub OLEDESTROYMENUDESCRIPTOR\r
-43 stub OPENORCREATESTREAM\r
-44 stub CREATEANTIMONIKER\r
-45 stub CREATEPOINTERMONIKER\r
-46 stub MONIKERRELATIVEPATHTO\r
-47 stub MONIKERCOMMONPREFIXWITH\r
-48 stub ISACCELERATOR\r
-49 pascal OleSetClipboard(ptr) OleSetClipboard16\r
-50 pascal OleGetClipboard(ptr) OleGetClipboard16\r
-51 stub OLEDUPLICATEDATA\r
-52 stub OLEGETICONOFFILE\r
-53 stub OLEGETICONOFCLASS\r
-54 pascal CreateILockBytesOnHGlobal(word word ptr) CreateILockBytesOnHGlobal16\r
-55 stub GETHGLOBALFROMILOCKBYTES\r
-56 pascal -ret16 OleMetaFilePictFromIconAndLabel(word str str word) OleMetaFilePictFromIconAndLabel16\r
-57 stub GETCLASSFILE\r
-58 stub OLEDRAW\r
-59 stub OLECREATEDEFAULTHANDLER\r
-60 stub OLECREATEEMBEDDINGHELPER\r
-61 stub OLECONVERTISTORAGETOOLESTREAMEX\r
-62 stub OLECONVERTOLESTREAMTOISTORAGEEX\r
-63 stub SETDOCUMENTBITSTG\r
-64 stub GETDOCUMENTBITSTG\r
-65 stub WRITEOLESTG\r
-66 stub READOLESTG\r
-67 stub OLECREATEFROMFILE\r
-68 stub OLECREATELINKTOFILE\r
-69 stub CREATEDATACACHE\r
-70 stub OLECONVERTISTORAGETOOLESTREAM\r
-71 stub OLECONVERTOLESTREAMTOISTORAGE\r
-74 stub READFMTUSERTYPESTG\r
-75 stub WRITEFMTUSERTYPESTG\r
-76 pascal -ret16 OleFlushClipboard() OleFlushClipboard16\r
-77 stub OLEISCURRENTCLIPBOARD\r
-78 stub OLETRANSLATEACCELERATOR\r
-79 stub OLEDOAUTOCONVERT\r
-80 stub OLEGETAUTOCONVERT\r
-81 stub OLESETAUTOCONVERT\r
-82 stub GETCONVERTSTG\r
-83 stub SETCONVERTSTG\r
-84 stub CREATESTREAMONHGLOBAL\r
-85 stub GETHGLOBALFROMSTREAM\r
-86 stub OLESETCONTAINEDOBJECT\r
-87 stub OLENOTEOBJECTVISIBLE\r
-88 stub OLECREATESTATICFROMDATA\r
-89 stub OLEREGGETUSERTYPE\r
-90 stub OLEREGGETMISCSTATUS\r
-91 stub OLEREGENUMFORMATETC\r
-92 stub OLEREGENUMVERBS\r
-93 stub OLEGETENUMFORMATETC\r
-100 stub MAKEDEBUGSTREAM\r
-104 stub DBGLOGOPEN\r
-105 stub DBGLOGCLOSE\r
-106 stub DBGLOGOUTPUTDEBUGSTRING\r
-107 stub DBGLOGWRITE\r
-108 stub DBGLOGTIMESTAMP\r
-109 stub DBGLOGWRITEBANNER\r
-110 stub DBGDUMPOBJECT\r
-111 stub DBGISOBJECTVALID\r
-112 stub DUMPALLOBJECTS\r
-113 stub VALIDATEALLOBJECTS\r
-114 stub DBGDUMPCLASSNAME\r
-115 stub DBGDUMPEXTERNALOBJECT\r
-120 stub _IID_IENUMUNKNOWN\r
-121 stub _IID_IENUMSTRING\r
-122 stub _IID_IENUMMONIKER\r
-123 stub _IID_IENUMFORMATETC\r
-124 stub _IID_IENUMOLEVERB\r
-125 stub _IID_IENUMSTATDATA\r
-126 stub _IID_IENUMGENERIC\r
-127 stub _IID_IENUMHOLDER\r
-128 stub _IID_IENUMCALLBACK\r
-129 stub _IID_IPERSISTSTREAM\r
-130 stub _IID_IPERSISTSTORAGE\r
-131 stub _IID_IPERSISTFILE\r
-132 stub _IID_IPERSIST\r
-133 stub _IID_IVIEWOBJECT\r
-134 stub _IID_IDATAOBJECT\r
-135 stub _IID_IADVISESINK\r
-136 stub _IID_IDATAADVISEHOLDER\r
-137 stub _IID_IOLEADVISEHOLDER\r
-138 stub _IID_IOLEOBJECT\r
-139 stub _IID_IOLEINPLACEOBJECT\r
-140 stub _IID_IOLEWINDOW\r
-141 stub _IID_IOLEINPLACEUIWINDOW\r
-142 stub _IID_IOLEINPLACEFRAME\r
-143 stub _IID_IOLEINPLACEACTIVEOBJECT\r
-144 stub _IID_IOLECLIENTSITE\r
-145 stub _IID_IOLEINPLACESITE\r
-146 stub _IID_IPARSEDISPLAYNAME\r
-147 stub _IID_IOLECONTAINER\r
-148 stub _IID_IOLEITEMCONTAINER\r
-149 stub _IID_IOLELINK\r
-150 stub _IID_IOLECACHE\r
-151 stub _IID_IOLEMANAGER\r
-152 stub _IID_IOLEPRESOBJ\r
-153 stub _IID_IDROPSOURCE\r
-154 stub _IID_IDROPTARGET\r
-155 stub _IID_IDEBUG\r
-156 stub _IID_IDEBUGSTREAM\r
-157 stub _IID_IADVISESINK2\r
-158 stub _IID_IVIEWOBJECT2\r
-159 stub _IID_IOLECACHE2\r
-160 stub _IID_IOLECACHECONTROL\r
-161 stub _IID_IRUNNABLEOBJECT\r
-\r
-# WINE MemLockBytes implementation.\r
-500 cdecl HGLOBALLockBytesImpl16_QueryInterface(segptr ptr ptr) HGLOBALLockBytesImpl16_QueryInterface\r
-501 cdecl HGLOBALLockBytesImpl16_AddRef(ptr) HGLOBALLockBytesImpl16_AddRef\r
-502 cdecl HGLOBALLockBytesImpl16_Release(ptr) HGLOBALLockBytesImpl16_Release\r
-503 cdecl HGLOBALLockBytesImpl16_ReadAt(ptr long long ptr long ptr) HGLOBALLockBytesImpl16_ReadAt\r
-504 cdecl HGLOBALLockBytesImpl16_WriteAt(ptr long long ptr long ptr) HGLOBALLockBytesImpl16_WriteAt\r
-505 cdecl HGLOBALLockBytesImpl16_Flush(ptr) HGLOBALLockBytesImpl16_Flush\r
-506 cdecl HGLOBALLockBytesImpl16_SetSize(ptr long long) HGLOBALLockBytesImpl16_SetSize\r
-507 cdecl HGLOBALLockBytesImpl16_LockRegion(ptr long long long long long) HGLOBALLockBytesImpl16_LockRegion\r
-508 cdecl HGLOBALLockBytesImpl16_UnlockRegion(ptr long long long long long) HGLOBALLockBytesImpl16_UnlockRegion\r
-509 cdecl HGLOBALLockBytesImpl16_Stat(ptr ptr long) HGLOBALLockBytesImpl16_Stat\r
+1 pascal OleBuildVersion() OleBuildVersion
+2 pascal OleInitialize(ptr) OleInitialize
+3 pascal OleUninitialize() OleUninitialize
+4 pascal DllGetClassObject(ptr ptr ptr) DllGetClassObject16
+#5 WEP
+6 stub OLEQUERYLINKFROMDATA
+7 stub OLEQUERYCREATEFROMDATA
+8 stub OLECREATEFROMDATA
+9 stub OLECREATELINKFROMDATA
+10 stub OLECREATE
+11 stub OLECREATELINK
+12 stub OLELOAD
+13 stub OLESAVE
+14 stub OLERUN
+#15 ___EXPORTEDSTUB
+16 stub OLEISRUNNING
+17 stub OLELOCKRUNNING
+18 stub READCLASSSTG
+19 stub WRITECLASSSTG
+20 stub READCLASSSTM
+21 stub WRITECLASSSTM
+22 stub BINDMONIKER
+23 stub MKPARSEDISPLAYNAME
+24 stub OLESAVETOSTREAM
+25 stub OLELOADFROMSTREAM
+26 stub CREATEBINDCTX
+27 pascal CreateItemMoniker(str str ptr) CreateItemMoniker16
+28 pascal CreateFileMoniker(str ptr) CreateFileMoniker16
+29 stub CREATEGENERICCOMPOSITE
+30 pascal GetRunningObjectTable(long ptr) GetRunningObjectTable16
+31 stub OLEGETMALLOC
+32 stub RELEASESTGMEDIUM
+33 stub READSTRINGSTREAM
+34 stub WRITESTRINGSTREAM
+35 pascal RegisterDragDrop(word segptr) RegisterDragDrop16
+36 pascal RevokeDragDrop(word) RevokeDragDrop16
+37 stub DODRAGDROP
+38 stub CREATEOLEADVISEHOLDER
+39 stub CREATEDATAADVISEHOLDER
+40 stub OLECREATEMENUDESCRIPTOR
+41 pascal OleSetMenuDescriptor(word word word ptr ptr) OleSetMenuDescriptor16
+42 stub OLEDESTROYMENUDESCRIPTOR
+43 stub OPENORCREATESTREAM
+44 stub CREATEANTIMONIKER
+45 stub CREATEPOINTERMONIKER
+46 stub MONIKERRELATIVEPATHTO
+47 stub MONIKERCOMMONPREFIXWITH
+48 stub ISACCELERATOR
+49 pascal OleSetClipboard(ptr) OleSetClipboard16
+50 pascal OleGetClipboard(ptr) OleGetClipboard16
+51 stub OLEDUPLICATEDATA
+52 stub OLEGETICONOFFILE
+53 stub OLEGETICONOFCLASS
+54 pascal CreateILockBytesOnHGlobal(word word ptr) CreateILockBytesOnHGlobal16
+55 stub GETHGLOBALFROMILOCKBYTES
+56 pascal -ret16 OleMetaFilePictFromIconAndLabel(word str str word) OleMetaFilePictFromIconAndLabel16
+57 stub GETCLASSFILE
+58 stub OLEDRAW
+59 stub OLECREATEDEFAULTHANDLER
+60 stub OLECREATEEMBEDDINGHELPER
+61 stub OLECONVERTISTORAGETOOLESTREAMEX
+62 stub OLECONVERTOLESTREAMTOISTORAGEEX
+63 stub SETDOCUMENTBITSTG
+64 stub GETDOCUMENTBITSTG
+65 stub WRITEOLESTG
+66 stub READOLESTG
+67 stub OLECREATEFROMFILE
+68 stub OLECREATELINKTOFILE
+69 stub CREATEDATACACHE
+70 stub OLECONVERTISTORAGETOOLESTREAM
+71 stub OLECONVERTOLESTREAMTOISTORAGE
+74 stub READFMTUSERTYPESTG
+75 stub WRITEFMTUSERTYPESTG
+76 pascal -ret16 OleFlushClipboard() OleFlushClipboard16
+77 stub OLEISCURRENTCLIPBOARD
+78 stub OLETRANSLATEACCELERATOR
+79 stub OLEDOAUTOCONVERT
+80 stub OLEGETAUTOCONVERT
+81 stub OLESETAUTOCONVERT
+82 stub GETCONVERTSTG
+83 stub SETCONVERTSTG
+84 stub CREATESTREAMONHGLOBAL
+85 stub GETHGLOBALFROMSTREAM
+86 stub OLESETCONTAINEDOBJECT
+87 stub OLENOTEOBJECTVISIBLE
+88 stub OLECREATESTATICFROMDATA
+89 stub OLEREGGETUSERTYPE
+90 stub OLEREGGETMISCSTATUS
+91 stub OLEREGENUMFORMATETC
+92 stub OLEREGENUMVERBS
+93 stub OLEGETENUMFORMATETC
+100 stub MAKEDEBUGSTREAM
+104 stub DBGLOGOPEN
+105 stub DBGLOGCLOSE
+106 stub DBGLOGOUTPUTDEBUGSTRING
+107 stub DBGLOGWRITE
+108 stub DBGLOGTIMESTAMP
+109 stub DBGLOGWRITEBANNER
+110 stub DBGDUMPOBJECT
+111 stub DBGISOBJECTVALID
+112 stub DUMPALLOBJECTS
+113 stub VALIDATEALLOBJECTS
+114 stub DBGDUMPCLASSNAME
+115 stub DBGDUMPEXTERNALOBJECT
+120 stub _IID_IENUMUNKNOWN
+121 stub _IID_IENUMSTRING
+122 stub _IID_IENUMMONIKER
+123 stub _IID_IENUMFORMATETC
+124 stub _IID_IENUMOLEVERB
+125 stub _IID_IENUMSTATDATA
+126 stub _IID_IENUMGENERIC
+127 stub _IID_IENUMHOLDER
+128 stub _IID_IENUMCALLBACK
+129 stub _IID_IPERSISTSTREAM
+130 stub _IID_IPERSISTSTORAGE
+131 stub _IID_IPERSISTFILE
+132 stub _IID_IPERSIST
+133 stub _IID_IVIEWOBJECT
+134 stub _IID_IDATAOBJECT
+135 stub _IID_IADVISESINK
+136 stub _IID_IDATAADVISEHOLDER
+137 stub _IID_IOLEADVISEHOLDER
+138 stub _IID_IOLEOBJECT
+139 stub _IID_IOLEINPLACEOBJECT
+140 stub _IID_IOLEWINDOW
+141 stub _IID_IOLEINPLACEUIWINDOW
+142 stub _IID_IOLEINPLACEFRAME
+143 stub _IID_IOLEINPLACEACTIVEOBJECT
+144 stub _IID_IOLECLIENTSITE
+145 stub _IID_IOLEINPLACESITE
+146 stub _IID_IPARSEDISPLAYNAME
+147 stub _IID_IOLECONTAINER
+148 stub _IID_IOLEITEMCONTAINER
+149 stub _IID_IOLELINK
+150 stub _IID_IOLECACHE
+151 stub _IID_IOLEMANAGER
+152 stub _IID_IOLEPRESOBJ
+153 stub _IID_IDROPSOURCE
+154 stub _IID_IDROPTARGET
+155 stub _IID_IDEBUG
+156 stub _IID_IDEBUGSTREAM
+157 stub _IID_IADVISESINK2
+158 stub _IID_IVIEWOBJECT2
+159 stub _IID_IOLECACHE2
+160 stub _IID_IOLECACHECONTROL
+161 stub _IID_IRUNNABLEOBJECT
+
+# WINE MemLockBytes implementation.
+500 cdecl HGLOBALLockBytesImpl16_QueryInterface(segptr ptr ptr) HGLOBALLockBytesImpl16_QueryInterface
+501 cdecl HGLOBALLockBytesImpl16_AddRef(ptr) HGLOBALLockBytesImpl16_AddRef
+502 cdecl HGLOBALLockBytesImpl16_Release(ptr) HGLOBALLockBytesImpl16_Release
+503 cdecl HGLOBALLockBytesImpl16_ReadAt(ptr long long ptr long ptr) HGLOBALLockBytesImpl16_ReadAt
+504 cdecl HGLOBALLockBytesImpl16_WriteAt(ptr long long ptr long ptr) HGLOBALLockBytesImpl16_WriteAt
+505 cdecl HGLOBALLockBytesImpl16_Flush(ptr) HGLOBALLockBytesImpl16_Flush
+506 cdecl HGLOBALLockBytesImpl16_SetSize(ptr long long) HGLOBALLockBytesImpl16_SetSize
+507 cdecl HGLOBALLockBytesImpl16_LockRegion(ptr long long long long long) HGLOBALLockBytesImpl16_LockRegion
+508 cdecl HGLOBALLockBytesImpl16_UnlockRegion(ptr long long long long long) HGLOBALLockBytesImpl16_UnlockRegion
+509 cdecl HGLOBALLockBytesImpl16_Stat(ptr ptr long) HGLOBALLockBytesImpl16_Stat
index a61fb60..77c1d28 100644 (file)
@@ -152,3 +152,43 @@ HRESULT WINAPI CreateFileMoniker16(LPCOLESTR16 lpszPathName,LPMONIKER* ppmk)
     FIXME("(%s,%p),stub!\n",lpszPathName,ppmk);
     return E_NOTIMPL;
 }
+
+/******************************************************************************
+ *        OleSetMenuDescriptor (OLE2.41)
+ */
+HRESULT WINAPI OleSetMenuDescriptor16(
+    HOLEMENU               hOleMenu, /* FIXME: HOLEMENU16 likely */
+    HWND16                 hwndFrame,
+    HWND16                 hwndActiveObject,
+    LPOLEINPLACEFRAME        lpFrame,
+    LPOLEINPLACEACTIVEOBJECT lpActiveObject)
+{
+    FIXME("(%p, %x, %x, %p, %p), stub!\n", hOleMenu, hwndFrame, hwndActiveObject, lpFrame, lpActiveObject);
+    return E_NOTIMPL;
+}
+
+/******************************************************************************
+ *              IsValidInterface        [COMPOBJ.23]
+ *
+ * Determines whether a pointer is a valid interface.
+ *
+ * PARAMS
+ *  punk [I] Interface to be tested.
+ *
+ * RETURNS
+ *  TRUE, if the passed pointer is a valid interface, or FALSE otherwise.
+ */
+BOOL WINAPI IsValidInterface16(SEGPTR punk)
+{
+       DWORD **ptr;
+
+       if (IsBadReadPtr16(punk,4))
+               return FALSE;
+       ptr = MapSL(punk);
+       if (IsBadReadPtr16((SEGPTR)ptr[0],4))   /* check vtable ptr */
+               return FALSE;
+       ptr = MapSL((SEGPTR)ptr[0]);            /* ptr to first method */
+       if (IsBadReadPtr16((SEGPTR)ptr[0],2))
+               return FALSE;
+       return TRUE;
+}
index a12ccc4..0a457e5 100644 (file)
@@ -1,9 +1,9 @@
-1 stub GETFILTERINFO\r
-2 stub IMPORTGR\r
-3 stub GETFILTERPREF\r
-4 stub IMPORTEMBEDDEDGR\r
-5 stub QD2GDI\r
-6 stub STATUSPROC\r
-7 stub ENUMFONTFUNC\r
-#8 WEP\r
-#9 ___EXPORTEDSTUB\r
+1 stub GETFILTERINFO
+2 stub IMPORTGR
+3 stub GETFILTERPREF
+4 stub IMPORTEMBEDDEDGR
+5 stub QD2GDI
+6 stub STATUSPROC
+7 stub ENUMFONTFUNC
+#8 WEP
+#9 ___EXPORTEDSTUB
index 75c949e..d3fc613 100644 (file)
@@ -1,12 +1,12 @@
-1 pascal GetUserDefaultLCID() GetUserDefaultLCID16\r
-2 pascal GetSystemDefaultLCID() GetSystemDefaultLCID16\r
-3 pascal -ret16 GetUserDefaultLangID() GetUserDefaultLangID16\r
-4 pascal -ret16 GetSystemDefaultLangID() GetSystemDefaultLangID16\r
-5 pascal GetLocaleInfoA(long long ptr word) GetLocaleInfo16\r
-6 pascal -ret16 LCMapStringA(word long ptr word ptr word) LCMapString16\r
-7 pascal -ret16 GetStringTypeA(long long str word ptr) GetStringType16\r
-8 pascal -ret16 CompareStringA(long long str word str word) CompareString16\r
-9 pascal -ret16 RegisterNLSInfoChanged(ptr) RegisterNLSInfoChanged16\r
-#10 stub WEP\r
-11 stub LIBMAIN\r
-12 stub NOTIFYWINDOWPROC\r
+1 pascal GetUserDefaultLCID() GetUserDefaultLCID16
+2 pascal GetSystemDefaultLCID() GetSystemDefaultLCID16
+3 pascal -ret16 GetUserDefaultLangID() GetUserDefaultLangID16
+4 pascal -ret16 GetSystemDefaultLangID() GetSystemDefaultLangID16
+5 pascal GetLocaleInfoA(long long ptr word) GetLocaleInfo16
+6 pascal -ret16 LCMapStringA(word long ptr word ptr word) LCMapString16
+7 pascal -ret16 GetStringTypeA(long long str word ptr) GetStringType16
+8 pascal -ret16 CompareStringA(long long str word str word) CompareString16
+9 pascal -ret16 RegisterNLSInfoChanged(ptr) RegisterNLSInfoChanged16
+#10 stub WEP
+11 stub LIBMAIN
+12 stub NOTIFYWINDOWPROC
index 909d9ba..3d05d2e 100644 (file)
@@ -1,3 +1,3 @@
-1 stub DLLGETCLASSOBJECT\r
-#2 WEP\r
-#3 ___EXPORTEDSTUB\r
+1 stub DLLGETCLASSOBJECT
+#2 WEP
+#3 ___EXPORTEDSTUB
index 119ee32..7e64f55 100644 (file)
@@ -1,7 +1,7 @@
-#1 stub WEP\r
-2 stub ROT16_ISRUNNING16\r
-3 stub ISWIN32SHANDLE\r
-4 stub ___EXPORTEDSTUB\r
-5 stub COTHKCOMMON\r
-6 stub ROT16_GETTIMEOFLASTCHANGE16\r
-7 stub ROT16_GETOBJECT16\r
+#1 stub WEP
+2 stub ROT16_ISRUNNING16
+3 stub ISWIN32SHANDLE
+4 stub ___EXPORTEDSTUB
+5 stub COTHKCOMMON
+6 stub ROT16_GETTIMEOFLASTCHANGE16
+7 stub ROT16_GETOBJECT16
index 840aca4..86477c1 100644 (file)
-@ stdcall BindMoniker(ptr long ptr ptr)\r
-@ stub CLIPFORMAT_UserFree\r
-@ stub CLIPFORMAT_UserMarshal\r
-@ stub CLIPFORMAT_UserSize\r
-@ stub CLIPFORMAT_UserUnmarshal\r
-@ stdcall CLSIDFromProgID(wstr ptr)\r
-@ stdcall CLSIDFromString(wstr ptr)\r
-@ stdcall CoAddRefServerProcess()\r
-@ stdcall CoBuildVersion()\r
-@ stdcall CoCopyProxy(ptr ptr)\r
-@ stdcall CoCreateFreeThreadedMarshaler(ptr ptr)\r
-@ stdcall CoCreateGuid(ptr)\r
-@ stdcall CoCreateInstance(ptr ptr long ptr ptr)\r
-@ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr)\r
-@ stdcall CoDisconnectObject(ptr long)\r
-@ stdcall CoDosDateTimeToFileTime(long long ptr) kernel32.DosDateTimeToFileTime\r
-@ stdcall CoFileTimeNow(ptr)\r
-@ stdcall CoFileTimeToDosDateTime(ptr ptr ptr) kernel32.FileTimeToDosDateTime\r
-@ stdcall CoFreeAllLibraries()\r
-@ stdcall CoFreeLibrary(long)\r
-@ stdcall CoFreeUnusedLibraries()\r
-@ stub CoGetCallContext           #@ stdcall (ptr ptr) return 0,ERR_NOTIMPLEMENTED\r
-@ stub CoGetCallerTID\r
-@ stdcall CoGetClassObject(ptr long ptr ptr ptr)\r
-@ stub CoGetCurrentLogicalThreadId\r
-@ stdcall CoGetCurrentProcess()\r
-@ stub CoGetInstanceFromFile      #@ stdcall (ptr ptr ptr long wstr long ptr) return 0,ERR_NOTIMPLEMENTED\r
-@ stub CoGetInstanceFromIStorage  #@ stdcall (ptr ptr ptr long ptr long ptr) return 0,ERR_NOTIMPLEMENTED\r
-@ stdcall CoGetInterfaceAndReleaseStream(ptr ptr ptr)\r
-@ stdcall CoGetMalloc(long ptr)\r
-@ stdcall CoGetMarshalSizeMax(ptr ptr ptr long ptr long)\r
-@ stub CoGetObject\r
-@ stdcall CoGetPSClsid(ptr ptr)\r
-@ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr)\r
-@ stdcall CoGetState(ptr)\r
-@ stub CoGetTIDFromIPID\r
-@ stdcall CoGetTreatAsClass(ptr ptr)\r
-@ stub CoImpersonateClient\r
-@ stdcall CoInitialize(ptr)\r
-@ stdcall CoInitializeEx(ptr long)\r
-@ stdcall CoInitializeSecurity(ptr long ptr ptr long long ptr long ptr)\r
-@ stdcall CoInitializeWOW(long long)\r
-@ stdcall CoIsHandlerConnected(ptr)\r
-@ stdcall CoIsOle1Class (ptr)\r
-@ stdcall CoLoadLibrary(wstr long)\r
-@ stdcall CoLockObjectExternal(ptr long long)\r
-@ stdcall CoMarshalHresult(ptr long)\r
-@ stdcall CoMarshalInterThreadInterfaceInStream(ptr ptr ptr)\r
-@ stdcall CoMarshalInterface(ptr ptr ptr long ptr long)\r
-@ stub CoQueryAuthenticationServices\r
-@ stub CoQueryClientBlanket\r
-@ stdcall CoQueryProxyBlanket(ptr ptr ptr ptr ptr ptr ptr ptr)\r
-@ stub CoQueryReleaseObject\r
-@ stub CoRegisterChannelHook\r
-@ stdcall CoRegisterClassObject(ptr ptr long long ptr)\r
-@ stdcall CoRegisterMallocSpy (ptr)\r
-@ stdcall CoRegisterMessageFilter(ptr ptr)\r
-@ stub CoRegisterPSClsid          #@ stdcall (ptr ptr) return 0,ERR_NOTIMPLEMENTED\r
-@ stub CoRegisterSurrogate\r
-@ stdcall CoReleaseMarshalData(ptr)\r
-@ stdcall CoReleaseServerProcess()\r
-@ stdcall CoResumeClassObjects()\r
-@ stub CoRevertToSelf             #@ stdcall () return 0,ERR_NOTIMPLEMENTED\r
-@ stdcall CoRevokeClassObject(long)\r
-@ stdcall CoRevokeMallocSpy()\r
-@ stdcall CoSetProxyBlanket(ptr long long wstr long long ptr long)\r
-@ stdcall CoSetState(ptr)\r
-@ stdcall CoSuspendClassObjects()\r
-@ stub CoSwitchCallContext\r
-@ stdcall CoTaskMemAlloc(long)\r
-@ stdcall CoTaskMemFree(ptr)\r
-@ stdcall CoTaskMemRealloc(ptr long)\r
-@ stdcall CoTreatAsClass(ptr ptr)\r
-@ stdcall CoUninitialize()\r
-@ stub CoUnloadingWOW\r
-@ stdcall CoUnmarshalHresult(ptr ptr)\r
-@ stdcall CoUnmarshalInterface(ptr ptr ptr)\r
-@ stdcall CreateAntiMoniker(ptr)\r
-@ stdcall CreateBindCtx(long ptr)\r
-@ stdcall CreateClassMoniker(ptr ptr)\r
-@ stdcall CreateDataAdviseHolder(ptr)\r
-@ stdcall CreateDataCache(ptr ptr ptr ptr)\r
-@ stdcall CreateErrorInfo(ptr)\r
-@ stdcall CreateFileMoniker(wstr ptr)\r
-@ stdcall CreateGenericComposite(ptr ptr ptr)\r
-@ stdcall CreateILockBytesOnHGlobal(ptr long ptr)\r
-@ stdcall CreateItemMoniker(wstr wstr ptr)\r
-@ stub CreateObjrefMoniker\r
-@ stdcall CreateOleAdviseHolder(ptr)\r
-@ stub CreatePointerMoniker       #@ stdcall (ptr ptr) return 0,ERR_NOTIMPLEMENTED\r
-@ stdcall CreateStreamOnHGlobal(ptr long ptr)\r
-@ stdcall DllDebugObjectRPCHook(long ptr)\r
-@ stdcall -private DllGetClassObject (ptr ptr ptr) OLE32_DllGetClassObject\r
-@ stub DllGetClassObjectWOW\r
-@ stdcall -private DllRegisterServer()\r
-@ stdcall -private DllUnregisterServer()\r
-@ stdcall DoDragDrop(ptr ptr long ptr)\r
-@ stub EnableHookObject\r
-@ stdcall FmtIdToPropStgName(ptr wstr)\r
-@ stdcall FreePropVariantArray(long ptr)\r
-@ stdcall GetClassFile(wstr ptr)\r
-@ stdcall GetConvertStg(ptr)\r
-@ stub GetDocumentBitStg\r
-@ stdcall GetErrorInfo(long ptr)\r
-@ stdcall GetHGlobalFromILockBytes(ptr ptr)\r
-@ stdcall GetHGlobalFromStream(ptr ptr)\r
-@ stub GetHookInterface\r
-@ stdcall GetRunningObjectTable(long ptr)\r
-@ stub HACCEL_UserFree\r
-@ stub HACCEL_UserMarshal\r
-@ stub HACCEL_UserSize\r
-@ stub HACCEL_UserUnmarshal\r
-@ stub HBITMAP_UserFree\r
-@ stub HBITMAP_UserMarshal\r
-@ stub HBITMAP_UserSize\r
-@ stub HBITMAP_UserUnmarshal\r
-@ stub HBRUSH_UserFree\r
-@ stub HBRUSH_UserMarshal\r
-@ stub HBRUSH_UserSize\r
-@ stub HBRUSH_UserUnmarshal\r
-@ stub HENHMETAFILE_UserFree\r
-@ stub HENHMETAFILE_UserMarshal\r
-@ stub HENHMETAFILE_UserSize\r
-@ stub HENHMETAFILE_UserUnmarshal\r
-@ stub HGLOBAL_UserFree\r
-@ stub HGLOBAL_UserMarshal\r
-@ stub HGLOBAL_UserSize\r
-@ stub HGLOBAL_UserUnmarshal\r
-@ stub HMENU_UserFree\r
-@ stub HMENU_UserMarshal\r
-@ stub HMENU_UserSize\r
-@ stub HMENU_UserUnmarshal\r
-@ stub HMETAFILEPICT_UserFree\r
-@ stub HMETAFILEPICT_UserMarshal\r
-@ stub HMETAFILEPICT_UserSize\r
-@ stub HMETAFILEPICT_UserUnmarshal\r
-@ stub HMETAFILE_UserFree\r
-@ stub HMETAFILE_UserMarshal\r
-@ stub HMETAFILE_UserSize\r
-@ stub HMETAFILE_UserUnmarshal\r
-@ stub HPALETTE_UserFree\r
-@ stub HPALETTE_UserMarshal\r
-@ stub HPALETTE_UserSize\r
-@ stub HPALETTE_UserUnmarshal\r
-@ stub HWND_UserFree\r
-@ stub HWND_UserMarshal\r
-@ stub HWND_UserSize\r
-@ stub HWND_UserUnmarshal\r
-@ stdcall IIDFromString(wstr ptr) CLSIDFromString\r
-@ stub I_RemoteMain\r
-@ stdcall IsAccelerator(long long ptr long)\r
-@ stdcall IsEqualGUID(ptr ptr)\r
-@ stub IsValidIid\r
-@ stdcall IsValidInterface(ptr)\r
-@ stub IsValidPtrIn\r
-@ stub IsValidPtrOut\r
-@ stdcall MkParseDisplayName(ptr ptr ptr ptr)\r
-@ stdcall MonikerCommonPrefixWith(ptr ptr ptr)\r
-@ stub MonikerRelativePathTo\r
-@ stdcall OleBuildVersion()\r
-@ stdcall OleConvertIStorageToOLESTREAM(ptr ptr)\r
-@ stub OleConvertIStorageToOLESTREAMEx\r
-@ stdcall OleConvertOLESTREAMToIStorage(ptr ptr ptr)\r
-@ stub OleConvertOLESTREAMToIStorageEx\r
-@ stdcall OleCreate(ptr ptr long ptr ptr ptr ptr)\r
-@ stdcall OleCreateDefaultHandler(ptr ptr ptr ptr)\r
-@ stub OleCreateEmbeddingHelper\r
-@ stub OleCreateEx\r
-@ stdcall OleCreateFromData(ptr ptr long ptr ptr ptr ptr)\r
-@ stub OleCreateFromDataEx\r
-@ stdcall OleCreateFromFile(ptr ptr ptr long ptr ptr ptr ptr)\r
-@ stub OleCreateFromFileEx\r
-@ stdcall OleCreateLink(ptr ptr long ptr ptr ptr ptr)\r
-@ stub OleCreateLinkEx\r
-@ stdcall OleCreateLinkFromData(ptr ptr long ptr ptr ptr ptr)\r
-@ stub OleCreateLinkFromDataEx\r
-@ stdcall OleCreateLinkToFile(ptr ptr long ptr ptr ptr ptr)\r
-@ stub OleCreateLinkToFileEx\r
-@ stdcall OleCreateMenuDescriptor(long ptr)\r
-@ stdcall OleCreateStaticFromData(ptr ptr long ptr ptr ptr ptr)\r
-@ stdcall OleDestroyMenuDescriptor(long)\r
-@ stdcall OleDoAutoConvert(ptr ptr)\r
-@ stdcall OleDraw(ptr long long ptr)\r
-@ stdcall OleDuplicateData(long long long)\r
-@ stdcall OleFlushClipboard()\r
-@ stdcall OleGetAutoConvert(ptr ptr)\r
-@ stdcall OleGetClipboard(ptr)\r
-@ stdcall OleGetIconOfClass(ptr ptr long)\r
-@ stub OleGetIconOfFile\r
-@ stdcall OleInitialize(ptr)\r
-@ stdcall OleInitializeWOW(long)\r
-@ stdcall OleIsCurrentClipboard(ptr)\r
-@ stdcall OleIsRunning(ptr)\r
-@ stdcall OleLoad(ptr ptr ptr ptr)\r
-@ stdcall OleLoadFromStream(ptr ptr ptr)\r
-@ stdcall OleLockRunning(ptr long long)\r
-@ stdcall OleMetafilePictFromIconAndLabel(long ptr ptr long)\r
-@ stub OleNoteObjectVisible\r
-@ stdcall OleQueryCreateFromData(ptr)\r
-@ stdcall OleQueryLinkFromData(ptr)\r
-@ stdcall OleRegEnumFormatEtc(ptr long ptr)\r
-@ stdcall OleRegEnumVerbs(long ptr)\r
-@ stdcall OleRegGetMiscStatus(ptr long ptr)\r
-@ stdcall OleRegGetUserType(long long ptr)\r
-@ stdcall OleRun(ptr)\r
-@ stdcall OleSave(ptr ptr long)\r
-@ stdcall OleSaveToStream(ptr ptr)\r
-@ stdcall OleSetAutoConvert(ptr ptr)\r
-@ stdcall OleSetClipboard(ptr)\r
-@ stdcall OleSetContainedObject(ptr long)\r
-@ stdcall OleSetMenuDescriptor(long long long ptr ptr)\r
-@ stdcall OleTranslateAccelerator(ptr ptr ptr)\r
-@ stdcall OleUninitialize()\r
-@ stub OpenOrCreateStream\r
-@ stdcall ProgIDFromCLSID(ptr ptr)\r
-@ stdcall PropStgNameToFmtId(wstr ptr)\r
-@ stdcall PropSysAllocString(wstr)\r
-@ stdcall PropSysFreeString(wstr)\r
-@ stdcall PropVariantClear(ptr)\r
-@ stdcall PropVariantCopy(ptr ptr)\r
-@ stdcall ReadClassStg(ptr ptr)\r
-@ stdcall ReadClassStm(ptr ptr)\r
-@ stdcall ReadFmtUserTypeStg(ptr ptr ptr)\r
-@ stub ReadOleStg\r
-@ stub ReadStringStream\r
-@ stdcall RegisterDragDrop(long ptr)\r
-@ stdcall ReleaseStgMedium(ptr)\r
-@ stdcall RevokeDragDrop(long)\r
-@ stub SNB_UserFree\r
-@ stub SNB_UserMarshal\r
-@ stub SNB_UserSize\r
-@ stub SNB_UserUnmarshal\r
-@ stub STGMEDIUM_UserFree\r
-@ stub STGMEDIUM_UserMarshal\r
-@ stub STGMEDIUM_UserSize\r
-@ stub STGMEDIUM_UserUnmarshal\r
-@ stdcall SetConvertStg(ptr long)\r
-@ stub SetDocumentBitStg\r
-@ stdcall SetErrorInfo(long ptr)\r
-@ stdcall StgCreateDocfile(wstr long long ptr)\r
-@ stdcall StgCreateDocfileOnILockBytes(ptr long long ptr)\r
-@ stdcall StgCreatePropSetStg(ptr long ptr)\r
-@ stdcall StgCreateStorageEx(wstr long long long ptr ptr ptr ptr)\r
-@ stub StgGetIFillLockBytesOnFile\r
-@ stub StgGetIFillLockBytesOnILockBytes\r
-@ stdcall StgIsStorageFile(wstr)\r
-@ stdcall StgIsStorageILockBytes(ptr)\r
-@ stub StgOpenAsyncDocfileOnIFillLockBytes\r
-@ stdcall StgOpenStorage(wstr ptr long ptr long ptr)\r
-@ stdcall StgOpenStorageEx(wstr long long long ptr ptr ptr ptr)\r
-@ stdcall StgOpenStorageOnILockBytes(ptr ptr long long long ptr)\r
-@ stdcall StgSetTimes(wstr ptr ptr ptr )\r
-@ stdcall StringFromCLSID(ptr ptr)\r
-@ stdcall StringFromGUID2(ptr ptr long)\r
-@ stdcall StringFromIID(ptr ptr) StringFromCLSID\r
-@ stub UpdateDCOMSettings\r
-@ stub UtConvertDvtd16toDvtd32\r
-@ stub UtConvertDvtd32toDvtd16\r
-@ stub UtGetDvtd16Info\r
-@ stub UtGetDvtd32Info\r
-@ stub WdtpInterfacePointer_UserFree\r
-@ stub WdtpInterfacePointer_UserMarshal\r
-@ stub WdtpInterfacePointer_UserSize\r
-@ stub WdtpInterfacePointer_UserUnmarshal\r
-@ stdcall WriteClassStg(ptr ptr)\r
-@ stdcall WriteClassStm(ptr ptr)\r
-@ stdcall WriteFmtUserTypeStg(ptr long ptr)\r
-@ stub WriteOleStg\r
-@ stub WriteStringStream\r
+@ stdcall BindMoniker(ptr long ptr ptr)
+@ stub CLIPFORMAT_UserFree
+@ stub CLIPFORMAT_UserMarshal
+@ stub CLIPFORMAT_UserSize
+@ stub CLIPFORMAT_UserUnmarshal
+@ stdcall CLSIDFromProgID(wstr ptr)
+@ stdcall CLSIDFromString(wstr ptr)
+@ stdcall CoAddRefServerProcess()
+@ stdcall CoBuildVersion()
+@ stdcall CoCopyProxy(ptr ptr)
+@ stdcall CoCreateFreeThreadedMarshaler(ptr ptr)
+@ stdcall CoCreateGuid(ptr)
+@ stdcall CoCreateInstance(ptr ptr long ptr ptr)
+@ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr)
+@ stdcall CoDisconnectObject(ptr long)
+@ stdcall CoDosDateTimeToFileTime(long long ptr) kernel32.DosDateTimeToFileTime
+@ stdcall CoFileTimeNow(ptr)
+@ stdcall CoFileTimeToDosDateTime(ptr ptr ptr) kernel32.FileTimeToDosDateTime
+@ stdcall CoFreeAllLibraries()
+@ stdcall CoFreeLibrary(long)
+@ stdcall CoFreeUnusedLibraries()
+@ stub CoGetCallContext           #@ stdcall (ptr ptr) return 0,ERR_NOTIMPLEMENTED
+@ stub CoGetCallerTID
+@ stdcall CoGetClassObject(ptr long ptr ptr ptr)
+@ stub CoGetCurrentLogicalThreadId
+@ stdcall CoGetCurrentProcess()
+@ stub CoGetInstanceFromFile      #@ stdcall (ptr ptr ptr long wstr long ptr) return 0,ERR_NOTIMPLEMENTED
+@ stub CoGetInstanceFromIStorage  #@ stdcall (ptr ptr ptr long ptr long ptr) return 0,ERR_NOTIMPLEMENTED
+@ stdcall CoGetInterfaceAndReleaseStream(ptr ptr ptr)
+@ stdcall CoGetMalloc(long ptr)
+@ stdcall CoGetMarshalSizeMax(ptr ptr ptr long ptr long)
+@ stub CoGetObject
+@ stdcall CoGetPSClsid(ptr ptr)
+@ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr)
+@ stdcall CoGetState(ptr)
+@ stub CoGetTIDFromIPID
+@ stdcall CoGetTreatAsClass(ptr ptr)
+@ stub CoImpersonateClient
+@ stdcall CoInitialize(ptr)
+@ stdcall CoInitializeEx(ptr long)
+@ stdcall CoInitializeSecurity(ptr long ptr ptr long long ptr long ptr)
+@ stdcall CoInitializeWOW(long long)
+@ stdcall CoIsHandlerConnected(ptr)
+@ stdcall CoIsOle1Class (ptr)
+@ stdcall CoLoadLibrary(wstr long)
+@ stdcall CoLockObjectExternal(ptr long long)
+@ stdcall CoMarshalHresult(ptr long)
+@ stdcall CoMarshalInterThreadInterfaceInStream(ptr ptr ptr)
+@ stdcall CoMarshalInterface(ptr ptr ptr long ptr long)
+@ stub CoQueryAuthenticationServices
+@ stub CoQueryClientBlanket
+@ stdcall CoQueryProxyBlanket(ptr ptr ptr ptr ptr ptr ptr ptr)
+@ stub CoQueryReleaseObject
+@ stub CoRegisterChannelHook
+@ stdcall CoRegisterClassObject(ptr ptr long long ptr)
+@ stdcall CoRegisterMallocSpy (ptr)
+@ stdcall CoRegisterMessageFilter(ptr ptr)
+@ stub CoRegisterPSClsid          #@ stdcall (ptr ptr) return 0,ERR_NOTIMPLEMENTED
+@ stub CoRegisterSurrogate
+@ stdcall CoReleaseMarshalData(ptr)
+@ stdcall CoReleaseServerProcess()
+@ stdcall CoResumeClassObjects()
+@ stub CoRevertToSelf             #@ stdcall () return 0,ERR_NOTIMPLEMENTED
+@ stdcall CoRevokeClassObject(long)
+@ stdcall CoRevokeMallocSpy()
+@ stdcall CoSetProxyBlanket(ptr long long wstr long long ptr long)
+@ stdcall CoSetState(ptr)
+@ stdcall CoSuspendClassObjects()
+@ stub CoSwitchCallContext
+@ stdcall CoTaskMemAlloc(long)
+@ stdcall CoTaskMemFree(ptr)
+@ stdcall CoTaskMemRealloc(ptr long)
+@ stdcall CoTreatAsClass(ptr ptr)
+@ stdcall CoUninitialize()
+@ stub CoUnloadingWOW
+@ stdcall CoUnmarshalHresult(ptr ptr)
+@ stdcall CoUnmarshalInterface(ptr ptr ptr)
+@ stdcall CreateAntiMoniker(ptr)
+@ stdcall CreateBindCtx(long ptr)
+@ stdcall CreateClassMoniker(ptr ptr)
+@ stdcall CreateDataAdviseHolder(ptr)
+@ stdcall CreateDataCache(ptr ptr ptr ptr)
+@ stdcall CreateErrorInfo(ptr)
+@ stdcall CreateFileMoniker(wstr ptr)
+@ stdcall CreateGenericComposite(ptr ptr ptr)
+@ stdcall CreateILockBytesOnHGlobal(ptr long ptr)
+@ stdcall CreateItemMoniker(wstr wstr ptr)
+@ stub CreateObjrefMoniker
+@ stdcall CreateOleAdviseHolder(ptr)
+@ stub CreatePointerMoniker       #@ stdcall (ptr ptr) return 0,ERR_NOTIMPLEMENTED
+@ stdcall CreateStreamOnHGlobal(ptr long ptr)
+@ stdcall DllDebugObjectRPCHook(long ptr)
+@ stdcall -private DllGetClassObject (ptr ptr ptr) OLE32_DllGetClassObject
+@ stub DllGetClassObjectWOW
+@ stdcall -private DllRegisterServer()
+@ stdcall -private DllUnregisterServer()
+@ stdcall DoDragDrop(ptr ptr long ptr)
+@ stub EnableHookObject
+@ stdcall FmtIdToPropStgName(ptr wstr)
+@ stdcall FreePropVariantArray(long ptr)
+@ stdcall GetClassFile(wstr ptr)
+@ stdcall GetConvertStg(ptr)
+@ stub GetDocumentBitStg
+@ stdcall GetErrorInfo(long ptr)
+@ stdcall GetHGlobalFromILockBytes(ptr ptr)
+@ stdcall GetHGlobalFromStream(ptr ptr)
+@ stub GetHookInterface
+@ stdcall GetRunningObjectTable(long ptr)
+@ stub HACCEL_UserFree
+@ stub HACCEL_UserMarshal
+@ stub HACCEL_UserSize
+@ stub HACCEL_UserUnmarshal
+@ stub HBITMAP_UserFree
+@ stub HBITMAP_UserMarshal
+@ stub HBITMAP_UserSize
+@ stub HBITMAP_UserUnmarshal
+@ stub HBRUSH_UserFree
+@ stub HBRUSH_UserMarshal
+@ stub HBRUSH_UserSize
+@ stub HBRUSH_UserUnmarshal
+@ stub HENHMETAFILE_UserFree
+@ stub HENHMETAFILE_UserMarshal
+@ stub HENHMETAFILE_UserSize
+@ stub HENHMETAFILE_UserUnmarshal
+@ stub HGLOBAL_UserFree
+@ stub HGLOBAL_UserMarshal
+@ stub HGLOBAL_UserSize
+@ stub HGLOBAL_UserUnmarshal
+@ stub HMENU_UserFree
+@ stub HMENU_UserMarshal
+@ stub HMENU_UserSize
+@ stub HMENU_UserUnmarshal
+@ stub HMETAFILEPICT_UserFree
+@ stub HMETAFILEPICT_UserMarshal
+@ stub HMETAFILEPICT_UserSize
+@ stub HMETAFILEPICT_UserUnmarshal
+@ stub HMETAFILE_UserFree
+@ stub HMETAFILE_UserMarshal
+@ stub HMETAFILE_UserSize
+@ stub HMETAFILE_UserUnmarshal
+@ stub HPALETTE_UserFree
+@ stub HPALETTE_UserMarshal
+@ stub HPALETTE_UserSize
+@ stub HPALETTE_UserUnmarshal
+@ stub HWND_UserFree
+@ stub HWND_UserMarshal
+@ stub HWND_UserSize
+@ stub HWND_UserUnmarshal
+@ stdcall IIDFromString(wstr ptr) CLSIDFromString
+@ stub I_RemoteMain
+@ stdcall IsAccelerator(long long ptr long)
+@ stdcall IsEqualGUID(ptr ptr)
+@ stub IsValidIid
+@ stdcall IsValidInterface(ptr)
+@ stub IsValidPtrIn
+@ stub IsValidPtrOut
+@ stdcall MkParseDisplayName(ptr ptr ptr ptr)
+@ stdcall MonikerCommonPrefixWith(ptr ptr ptr)
+@ stub MonikerRelativePathTo
+@ stdcall OleBuildVersion()
+@ stdcall OleConvertIStorageToOLESTREAM(ptr ptr)
+@ stub OleConvertIStorageToOLESTREAMEx
+@ stdcall OleConvertOLESTREAMToIStorage(ptr ptr ptr)
+@ stub OleConvertOLESTREAMToIStorageEx
+@ stdcall OleCreate(ptr ptr long ptr ptr ptr ptr)
+@ stdcall OleCreateDefaultHandler(ptr ptr ptr ptr)
+@ stub OleCreateEmbeddingHelper
+@ stub OleCreateEx
+@ stdcall OleCreateFromData(ptr ptr long ptr ptr ptr ptr)
+@ stub OleCreateFromDataEx
+@ stdcall OleCreateFromFile(ptr ptr ptr long ptr ptr ptr ptr)
+@ stub OleCreateFromFileEx
+@ stdcall OleCreateLink(ptr ptr long ptr ptr ptr ptr)
+@ stub OleCreateLinkEx
+@ stdcall OleCreateLinkFromData(ptr ptr long ptr ptr ptr ptr)
+@ stub OleCreateLinkFromDataEx
+@ stdcall OleCreateLinkToFile(ptr ptr long ptr ptr ptr ptr)
+@ stub OleCreateLinkToFileEx
+@ stdcall OleCreateMenuDescriptor(long ptr)
+@ stdcall OleCreateStaticFromData(ptr ptr long ptr ptr ptr ptr)
+@ stdcall OleDestroyMenuDescriptor(long)
+@ stdcall OleDoAutoConvert(ptr ptr)
+@ stdcall OleDraw(ptr long long ptr)
+@ stdcall OleDuplicateData(long long long)
+@ stdcall OleFlushClipboard()
+@ stdcall OleGetAutoConvert(ptr ptr)
+@ stdcall OleGetClipboard(ptr)
+@ stdcall OleGetIconOfClass(ptr ptr long)
+@ stub OleGetIconOfFile
+@ stdcall OleInitialize(ptr)
+@ stdcall OleInitializeWOW(long long)
+@ stdcall OleIsCurrentClipboard(ptr)
+@ stdcall OleIsRunning(ptr)
+@ stdcall OleLoad(ptr ptr ptr ptr)
+@ stdcall OleLoadFromStream(ptr ptr ptr)
+@ stdcall OleLockRunning(ptr long long)
+@ stdcall OleMetafilePictFromIconAndLabel(long ptr ptr long)
+@ stub OleNoteObjectVisible
+@ stdcall OleQueryCreateFromData(ptr)
+@ stdcall OleQueryLinkFromData(ptr)
+@ stdcall OleRegEnumFormatEtc(ptr long ptr)
+@ stdcall OleRegEnumVerbs(long ptr)
+@ stdcall OleRegGetMiscStatus(ptr long ptr)
+@ stdcall OleRegGetUserType(long long ptr)
+@ stdcall OleRun(ptr)
+@ stdcall OleSave(ptr ptr long)
+@ stdcall OleSaveToStream(ptr ptr)
+@ stdcall OleSetAutoConvert(ptr ptr)
+@ stdcall OleSetClipboard(ptr)
+@ stdcall OleSetContainedObject(ptr long)
+@ stdcall OleSetMenuDescriptor(long long long ptr ptr)
+@ stdcall OleTranslateAccelerator(ptr ptr ptr)
+@ stdcall OleUninitialize()
+@ stub OpenOrCreateStream
+@ stdcall ProgIDFromCLSID(ptr ptr)
+@ stdcall PropStgNameToFmtId(wstr ptr)
+@ stdcall PropSysAllocString(wstr)
+@ stdcall PropSysFreeString(wstr)
+@ stdcall PropVariantClear(ptr)
+@ stdcall PropVariantCopy(ptr ptr)
+@ stdcall ReadClassStg(ptr ptr)
+@ stdcall ReadClassStm(ptr ptr)
+@ stdcall ReadFmtUserTypeStg(ptr ptr ptr)
+@ stub ReadOleStg
+@ stub ReadStringStream
+@ stdcall RegisterDragDrop(long ptr)
+@ stdcall ReleaseStgMedium(ptr)
+@ stdcall RevokeDragDrop(long)
+@ stub SNB_UserFree
+@ stub SNB_UserMarshal
+@ stub SNB_UserSize
+@ stub SNB_UserUnmarshal
+@ stub STGMEDIUM_UserFree
+@ stub STGMEDIUM_UserMarshal
+@ stub STGMEDIUM_UserSize
+@ stub STGMEDIUM_UserUnmarshal
+@ stdcall SetConvertStg(ptr long)
+@ stub SetDocumentBitStg
+@ stdcall SetErrorInfo(long ptr)
+@ stdcall StgCreateDocfile(wstr long long ptr)
+@ stdcall StgCreateDocfileOnILockBytes(ptr long long ptr)
+@ stdcall StgCreatePropSetStg(ptr long ptr)
+@ stdcall StgCreateStorageEx(wstr long long long ptr ptr ptr ptr)
+@ stub StgGetIFillLockBytesOnFile
+@ stub StgGetIFillLockBytesOnILockBytes
+@ stdcall StgIsStorageFile(wstr)
+@ stdcall StgIsStorageILockBytes(ptr)
+@ stub StgOpenAsyncDocfileOnIFillLockBytes
+@ stdcall StgOpenStorage(wstr ptr long ptr long ptr)
+@ stdcall StgOpenStorageEx(wstr long long long ptr ptr ptr ptr)
+@ stdcall StgOpenStorageOnILockBytes(ptr ptr long long long ptr)
+@ stdcall StgSetTimes(wstr ptr ptr ptr )
+@ stdcall StringFromCLSID(ptr ptr)
+@ stdcall StringFromGUID2(ptr ptr long)
+@ stdcall StringFromIID(ptr ptr) StringFromCLSID
+@ stub UpdateDCOMSettings
+@ stub UtConvertDvtd16toDvtd32
+@ stub UtConvertDvtd32toDvtd16
+@ stub UtGetDvtd16Info
+@ stub UtGetDvtd32Info
+@ stub WdtpInterfacePointer_UserFree
+@ stub WdtpInterfacePointer_UserMarshal
+@ stub WdtpInterfacePointer_UserSize
+@ stub WdtpInterfacePointer_UserUnmarshal
+@ stdcall WriteClassStg(ptr ptr)
+@ stdcall WriteClassStm(ptr ptr)
+@ stdcall WriteFmtUserTypeStg(ptr long ptr)
+@ stub WriteOleStg
+@ stub WriteStringStream
index eb630bc..0c77121 100644 (file)
@@ -43,7 +43,7 @@ typedef struct OleAdviseHolderImpl
 {
   const IOleAdviseHolderVtbl *lpVtbl;
 
-  DWORD ref;
+  LONG ref;
 
   DWORD         maxSinks;
   IAdviseSink** arrayOfSinks;
@@ -357,7 +357,7 @@ typedef struct DataAdviseHolder
 {
   const IDataAdviseHolderVtbl *lpVtbl;
 
-  DWORD                 ref;
+  LONG                  ref;
   DWORD                 maxCons;
   DataAdviseConnection* Connections;
 } DataAdviseHolder;
index 60a0807..48cd6a3 100644 (file)
@@ -89,7 +89,7 @@ const CLSID CLSID_PSFactoryBuffer = { 0x00000320, 0, 0, {0xc0, 0, 0, 0, 0, 0, 0,
  */
 typedef struct _CFStub {
     const IRpcStubBufferVtbl   *lpvtbl;
-    DWORD                      ref;
+    LONG                       ref;
 
     LPUNKNOWN                  pUnkServer;
 } CFStub;
@@ -117,7 +117,10 @@ CFStub_Release(LPRPCSTUBBUFFER iface) {
     ULONG ref;
 
     ref = InterlockedDecrement(&This->ref);
-    if (!ref) HeapFree(GetProcessHeap(),0,This);
+    if (!ref) {
+        IRpcStubBuffer_Disconnect(iface);
+        HeapFree(GetProcessHeap(),0,This);
+    }
     return ref;
 }
 
@@ -134,9 +137,12 @@ static void WINAPI
 CFStub_Disconnect(LPRPCSTUBBUFFER iface) {
     CFStub *This = (CFStub *)iface;
 
-    IUnknown_Release(This->pUnkServer);
-    This->pUnkServer = NULL;
+    if (This->pUnkServer) {
+        IUnknown_Release(This->pUnkServer);
+        This->pUnkServer = NULL;
+    }
 }
+
 static HRESULT WINAPI
 CFStub_Invoke(
     LPRPCSTUBBUFFER iface,RPCOLEMESSAGE* msg,IRpcChannelBuffer* chanbuf
@@ -269,7 +275,7 @@ CFStub_Construct(LPRPCSTUBBUFFER *ppv) {
 typedef struct _CFProxy {
     const IClassFactoryVtbl            *lpvtbl_cf;
     const IRpcProxyBufferVtbl  *lpvtbl_proxy;
-    DWORD                              ref;
+    LONG                               ref;
 
     IRpcChannelBuffer                  *chanbuf;
     IUnknown *outer_unknown;
@@ -460,7 +466,7 @@ CFProxy_Construct(IUnknown *pUnkOuter, LPVOID *ppv,LPVOID *ppProxy) {
 typedef struct
 {
     const IRpcStubBufferVtbl *lpVtbl;
-    ULONG refs;
+    LONG refs;
     IRemUnknown *iface;
 } RemUnkStub;
 
@@ -546,12 +552,15 @@ static HRESULT WINAPI RemUnkStub_Invoke(LPRPCSTUBBUFFER iface,
     hr = IRemUnknown_RemQueryInterface(This->iface, &ipid, cRefs, cIids, iids, &pQIResults);
 
     /* out */
-    pMsg->cbBuffer = cIids * sizeof(REMQIRESULT);
+    pMsg->cbBuffer = cIids * sizeof(REMQIRESULT) + sizeof(HRESULT);
 
     I_RpcGetBuffer((RPC_MESSAGE *)pMsg);
-    if (hr) return hr;
 
     buf = pMsg->Buffer;
+    *(HRESULT *)buf = hr;
+    buf += sizeof(HRESULT);
+    
+    if (hr) return hr;
     /* FIXME: pQIResults is a unique pointer so pQIResults can be NULL! */
     memcpy(buf, pQIResults, cIids * sizeof(REMQIRESULT));
 
@@ -655,7 +664,7 @@ static HRESULT RemUnkStub_Construct(IRpcStubBuffer **ppStub)
     RemUnkStub *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
     if (!This) return E_OUTOFMEMORY;
     This->lpVtbl = &RemUnkStub_VTable;
-    This->refs = 0;
+    This->refs = 1;
     This->iface = NULL;
     *ppStub = (IRpcStubBuffer*)This;
     return S_OK;
@@ -665,7 +674,7 @@ static HRESULT RemUnkStub_Construct(IRpcStubBuffer **ppStub)
 typedef struct _RemUnkProxy {
     const IRemUnknownVtbl              *lpvtbl_remunk;
     const IRpcProxyBufferVtbl  *lpvtbl_proxy;
-    DWORD                              refs;
+    LONG                               refs;
 
     IRpcChannelBuffer                  *chan;
     IUnknown *outer_unknown;
@@ -745,8 +754,14 @@ static HRESULT WINAPI RemUnkProxy_RemQueryInterface(LPREMUNKNOWN iface,
 
     hr = IRpcChannelBuffer_SendReceive(This->chan, &msg, &status);
 
+    buf = msg.Buffer;
+
+    if (SUCCEEDED(hr)) {
+        hr = *(HRESULT *)buf;
+        buf += sizeof(HRESULT);
+    }
+
     if (SUCCEEDED(hr)) {
-      buf = msg.Buffer;
       *ppQIResults = CoTaskMemAlloc(cIids*sizeof(REMQIRESULT));
       memcpy(*ppQIResults, buf, cIids*sizeof(REMQIRESULT));
     }
index da9535d..a867a9b 100644 (file)
@@ -88,7 +88,7 @@ static inline void get_rpc_endpoint(LPWSTR endpoint, const OXID *oxid)
 typedef struct
 {
     const IRpcChannelBufferVtbl *lpVtbl;
-    DWORD                  refs;
+    LONG                  refs;
 } RpcChannelBuffer;
 
 typedef struct
@@ -212,11 +212,15 @@ static DWORD WINAPI rpc_sendreceive_thread(LPVOID param)
 static HRESULT WINAPI RpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus)
 {
     HRESULT hr = S_OK;
+    RPC_MESSAGE *msg = (RPC_MESSAGE *)olemsg;
     RPC_STATUS status;
     DWORD index;
     struct dispatch_params *params;
     DWORD tid;
-    
+    IRpcStubBuffer *stub;
+    APARTMENT *apt;
+    IPID ipid;
+
     TRACE("(%p) iMethod=%ld\n", olemsg, olemsg->iMethod);
 
     params = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*params));
@@ -225,18 +229,43 @@ static HRESULT WINAPI RpcChannelBuffer_SendReceive(LPRPCCHANNELBUFFER iface, RPC
     params->msg = olemsg;
     params->status = RPC_S_OK;
 
-    /* we use a separate thread here because we need to be able to
-     * pump the message loop in the application thread: if we do not,
-     * any windows created by this thread will hang and RPCs that try
-     * and re-enter this STA from an incoming server thread will
-     * deadlock. InstallShield is an example of that.
-     */
-    params->handle = CreateThread(NULL, 0, rpc_sendreceive_thread, params, 0, &tid);
-    if (!params->handle)
+    /* Note: this is an optimization in the Microsoft OLE runtime that we need
+     * to copy, as shown by the test_no_couninitialize_client test. without
+     * short-circuiting the RPC runtime in the case below, the test will
+     * deadlock on the loader lock due to the RPC runtime needing to create
+     * a thread to process the RPC when this function is called indirectly
+     * from DllMain */
+
+    RpcBindingInqObject(msg->Handle, &ipid);
+    stub = ipid_to_apt_and_stubbuffer(&ipid, &apt);
+    if (apt && (apt->model & COINIT_APARTMENTTHREADED))
     {
-        ERR("Could not create RpcSendReceive thread, error %lx\n", GetLastError());
-        hr = E_UNEXPECTED;
+        params->stub = stub;
+        params->chan = NULL; /* FIXME: pass server channel */
+        params->handle = CreateEventW(NULL, FALSE, FALSE, NULL);
+
+        TRACE("Calling apartment thread 0x%08lx...\n", apt->tid);
+
+        PostMessageW(apt->win, DM_EXECUTERPC, 0, (LPARAM)params);
+    }
+    else
+    {
+        if (stub) IRpcStubBuffer_Release(stub);
+
+        /* we use a separate thread here because we need to be able to
+         * pump the message loop in the application thread: if we do not,
+         * any windows created by this thread will hang and RPCs that try
+         * and re-enter this STA from an incoming server thread will
+         * deadlock. InstallShield is an example of that.
+         */
+        params->handle = CreateThread(NULL, 0, rpc_sendreceive_thread, params, 0, &tid);
+        if (!params->handle)
+        {
+            ERR("Could not create RpcSendReceive thread, error %lx\n", GetLastError());
+            hr = E_UNEXPECTED;
+        }
     }
+    if (apt) apartment_release(apt);
 
     if (hr == S_OK)
         hr = CoWaitForMultipleHandles(0, INFINITE, 1, &params->handle, &index);
@@ -431,7 +460,7 @@ static void __RPC_STUB dispatch_rpc(RPC_MESSAGE *msg)
     if (!apt || !stub)
     {
         if (apt) apartment_release(apt);
-        /* ipid_to_apt_and_stubbuffer will already have logged the error */
+        ERR("no apartment found for ipid %s\n", debugstr_guid(&ipid));
         return RpcRaiseException(RPC_E_DISCONNECTED);
     }
 
index aab99dd..fe6d1fb 100644 (file)
@@ -155,7 +155,7 @@ static const IPropertyStorageVtbl IPropertyStorage_Vtbl;
 typedef struct tagPropertyStorage_impl
 {
     const IPropertyStorageVtbl *vtbl;
-    DWORD ref;
+    LONG ref;
     CRITICAL_SECTION cs;
     IStream *stm;
     BOOL  dirty;
index 715c3e6..626d55f 100644 (file)
@@ -956,7 +956,7 @@ typedef struct
 {
         /* IUnknown fields */
         const IStream16Vtbl            *lpVtbl;
-        DWORD                           ref;
+        LONG                            ref;
         /* IStream16 fields */
         SEGPTR                          thisptr; /* pointer to this struct as segmented */
         struct storage_pps_entry        stde;
@@ -968,7 +968,7 @@ typedef struct
 /******************************************************************************
  *             IStream16_QueryInterface        [STORAGE.518]
  */
-HRESULT WINAPI IStream16_fnQueryInterface(
+HRESULT IStream16_fnQueryInterface(
        IStream16* iface,REFIID refiid,LPVOID *obj
 ) {
        IStream16Impl *This = (IStream16Impl *)iface;
@@ -984,7 +984,7 @@ HRESULT WINAPI IStream16_fnQueryInterface(
 /******************************************************************************
  * IStream16_AddRef [STORAGE.519]
  */
-ULONG WINAPI IStream16_fnAddRef(IStream16* iface) {
+ULONG IStream16_fnAddRef(IStream16* iface) {
        IStream16Impl *This = (IStream16Impl *)iface;
        return InterlockedIncrement(&This->ref);
 }
@@ -992,7 +992,7 @@ ULONG WINAPI IStream16_fnAddRef(IStream16* iface) {
 /******************************************************************************
  * IStream16_Release [STORAGE.520]
  */
-ULONG WINAPI IStream16_fnRelease(IStream16* iface) {
+ULONG IStream16_fnRelease(IStream16* iface) {
        IStream16Impl *This = (IStream16Impl *)iface;
         ULONG ref;
        FlushFileBuffers(This->hf);
@@ -1011,7 +1011,7 @@ ULONG WINAPI IStream16_fnRelease(IStream16* iface) {
  * FIXME
  *    Does not handle 64 bits
  */
-HRESULT WINAPI IStream16_fnSeek(
+HRESULT IStream16_fnSeek(
        IStream16* iface,LARGE_INTEGER offset,DWORD whence,ULARGE_INTEGER *newpos
 ) {
        IStream16Impl *This = (IStream16Impl *)iface;
@@ -1055,7 +1055,7 @@ HRESULT WINAPI IStream16_fnSeek(
 /******************************************************************************
  *             IStream16_Read  [STORAGE.521]
  */
-HRESULT WINAPI IStream16_fnRead(
+HRESULT IStream16_fnRead(
         IStream16* iface,void  *pv,ULONG cb,ULONG  *pcbRead
 ) {
        IStream16Impl *This = (IStream16Impl *)iface;
@@ -1117,7 +1117,7 @@ HRESULT WINAPI IStream16_fnRead(
 /******************************************************************************
  *             IStream16_Write [STORAGE.522]
  */
-HRESULT WINAPI IStream16_fnWrite(
+HRESULT IStream16_fnWrite(
         IStream16* iface,const void *pv,ULONG cb,ULONG *pcbWrite
 ) {
        IStream16Impl *This = (IStream16Impl *)iface;
@@ -1450,7 +1450,7 @@ typedef struct
 {
         /* IUnknown fields */
         const IStreamVtbl              *lpVtbl;
-        DWORD                           ref;
+        LONG                            ref;
         /* IStream32 fields */
         struct storage_pps_entry        stde;
         int                             ppsent;
@@ -1504,7 +1504,7 @@ typedef struct
 {
         /* IUnknown fields */
         const IStorage16Vtbl           *lpVtbl;
-        DWORD                           ref;
+        LONG                            ref;
         /* IStorage16 fields */
         SEGPTR                          thisptr; /* pointer to this struct as segmented */
         struct storage_pps_entry        stde;
@@ -1515,7 +1515,7 @@ typedef struct
 /******************************************************************************
  *             IStorage16_QueryInterface       [STORAGE.500]
  */
-HRESULT WINAPI IStorage16_fnQueryInterface(
+HRESULT IStorage16_fnQueryInterface(
        IStorage16* iface,REFIID refiid,LPVOID *obj
 ) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
@@ -1532,7 +1532,7 @@ HRESULT WINAPI IStorage16_fnQueryInterface(
 /******************************************************************************
  * IStorage16_AddRef [STORAGE.501]
  */
-ULONG WINAPI IStorage16_fnAddRef(IStorage16* iface) {
+ULONG IStorage16_fnAddRef(IStorage16* iface) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
        return InterlockedIncrement(&This->ref);
 }
@@ -1540,7 +1540,7 @@ ULONG WINAPI IStorage16_fnAddRef(IStorage16* iface) {
 /******************************************************************************
  * IStorage16_Release [STORAGE.502]
  */
-ULONG WINAPI IStorage16_fnRelease(IStorage16* iface) {
+ULONG IStorage16_fnRelease(IStorage16* iface) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
         ULONG ref;
         ref = InterlockedDecrement(&This->ref);
@@ -1555,7 +1555,7 @@ ULONG WINAPI IStorage16_fnRelease(IStorage16* iface) {
 /******************************************************************************
  * IStorage16_Stat [STORAGE.517]
  */
-HRESULT WINAPI IStorage16_fnStat(
+HRESULT IStorage16_fnStat(
         LPSTORAGE16 iface,STATSTG16 *pstatstg, DWORD grfStatFlag
 ) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
@@ -1583,7 +1583,7 @@ HRESULT WINAPI IStorage16_fnStat(
 /******************************************************************************
  *             IStorage16_Commit       [STORAGE.509]
  */
-HRESULT WINAPI IStorage16_fnCommit(
+HRESULT IStorage16_fnCommit(
         LPSTORAGE16 iface,DWORD commitflags
 ) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
@@ -1596,7 +1596,7 @@ HRESULT WINAPI IStorage16_fnCommit(
 /******************************************************************************
  * IStorage16_CopyTo [STORAGE.507]
  */
-HRESULT WINAPI IStorage16_fnCopyTo(LPSTORAGE16 iface,DWORD ciidExclude,const IID *rgiidExclude,SNB16 SNB16Exclude,IStorage16 *pstgDest) {
+HRESULT IStorage16_fnCopyTo(LPSTORAGE16 iface,DWORD ciidExclude,const IID *rgiidExclude,SNB16 SNB16Exclude,IStorage16 *pstgDest) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
        FIXME("IStorage16(%p)->(0x%08lx,%s,%p,%p),stub!\n",
                This,ciidExclude,debugstr_guid(rgiidExclude),SNB16Exclude,pstgDest
@@ -1608,7 +1608,7 @@ HRESULT WINAPI IStorage16_fnCopyTo(LPSTORAGE16 iface,DWORD ciidExclude,const IID
 /******************************************************************************
  * IStorage16_CreateStorage [STORAGE.505]
  */
-HRESULT WINAPI IStorage16_fnCreateStorage(
+HRESULT IStorage16_fnCreateStorage(
        LPSTORAGE16 iface,LPCOLESTR16 pwcsName,DWORD grfMode,DWORD dwStgFormat,DWORD reserved2, IStorage16 **ppstg
 ) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
@@ -1673,7 +1673,7 @@ HRESULT WINAPI IStorage16_fnCreateStorage(
 /******************************************************************************
  *             IStorage16_CreateStream [STORAGE.503]
  */
-HRESULT WINAPI IStorage16_fnCreateStream(
+HRESULT IStorage16_fnCreateStream(
        LPSTORAGE16 iface,LPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved1,DWORD reserved2, IStream16 **ppstm
 ) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
@@ -1731,7 +1731,7 @@ HRESULT WINAPI IStorage16_fnCreateStream(
 /******************************************************************************
  *             IStorage16_OpenStorage  [STORAGE.506]
  */
-HRESULT WINAPI IStorage16_fnOpenStorage(
+HRESULT IStorage16_fnOpenStorage(
        LPSTORAGE16 iface,LPCOLESTR16 pwcsName, IStorage16 *pstgPrio, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16 **ppstg
 ) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
@@ -1766,7 +1766,7 @@ HRESULT WINAPI IStorage16_fnOpenStorage(
 /******************************************************************************
  * IStorage16_OpenStream [STORAGE.504]
  */
-HRESULT WINAPI IStorage16_fnOpenStream(
+HRESULT IStorage16_fnOpenStream(
        LPSTORAGE16 iface,LPCOLESTR16 pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream16 **ppstm
 ) {
        IStorage16Impl *This = (IStorage16Impl *)iface;
index 437bb37..f9cf3cc 100644 (file)
@@ -1,59 +1,59 @@
-# Compound Storage DLL.\r
-# (FIXME: some methods are commented out. Commenting them in _WILL_\r
-#  result in dataloss. Do it at your own risk.)\r
-\r
-1 pascal StgCreateDocFileA(str long long ptr) StgCreateDocFile16\r
-2 stub StgCreateDocFileOnILockBytes\r
-# 2 pascal StgCreateDocFileOnILockBytes(ptr long long ptr) StgCreateDocFileOnILockBytes16\r
-3 pascal StgOpenStorage(str ptr long ptr long ptr) StgOpenStorage16\r
-4 pascal StgOpenStorageOnILockBytes(ptr ptr long long long ptr) StgOpenStorageOnILockBytes16\r
-5 pascal StgIsStorageFile(str) StgIsStorageFile16\r
-6 pascal StgIsStorageILockBytes(segptr) StgIsStorageILockBytes16\r
-7 stub StgSetTimes\r
-#8 WEP\r
-#9 ___EXPORTEDSTUB\r
-103 stub DllGetClassObject\r
-\r
-# Storage Interface functions. Starting at 500\r
-# these are not exported in the real storage.dll, we use them\r
-# as 16->32 relays. They use the cdecl calling convention.\r
-\r
-# IStorage\r
-500 cdecl IStorage16_QueryInterface(ptr ptr ptr) IStorage16_fnQueryInterface\r
-501 cdecl IStorage16_AddRef(ptr) IStorage16_fnAddRef\r
-502 cdecl IStorage16_Release(ptr) IStorage16_fnRelease\r
-#503 cdecl IStorage16_CreateStream(ptr str long long long ptr) IStorage16_fnCreateStream\r
-503 stub  IStorage16_CreateStream\r
-\r
-504 cdecl IStorage16_OpenStream(ptr str ptr long long ptr) IStorage16_fnOpenStream\r
-#505 cdecl IStorage16_CreateStorage(ptr str long long long ptr) IStorage16_fnCreateStorage\r
-505 stub  IStorage16_CreateStorage\r
-506 cdecl IStorage16_OpenStorage(ptr str ptr long ptr long ptr) IStorage16_fnOpenStorage\r
-507 cdecl IStorage16_CopyTo(ptr long ptr ptr ptr) IStorage16_fnCopyTo\r
-508 stub  IStorage16_MoveElementTo\r
-509 cdecl IStorage16_Commit(ptr long) IStorage16_fnCommit\r
-510 stub  IStorage16_Revert\r
-511 stub  IStorage16_EnumElements\r
-512 stub  IStorage16_DestroyElement\r
-513 stub  IStorage16_RenameElement\r
-514 stub  IStorage16_SetElementTimes\r
-515 stub  IStorage16_SetClass\r
-516 stub  IStorage16_SetStateBits\r
-517 cdecl IStorage16_Stat(ptr ptr long) IStorage16_fnStat\r
-\r
-# IStream\r
-518 cdecl IStream16_QueryInterface(ptr ptr ptr) IStream16_fnQueryInterface\r
-519 cdecl IStream16_AddRef(ptr) IStream16_fnAddRef\r
-520 cdecl IStream16_Release(ptr) IStream16_fnRelease\r
-521 cdecl IStream16_Read(ptr ptr long ptr) IStream16_fnRead\r
-#522 cdecl IStream16_Write(ptr ptr long ptr) IStream16_fnWrite\r
-522 stub  IStream16_Write\r
-523 cdecl IStream16_Seek(ptr long long long ptr) IStream16_fnSeek\r
-524 stub  IStream16_SetSize\r
-525 stub  IStream16_CopyTo\r
-526 stub  IStream16_Commit\r
-527 stub  IStream16_Revert\r
-528 stub  IStream16_LockRegion\r
-529 stub  IStream16_UnlockRegion\r
-530 stub  IStream16_Stat\r
-531 stub  IStream16_Clone\r
+# Compound Storage DLL.
+# (FIXME: some methods are commented out. Commenting them in _WILL_
+#  result in dataloss. Do it at your own risk.)
+
+1 pascal StgCreateDocFileA(str long long ptr) StgCreateDocFile16
+2 stub StgCreateDocFileOnILockBytes
+# 2 pascal StgCreateDocFileOnILockBytes(ptr long long ptr) StgCreateDocFileOnILockBytes16
+3 pascal StgOpenStorage(str ptr long ptr long ptr) StgOpenStorage16
+4 pascal StgOpenStorageOnILockBytes(ptr ptr long long long ptr) StgOpenStorageOnILockBytes16
+5 pascal StgIsStorageFile(str) StgIsStorageFile16
+6 pascal StgIsStorageILockBytes(segptr) StgIsStorageILockBytes16
+7 stub StgSetTimes
+#8 WEP
+#9 ___EXPORTEDSTUB
+103 stub DllGetClassObject
+
+# Storage Interface functions. Starting at 500
+# these are not exported in the real storage.dll, we use them
+# as 16->32 relays. They use the cdecl calling convention.
+
+# IStorage
+500 cdecl IStorage16_QueryInterface(ptr ptr ptr) IStorage16_fnQueryInterface
+501 cdecl IStorage16_AddRef(ptr) IStorage16_fnAddRef
+502 cdecl IStorage16_Release(ptr) IStorage16_fnRelease
+#503 cdecl IStorage16_CreateStream(ptr str long long long ptr) IStorage16_fnCreateStream
+503 stub  IStorage16_CreateStream
+
+504 cdecl IStorage16_OpenStream(ptr str ptr long long ptr) IStorage16_fnOpenStream
+#505 cdecl IStorage16_CreateStorage(ptr str long long long ptr) IStorage16_fnCreateStorage
+505 stub  IStorage16_CreateStorage
+506 cdecl IStorage16_OpenStorage(ptr str ptr long ptr long ptr) IStorage16_fnOpenStorage
+507 cdecl IStorage16_CopyTo(ptr long ptr ptr ptr) IStorage16_fnCopyTo
+508 stub  IStorage16_MoveElementTo
+509 cdecl IStorage16_Commit(ptr long) IStorage16_fnCommit
+510 stub  IStorage16_Revert
+511 stub  IStorage16_EnumElements
+512 stub  IStorage16_DestroyElement
+513 stub  IStorage16_RenameElement
+514 stub  IStorage16_SetElementTimes
+515 stub  IStorage16_SetClass
+516 stub  IStorage16_SetStateBits
+517 cdecl IStorage16_Stat(ptr ptr long) IStorage16_fnStat
+
+# IStream
+518 cdecl IStream16_QueryInterface(ptr ptr ptr) IStream16_fnQueryInterface
+519 cdecl IStream16_AddRef(ptr) IStream16_fnAddRef
+520 cdecl IStream16_Release(ptr) IStream16_fnRelease
+521 cdecl IStream16_Read(ptr ptr long ptr) IStream16_fnRead
+#522 cdecl IStream16_Write(ptr ptr long ptr) IStream16_fnWrite
+522 stub  IStream16_Write
+523 cdecl IStream16_Seek(ptr long long long ptr) IStream16_fnSeek
+524 stub  IStream16_SetSize
+525 stub  IStream16_CopyTo
+526 stub  IStream16_Commit
+527 stub  IStream16_Revert
+528 stub  IStream16_LockRegion
+529 stub  IStream16_UnlockRegion
+530 stub  IStream16_Stat
+531 stub  IStream16_Clone
index d6e1fed..fdd337f 100644 (file)
  * 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
+ *
+ * NOTES
+ *  The compound file implementation of IStorage used for create
+ *  and manage substorages and streams within a storage object
+ *  residing in a compound file object.
+ *
+ * MSDN
+ *  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stg/stg/istorage_compound_file_implementation.asp
  */
 
 #include <assert.h>
@@ -1583,6 +1591,13 @@ HRESULT WINAPI StorageImpl_MoveElementTo(
 
 /*************************************************************************
  * Commit (IStorage)
+ *
+ * Ensures that any changes made to a storage object open in transacted mode
+ * are reflected in the parent storage
+ *
+ * NOTES
+ *  Wine doesn't implement transacted mode, which seems to be a basic
+ *  optimization, so we can ignore this stub for now.
  */
 HRESULT WINAPI StorageImpl_Commit(
   IStorage*   iface,
@@ -1594,6 +1609,8 @@ HRESULT WINAPI StorageImpl_Commit(
 
 /*************************************************************************
  * Revert (IStorage)
+ *
+ * Discard all changes that have been made since the last commit operation
  */
 HRESULT WINAPI StorageImpl_Revert(
   IStorage* iface)
@@ -6387,7 +6404,7 @@ static DWORD GetCreationModeFromSTGM(DWORD stgm)
  *
  *     Memory allocated for pData must be freed by the caller
  */
-HRESULT OLECONVERT_LoadOLE10(LPOLESTREAM pOleStream, OLECONVERT_OLESTREAM_DATA *pData, BOOL bStrem1)
+static HRESULT OLECONVERT_LoadOLE10(LPOLESTREAM pOleStream, OLECONVERT_OLESTREAM_DATA *pData, BOOL bStrem1)
 {
        DWORD dwSize;
        HRESULT hRes = S_OK;
@@ -6555,7 +6572,7 @@ HRESULT OLECONVERT_LoadOLE10(LPOLESTREAM pOleStream, OLECONVERT_OLESTREAM_DATA *
  *     This function is used by OleConvertIStorageToOLESTREAM only.
  *
  */
-HRESULT OLECONVERT_SaveOLE10(OLECONVERT_OLESTREAM_DATA *pData, LPOLESTREAM pOleStream)
+static HRESULT OLECONVERT_SaveOLE10(OLECONVERT_OLESTREAM_DATA *pData, LPOLESTREAM pOleStream)
 {
     DWORD dwSize;
     HRESULT hRes = S_OK;
@@ -6666,7 +6683,7 @@ HRESULT OLECONVERT_SaveOLE10(OLECONVERT_OLESTREAM_DATA *pData, LPOLESTREAM pOleS
  *
  *
  */
-void OLECONVERT_GetOLE20FromOLE10(LPSTORAGE pDestStorage, BYTE *pBuffer, DWORD nBufferLength)
+static void OLECONVERT_GetOLE20FromOLE10(LPSTORAGE pDestStorage, BYTE *pBuffer, DWORD nBufferLength)
 {
     HRESULT hRes;
     HANDLE hFile;
@@ -6716,7 +6733,7 @@ void OLECONVERT_GetOLE20FromOLE10(LPSTORAGE pDestStorage, BYTE *pBuffer, DWORD n
  *     Used by OleConvertIStorageToOLESTREAM only.
  *
  */
-DWORD OLECONVERT_WriteOLE20ToBuffer(LPSTORAGE pStorage, BYTE **pData)
+static DWORD OLECONVERT_WriteOLE20ToBuffer(LPSTORAGE pStorage, BYTE **pData)
 {
     HANDLE hFile;
     HRESULT hRes;
@@ -7132,7 +7149,7 @@ HRESULT OLECONVERT_CreateCompObjStream(LPSTORAGE pStorage, LPCSTR strOleTypeName
  *     This function is used by OleConvertOLESTREAMToIStorage only.
  *
  */
-void OLECONVERT_CreateOlePresStream(LPSTORAGE pStorage, DWORD dwExtentX, DWORD dwExtentY , BYTE *pData, DWORD dwDataLength)
+static void OLECONVERT_CreateOlePresStream(LPSTORAGE pStorage, DWORD dwExtentX, DWORD dwExtentY , BYTE *pData, DWORD dwDataLength)
 {
     HRESULT hRes;
     IStream *pStream;
@@ -7216,7 +7233,7 @@ void OLECONVERT_CreateOlePresStream(LPSTORAGE pStorage, DWORD dwExtentX, DWORD d
  *     Might need to verify the data and return appropriate error message
  *
  */
-void OLECONVERT_CreateOle10NativeStream(LPSTORAGE pStorage, BYTE *pData, DWORD dwDataLength)
+static void OLECONVERT_CreateOle10NativeStream(LPSTORAGE pStorage, BYTE *pData, DWORD dwDataLength)
 {
     HRESULT hRes;
     IStream *pStream;
@@ -7255,7 +7272,7 @@ void OLECONVERT_CreateOle10NativeStream(LPSTORAGE pStorage, BYTE *pData, DWORD d
  *
  *
  */
-HRESULT OLECONVERT_GetOLE10ProgID(LPSTORAGE pStorage, char *strProgID, DWORD *dwSize)
+static HRESULT OLECONVERT_GetOLE10ProgID(LPSTORAGE pStorage, char *strProgID, DWORD *dwSize)
 {
     HRESULT hRes;
     IStream *pStream;
@@ -7325,7 +7342,7 @@ HRESULT OLECONVERT_GetOLE10ProgID(LPSTORAGE pStorage, char *strProgID, DWORD *dw
  *
  *
  */
-void OLECONVERT_GetOle10PresData(LPSTORAGE pStorage, OLECONVERT_OLESTREAM_DATA *pOleStreamData)
+static void OLECONVERT_GetOle10PresData(LPSTORAGE pStorage, OLECONVERT_OLESTREAM_DATA *pOleStreamData)
 {
 
     HRESULT hRes;
@@ -7378,7 +7395,7 @@ void OLECONVERT_GetOle10PresData(LPSTORAGE pStorage, OLECONVERT_OLESTREAM_DATA *
  *
  *     Memory allocated for pData must be freed by the caller
  */
-void OLECONVERT_GetOle20PresData(LPSTORAGE pStorage, OLECONVERT_OLESTREAM_DATA *pOleStreamData)
+static void OLECONVERT_GetOle20PresData(LPSTORAGE pStorage, OLECONVERT_OLESTREAM_DATA *pOleStreamData)
 {
     HRESULT hRes;
     IStream *pStream;
index 4358a19..4061a06 100644 (file)
@@ -222,7 +222,7 @@ struct StorageBaseImpl
   /*
    * Reference count of this object
    */
-  ULONG ref;
+  LONG ref;
 
   /*
    * Ancestor storage (top level)
@@ -430,7 +430,7 @@ struct IEnumSTATSTGImpl
   const IEnumSTATSTGVtbl *lpVtbl;    /* Needs to be the first item in the struct
                                * since we want to cast this in an IEnumSTATSTG pointer */
 
-  ULONG                 ref;                   /* Reference count */
+  LONG          ref;                   /* Reference count */
   StorageImpl* parentStorage;         /* Reference to the parent storage */
   ULONG          firstPropertyNode;     /* Index of the root of the storage to enumerate */
 
@@ -487,7 +487,7 @@ struct StgStreamImpl
   /*
    * Reference count
    */
-  ULONG                     ref;
+  LONG              ref;
 
   /*
    * Storage that is the parent(owner) of the stream
index 76cc8fa..ef96e05 100644 (file)
@@ -96,15 +96,13 @@ struct stub_manager *new_stub_manager(APARTMENT *apt, IUnknown *object, MSHLFLAG
     return sm;
 }
 
-/* m->apt->cs must be held on entry to this function */
+/* caller must remove stub manager from apartment prior to calling this function */
 static void stub_manager_delete(struct stub_manager *m)
 {
     struct list *cursor;
 
     TRACE("destroying %p (oid=%s)\n", m, wine_dbgstr_longlong(m->oid));
 
-    list_remove(&m->entry);
-
     /* release every ifstub */
     while ((cursor = list_head(&m->ifstubs)))
     {
@@ -230,10 +228,16 @@ ULONG stub_manager_int_release(struct stub_manager *This)
 
     TRACE("after %ld\n", refs);
 
+    /* remove from apartment so no other thread can access it... */
     if (!refs)
-        stub_manager_delete(This);
+        list_remove(&This->entry);
+
     LeaveCriticalSection(&apt->cs);
 
+    /* ... so now we can delete it without being inside the apartment critsec */
+    if (!refs)
+        stub_manager_delete(This);
+
     return refs;
 }
 
@@ -336,7 +340,7 @@ HRESULT ipid_to_stub_manager(const IPID *ipid, APARTMENT **stub_apt, struct stub
         *stub_apt = apartment_findfromtid(ipid->Data2);
     if (!*stub_apt)
     {
-        ERR("Couldn't find apartment corresponding to TID 0x%04x\n", ipid->Data2);
+        TRACE("Couldn't find apartment corresponding to TID 0x%04x\n", ipid->Data2);
         return RPC_E_INVALID_OBJECT;
     }
     *stubmgr_ret = get_stub_manager_from_ipid(*stub_apt, ipid);
@@ -411,7 +415,7 @@ struct ifstub *stub_manager_new_ifstub(struct stub_manager *m, IRpcStubBuffer *s
     stub->stubbuffer = sb;
     if (sb) IRpcStubBuffer_AddRef(sb);
 
-    /* no need to ref this, same object as sb */
+    IUnknown_AddRef(iptr);
     stub->iface = iptr;
 
     stub->iid = *iid;
@@ -477,7 +481,9 @@ BOOL stub_manager_notify_unmarshal(struct stub_manager *m)
     default:
         WARN("object OID %s already unmarshaled\n",
             wine_dbgstr_longlong(m->oid));
-        ret = FALSE;
+        ret = TRUE; /* FIXME: the state management should be per-ifstub, so
+                     * it is disabled at the moment so that InstallShield
+                     * works again */
         break;
     }
 
@@ -505,9 +511,9 @@ void stub_manager_release_marshal_data(struct stub_manager *m, ULONG refs)
         break;
     }
 
-    stub_manager_ext_release(m, refs);
-
     LeaveCriticalSection(&m->lock);
+
+    stub_manager_ext_release(m, refs);
 }
 
 /* is an ifstub table marshaled? */
@@ -539,7 +545,7 @@ const IID IID_IRemUnknown = { 0x00000131, 0, 0, {0xc0, 0, 0, 0, 0, 0, 0, 0x46} }
 typedef struct rem_unknown
 {
     const IRemUnknownVtbl *lpVtbl;
-    ULONG refs;
+    LONG refs;
 } RemUnknown;
 
 static const IRemUnknownVtbl RemUnknown_Vtbl;