windows-nt/Source/XPSP1/NT/com/ole32/olethunk/ole16/compobj/comdthk.c

802 lines
18 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: Comdthk.c (16 bit target)
//
// Contents: CompObj Directly Thunked APIs
//
// Functions:
//
// History: 16-Dec-93 JohannP Created
// 07-Mar-94 BobDay Moved into COMTHUNK.C from COMAPI.CXX
//
//--------------------------------------------------------------------------
#include <headers.cxx>
#pragma hdrstop
#include <call32.hxx>
#include <apilist.hxx>
STDAPI_(BOOL) GUIDFromString(LPCSTR lpsz, LPGUID pguid);
//+---------------------------------------------------------------------------
//
// Function: Straight thunk routines
//
// Synopsis: The following routines do not need to do any special
// processing on the 16-bit side so they thunk straight
// through
//
// History: 18-Feb-94 JohannP Created
//
// Notes: "Review to ensure these don't have to do any work"
// 15-Feb-2000 I'm pretty sure they don't. JohnDoty
//
//----------------------------------------------------------------------------
//+---------------------------------------------------------------------------
//
// Function: CLSIDFromString, Remote
//
// History: Straight from OLE2 sources
//
//----------------------------------------------------------------------------
STDAPI CLSIDFromString(LPSTR lpsz, LPCLSID pclsid)
{
HRESULT hr;
thkDebugOut((DEB_ITRACE, "CLSIDFromString\n"));
//
// The 16-bit OLE2 application "Family Tree Maker" always passes a bad
// string to CLSIDFromString. We need to make sure we fail in the exact
// same way with the interop layer. This will also provide a speed
// improvement since we only need to remote to the 32bit version of
// CLSIDFromString when the string provided does not start with '{'.
//
if (lpsz[0] == '{')
return GUIDFromString(lpsz, pclsid)
? NOERROR : ResultFromScode(CO_E_CLASSSTRING);
// Note: Corel calls this function prior to calling
// CoInitialize so use CheckInit
return (HRESULT)CallObjectInWOWCheckInit(THK_API_METHOD(THK_API_CLSIDFromString),
PASCAL_STACK_PTR(lpsz));
}
//+---------------------------------------------------------------------------
//
// Function: CoGetClassObject, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [rclsid] --
// [dwClsContext] --
// [pvReserved] --
// [riid] --
// [ppv] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, LPVOID pvReserved,
REFIID riid, LPVOID FAR* ppv)
{
thkDebugOut((DEB_ITRACE, " CoGetClassObject\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoGetClassObject),
PASCAL_STACK_PTR(rclsid) );
}
//+---------------------------------------------------------------------------
//
// Function: CoRegisterClassObject, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [rclsid] --
// [pUnk] --
// [dwClsContext] --
// [flags] --
// [lpdwRegister] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoRegisterClassObject(REFCLSID rclsid, LPUNKNOWN pUnk,
DWORD dwClsContext, DWORD flags,
LPDWORD lpdwRegister)
{
thkDebugOut((DEB_ITRACE, " CoRegisterClassObject\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoRegisterClassObject),
PASCAL_STACK_PTR(rclsid));
}
//+---------------------------------------------------------------------------
//
// Function: CoRevokeClassObject, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [dwRegister] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoRevokeClassObject(DWORD dwRegister)
{
thkDebugOut((DEB_ITRACE, " CoRevokeClassObject\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoRevokeClassObject),
PASCAL_STACK_PTR(dwRegister) );
}
//+---------------------------------------------------------------------------
//
// Function: CoMarshalInterface, Unknown
//
// Synopsis:
//
// Effects:
//
// Arguments: [pStm] --
// [riid] --
// [pUnk] --
// [dwDestContext] --
// [pvDestContext] --
// [mshlflags] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk,
DWORD dwDestContext, LPVOID pvDestContext,
DWORD mshlflags)
{
thkDebugOut((DEB_ITRACE, " CoMarshalInterface\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoMarshalInterface),
PASCAL_STACK_PTR(pStm));
}
//+---------------------------------------------------------------------------
//
// Function: CoUnmarshalInterface, Unknown
//
// Synopsis:
//
// Effects:
//
// Arguments: [pStm] --
// [riid] --
// [ppv] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID FAR* ppv)
{
thkDebugOut((DEB_ITRACE, "CoUnmarshalInterface\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoUnmarshalInterface),
PASCAL_STACK_PTR(pStm));
}
//+---------------------------------------------------------------------------
//
// Function: CoReleaseMarshalData, Unknown
//
// Synopsis:
//
// Effects:
//
// Arguments: [pStm] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoReleaseMarshalData(LPSTREAM pStm)
{
thkDebugOut((DEB_ITRACE, "CoReleaseMarshalData\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoReleaseMarshalData),
PASCAL_STACK_PTR(pStm));
}
//+---------------------------------------------------------------------------
//
// Function: CoDisconnectObject, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [pUnk] --
// [dwReserved] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoDisconnectObject(LPUNKNOWN pUnk, DWORD dwReserved)
{
thkDebugOut((DEB_ITRACE, "CoDisconnectObject\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoDisconnectObject),
PASCAL_STACK_PTR(pUnk));
}
//+---------------------------------------------------------------------------
//
// Function: CoLockObjectExternal, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [pUnk] --
// [fLock] --
// [fLastUnlockReleases] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock,
BOOL fLastUnlockReleases)
{
thkDebugOut((DEB_ITRACE, "CoLockObjectExternal\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoLockObjectExternal),
PASCAL_STACK_PTR(pUnk));
}
//+---------------------------------------------------------------------------
//
// Function: CoGetStandardMarshal, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [riid] --
// [pUnk] --
// [dwDestContext] --
// [pvDestContext] --
// [mshlflags] --
// [ppMarshal] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk,
DWORD dwDestContext, LPVOID pvDestContext,
DWORD mshlflags,
LPMARSHAL FAR* ppMarshal)
{
thkDebugOut((DEB_ITRACE, "CoGetStandardMarshal\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoGetStandardMarshal),
PASCAL_STACK_PTR(riid));
}
//+---------------------------------------------------------------------------
//
// Function: CoIsHandlerConnected, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [pUnk] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI_(BOOL) CoIsHandlerConnected(LPUNKNOWN pUnk)
{
thkDebugOut((DEB_ITRACE, "CoIsHandlerConnected\n"));
return (BOOL)CallObjectInWOW(THK_API_METHOD(THK_API_CoIsHandlerConnected),
PASCAL_STACK_PTR(pUnk));
}
//+---------------------------------------------------------------------------
//
// Function: CoCreateInstance, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [rclsid] --
// [pUnkOuter] --
// [dwClsContext] --
// [riid] --
// [ppv] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter,
DWORD dwClsContext, REFIID riid, LPVOID FAR* ppv)
{
thkDebugOut((DEB_ITRACE, "CoCreateInstance\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoCreateInstance),
PASCAL_STACK_PTR(rclsid) );
}
//+---------------------------------------------------------------------------
//
// Function: CoIsOle1Class, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [rclsid] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI_(BOOL) CoIsOle1Class(REFCLSID rclsid)
{
thkDebugOut((DEB_ITRACE, "CoIsOle1Class\n"));
return (BOOL)CallObjectInWOW(THK_API_METHOD(THK_API_CoIsOle1Class),
PASCAL_STACK_PTR(rclsid) );
}
//+---------------------------------------------------------------------------
//
// Function: ProgIDFromCLSID, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [clsid] --
// [lplpszProgID] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI ProgIDFromCLSID(REFCLSID clsid, LPSTR FAR* lplpszProgID)
{
thkDebugOut((DEB_ITRACE, "ProgIDFromCLSID\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_ProgIDFromCLSID),
PASCAL_STACK_PTR(clsid) );
}
//+---------------------------------------------------------------------------
//
// Function: CLSIDFromProgID, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [lpszProgID] --
// [lpclsid] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CLSIDFromProgID(LPCSTR lpszProgID, LPCLSID lpclsid)
{
thkDebugOut((DEB_ITRACE, "CLSIDFromProgID\n"));
// Note: Word 6 calls this function prior to calling
// CoInitialize so use CheckInit
return (HRESULT)CallObjectInWOWCheckInit(THK_API_METHOD(THK_API_CLSIDFromProgID),
PASCAL_STACK_PTR(lpszProgID) );
}
//+---------------------------------------------------------------------------
//
// Function: CoCreateGuid, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [pguid] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoCreateGuid(GUID FAR *pguid)
{
thkDebugOut((DEB_ITRACE, "CoCreateGuid\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoCreateGuid),
PASCAL_STACK_PTR(pguid));
}
//+---------------------------------------------------------------------------
//
// Function: CoFileTimeToDosDateTime, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [lpFileTime] --
// [lpDosDate] --
// [lpDosTime] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI_(BOOL) CoFileTimeToDosDateTime(FILETIME FAR* lpFileTime,
LPWORD lpDosDate, LPWORD lpDosTime)
{
thkDebugOut((DEB_ITRACE, "CoFileTimeToDosDateTime\n"));
return (BOOL)CallObjectInWOW(THK_API_METHOD(THK_API_CoFileTimeToDosDateTime),
PASCAL_STACK_PTR(lpFileTime));
}
//+---------------------------------------------------------------------------
//
// Function: CoDosDateTimeToFileTime, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [nDosDate] --
// [nDosTime] --
// [lpFileTime] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI_(BOOL) CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime,
FILETIME FAR* lpFileTime)
{
thkDebugOut((DEB_ITRACE, "CoDosDateTimeToFileTime\n"));
return (BOOL)CallObjectInWOW(THK_API_METHOD(THK_API_CoDosDateTimeToFileTime),
PASCAL_STACK_PTR(nDosDate));
}
//+---------------------------------------------------------------------------
//
// Function: CoFileTimeNow, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [lpFileTime] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoFileTimeNow(FILETIME FAR* lpFileTime)
{
thkDebugOut((DEB_ITRACE, "CoFileTimeNow\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoFileTimeNow),
PASCAL_STACK_PTR(lpFileTime));
}
//+---------------------------------------------------------------------------
//
// Function: CoRegisterMessageFilter, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [lpMessageFilter] --
// [lplpMessageFilter] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,
LPMESSAGEFILTER FAR* lplpMessageFilter)
{
thkDebugOut((DEB_ITRACE, "CoRegisterMessageFilter\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoRegisterMessageFilter),
PASCAL_STACK_PTR(lpMessageFilter) );
}
//+---------------------------------------------------------------------------
//
// Function: CoGetTreatAsClass, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [clsidOld] --
// [pClsidNew] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID pClsidNew)
{
thkDebugOut((DEB_ITRACE, "CoGetTreatAsClass\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoGetTreatAsClass),
PASCAL_STACK_PTR(clsidOld) );
}
//+---------------------------------------------------------------------------
//
// Function: CoTreatAsClass, Remote
//
// Synopsis:
//
// Effects:
//
// Arguments: [clsidOld] --
// [clsidNew] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: 2-28-94 kevinro Created
//
// Notes:
//
//----------------------------------------------------------------------------
STDAPI CoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew)
{
thkDebugOut((DEB_ITRACE, "CoTreatAsClass\n"));
return (HRESULT)CallObjectInWOW(THK_API_METHOD(THK_API_CoTreatAsClass),
PASCAL_STACK_PTR(clsidOld) );
}