summaryrefslogtreecommitdiffstats
path: root/private/ole32/ih/ole2com.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/ole32/ih/ole2com.h')
-rw-r--r--private/ole32/ih/ole2com.h1001
1 files changed, 1001 insertions, 0 deletions
diff --git a/private/ole32/ih/ole2com.h b/private/ole32/ih/ole2com.h
new file mode 100644
index 000000000..056fe43d0
--- /dev/null
+++ b/private/ole32/ih/ole2com.h
@@ -0,0 +1,1001 @@
+//+---------------------------------------------------------------------------
+//
+// Microsoft Windows
+// Copyright (C) Microsoft Corporation, 1992 - 1993.
+//
+// File: ole2com.h
+//
+// Contents: Common definitions shared by com and ole232
+//
+// Classes:
+//
+// Functions:
+//
+// History: 4-26-94 kevinro Created
+// 06-16-94 AlexT Add FnAssert prototype
+// 07-26-94 AlexGo Added CStabilize and CSafeRefCount
+// 21-Dec-94 BruceMa Wrap mbstowcs and wcstombs
+// 23-Jan-95 t-ScottH added Dump method to CSafeRefCount
+// 08-Sep-95 murthys Added declarations for compapi worker
+// used by com, stg, scm etc
+//
+// Notes:
+// There are two versions of ole2int.h in the project. This is
+// unfortunate, but would be a major pain in the butt to fix.
+// What I have done is to extract the share parts of the two files,
+// and put them in this file. ole2int.h then includes this file.
+//
+// Someday, somebody should reconcile all of the differences between the
+// two ole2int.h files, and rename them. Don't have time for that now,
+// so I have gone for the path of least resistance.
+// KevinRo
+//----------------------------------------------------------------------------
+#ifndef _OLE2COM_H_
+#define _OLE2COM_H_
+
+#include <memapi.hxx>
+
+//
+// common compobj API worker functions used by com, stg, scm etc
+//
+// These definitions are shared between all of the components of OLE that
+// use the common directory, such as SCM and COMPOBJ
+//
+// format for string form of GUID is (leading identifier ????)
+// ????{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}
+
+#define GUIDSTR_MAX (1+ 8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12 + 1 + 1)
+#define CLSIDSTR_MAX (GUIDSTR_MAX)
+#define IIDSTR_MAX (GUIDSTR_MAX)
+
+
+//
+// Internal values used between OLE32 and SCM
+//
+
+#define APT_THREADED 0
+#define FREE_THREADED 1
+#define SINGLE_THREADED 2
+#define BOTH_THREADED 3
+#define GOT_FROM_ROT 0x80000000
+
+
+//
+// Internal CLSCTX used for loading Proxy/Stub DLLs
+//
+#define CLSCTX_PS_DLL 0x80000000
+
+//
+// Internal CLSCTX used for flagging that WX86 remapping should not occur
+//
+#define CLSCTX_NO_REMAP 0x40000000
+
+//
+// The following flags are used to support loading INPROC items into 16-bit DLL's
+//
+#define CLSCTX_INPROC_HANDLERS (CLSCTX_INPROC_HANDLER16 | CLSCTX_INPROC_HANDLER | CLSCTX_INPROC_HANDLERX86)
+#define CLSCTX_INPROC_SERVERS (CLSCTX_INPROC_SERVER16 | CLSCTX_INPROC_SERVER | CLSCTX_INPROC_SERVERX86 | CLSCTX_PS_DLL)
+
+// "common" compapi worker functions
+
+INTERNAL_(int) wStringFromGUID2(REFGUID rguid, LPWSTR lpsz, int cbMax);
+INTERNAL wStringFromUUID(REFGUID rguid, LPWSTR lpsz);
+void FormatHexNumW( unsigned long ulValue, unsigned long chChars, WCHAR *pwcStr);
+void FormatHexNumA( unsigned long ulValue, unsigned long chChars, char *pchStr);
+
+#ifdef _CHICAGO_
+INTERNAL_(int) wStringFromGUID2A(REFGUID rguid, LPSTR lpsz, int cbMax);
+#define wStringFromGUID2T wStringFromGUID2A
+#else
+#define wStringFromGUID2T wStringFromGUID2
+#endif
+
+BOOL wThreadModelMatch(DWORD dwCallerThreadModel,DWORD dwDllThreadModel,DWORD dwContext);
+LONG wQueryStripRegValue(HKEY hkey,LPCTSTR pwszSubKey,LPTSTR pwszValue, PLONG pcbValue);
+LONG wGetDllInfo(HKEY hClsRegEntry,LPCTSTR pwszKey,LPTSTR pwszDllName,LONG *pclDllName,ULONG *pulDllThreadType);
+BOOL wCompareDllName(LPCTSTR pwszPath, LPCTSTR pwszDllName, DWORD dwDllNameLen);
+
+// compapi worker functions
+
+INTERNAL wIsInternalProxyStubIID(REFIID riid, LPCLSID lpclsid);
+INTERNAL wCoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew);
+INTERNAL wCLSIDFromOle1Class(LPCWSTR lpsz, LPCLSID lpclsid, BOOL fForceAssign=FALSE);
+INTERNAL wCLSIDFromString(LPWSTR lpsz, LPCLSID lpclsid);
+
+#define wCLSIDFromProgID wCLSIDFromOle1Class
+
+INTERNAL_(int) wOle1ClassFromCLSID2(REFCLSID rclsid, LPWSTR lpsz, int cbMax);
+INTERNAL wCoGetTreatAsClass(REFCLSID clsidOld, LPCLSID lpClsidNew);
+INTERNAL wRegQueryPSClsid(REFIID riid, LPCLSID lpclsid);
+INTERNAL wCoGetPSClsid(REFIID riid, LPCLSID lpclsid);
+INTERNAL wCoGetClassExt(LPCWSTR pwszExt, LPCLSID pclsid);
+INTERNAL wRegGetClassExt(LPCWSTR lpszExt, LPCLSID pclsid);
+INTERNAL wCoGetClassPattern(HANDLE hfile, CLSID *pclsid);
+INTERNAL wCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwContext, REFIID riid, LPVOID FAR* ppv);
+INTERNAL_(HRESULT) wCoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM *ppStm);
+INTERNAL_(HRESULT) wCoGetInterfaceAndReleaseStream(LPSTREAM pstm, REFIID riid, LPVOID *ppv);
+INTERNAL_(BOOL) wGUIDFromString(LPCWSTR lpsz, LPGUID pguid);
+INTERNAL_(BOOL) wUUIDFromString(LPCWSTR lpsz, LPGUID pguid);
+INTERNAL wStringFromCLSID(REFCLSID rclsid, LPWSTR FAR* lplpsz);
+INTERNAL wStringFromIID(REFIID rclsid, LPWSTR FAR* lplpsz);
+INTERNAL wIIDFromString(LPWSTR lpsz, LPIID lpiid);
+INTERNAL_(BOOL) wCoIsOle1Class(REFCLSID rclsid);
+INTERNAL wkProgIDFromCLSID(REFCLSID rclsid, LPWSTR FAR* ppszProgID);
+INTERNAL wCoOpenClassKey(REFCLSID clsid, HKEY FAR* lphkeyClsid);
+INTERNAL_(LONG) wRegQueryClassValue(REFCLSID rclsid, LPCWSTR lpszSubKey,
+ LPWSTR lpszValue, int cbMax);
+
+
+//
+// There are two sets of possible keys. There are the 32 bit, as well as
+// the 16 bit
+//
+
+#ifdef _KEVINROS_CHICAGO_CHANGES_
+const TCHAR tszOle32Dll[] = TEXT("OLE32.DLL");
+
+#define OLE32_DLL tszOle32Dll
+#define OLE32_BYTE_LEN sizeof(OLE32_DLL)
+#define OLE32_CHAR_LEN (sizeof(OLE32_DLL) / sizeof(TCHAR) - 1)
+#endif
+
+const TCHAR tszCLSID[] = TEXT("CLSID");
+
+const TCHAR tszInprocServer[] = TEXT("InprocServer32");
+const TCHAR tszInprocHandler[] = TEXT("InprocHandler32");
+const TCHAR tszLocalServer[] = TEXT("LocalServer32");
+
+const WCHAR wszActivateAtBits[] = L"ActivateAtBits";
+const WCHAR wszActivateRemote[] = L"Remote";
+const WCHAR wszDebug[] = L"Debug";
+
+const TCHAR tszLocalServer16[] = TEXT("LocalServer");
+const TCHAR tszInprocServer16[] = TEXT("InprocServer");
+const TCHAR tszInprocHandler16[] = TEXT("InprocHandler");
+
+const TCHAR tszOle2Dll[] = TEXT("OLE2.DLL");
+
+#define OLE2_DLL tszOle2Dll
+#define OLE2_BYTE_LEN sizeof(OLE2_DLL)
+#define OLE2_CHAR_LEN (sizeof(OLE2_DLL) / sizeof(TCHAR) - 1)
+
+
+const TCHAR tszCLSIDBACK[] = TEXT("CLSID\\");
+#define CLSIDBACK tszCLSIDBACK
+#define CLSIDBACK_BYTE_LEN sizeof(CLSIDBACK)
+#define CLSIDBACK_CHAR_LEN (sizeof(CLSIDBACK) / sizeof(TCHAR) - 1)
+
+#define KEY_LEN 256 // max size of registry key
+#define VALUE_LEN 256 // max size of registry value
+
+#ifdef _CAIRO_
+
+#define _DCOM_ // enable definition of Cairo OLE COM extensions
+#include <oleext.h>
+
+#else
+
+// These API's are exposed for Cairo but not for Daytona, so we declare
+// them here for internal users
+
+WINOLEAPI OleInitializeEx(LPVOID pvReserved, DWORD);
+WINOLEAPI CoGetCallerTID( LPDWORD lpdwTID );
+WINOLEAPI CoGetPersistentInstance(
+ REFIID riid,
+ DWORD dwCtrl,
+ DWORD grfMode,
+ OLECHAR *pwszName,
+ struct IStorage *pstg,
+ REFCLSID rclsidOle1,
+ BOOL * pfOle1Loaded,
+ void **ppvUnk);
+#endif
+
+
+//
+// No longer in the Cairo DEF file. We want to remove this as soon as
+// oleutest can be changed to not use it.
+//
+WINOLEAPI CoNewPersistentInstance(
+ REFCLSID rclsid,
+ REFIID riid,
+ DWORD dwCtrl,
+ DWORD grfMode,
+ OLECHAR *pwszCreateFrom,
+ struct IStorage *pstgCreateFrom,
+ OLECHAR *pwszNewName,
+ void **ppunk);
+
+#if DBG==1
+STDAPI FnAssert(LPSTR lpstrExpr, LPSTR lpstrMsg, LPSTR lpstrFileName, UINT iLine);
+#endif
+
+#if defined(_M_I86SM) || defined(_M_I86MM)
+#define _NEARDATA
+#endif
+
+#ifdef WIN32
+#define HTASK DWORD // Use Proccess id / Thread id
+#endif
+
+
+#ifdef WIN32
+// we have to define these because they have been deleted from
+// win32s, where only the ...Ex versions exist anymore.
+// Now, that's backward compatibility!
+# define SetWindowOrg(h,x,y) SetWindowOrgEx((h),(x),(y),NULL)
+# define SetWindowExt(h,x,y) SetWindowExtEx((h),(x),(y),NULL)
+# define SetViewportOrg(h,x,y) SetViewportOrgEx((h),(x),(y),NULL)
+# define SetViewportExt(h,x,y) SetViewportExtEx((h),(x),(y),NULL)
+# define SetBitmapDimension(h,x,y) SetBitmapDimensionEx((h),(x),(y),NULL)
+#endif
+
+
+#ifdef WIN32
+
+# define _xstrcpy lstrcpyW
+# define _xstrcat lstrcatW
+# define _xstrlen lstrlenW
+# define _xstrchr wcschr
+# define _xstrcmp lstrcmpW
+# define _xstricmp lstrcmpiW
+# define _xstrtok wcstok
+# define _xisdigit(c) (IsCharAlphaNumericW(c) && !IsCharAlphaW(c))
+
+#else // !WIN32
+
+# define _xstrcpy _fstrcpy
+# define _xstrcat _fstrcat
+# define _xstrlen _fstrlen
+# define _xstrchr _fstrchr
+# define _xstrcmp _fstrcmp
+# define _xstricmp _fstricmp
+# define _xstrtok _fstrtok
+# define _xisdigit(c) isdigit(c)
+
+#endif // WIN32
+
+//+----------------------------------------------------------------------------
+//
+// Macro:
+// GETPPARENT
+//
+// Synopsis:
+// Given a pointer to something contained by a struct (or
+// class,) the type name of the containing struct (or class),
+// and the name of the member being pointed to, return a pointer
+// to the container.
+//
+// Arguments:
+// [pmemb] -- pointer to member of struct (or class.)
+// [struc] -- type name of containing struct (or class.)
+// [membname] - name of member within the struct (or class.)
+//
+// Returns:
+// pointer to containing struct (or class)
+//
+// Notes:
+// Assumes all pointers are FAR.
+//
+// History:
+// 11/10/93 - ChrisWe - created
+//
+//-----------------------------------------------------------------------------
+#define GETPPARENT(pmemb, struc, membname) (\
+ (struc FAR *)(((char FAR *)(pmemb))-offsetof(struc, membname)))
+
+//STDSTATIC is intended to be used for static class methods
+//only!!
+#define STDSTATIC_(type) static type EXPORT
+#define STDSTATICIMP_(type) type EXPORT
+
+#ifdef WIN32
+# define WEP_FREE_DLL 0 // BUGBUG32
+# define WEP_SYSTEM_EXIT 1
+#endif
+
+
+#ifdef WIN32
+
+inline UINT GetDriveTypeFromNumber(int i)
+{
+ TCHAR szDevice[] = TEXT("A:\\");
+
+ // Pick off the drive letter from the input path.
+ *szDevice = i + 'A';
+
+#ifdef _UNICODE
+ return(GetDriveTypeW(szDevice));
+#else
+ return(GetDriveTypeA(szDevice));
+#endif
+}
+
+#endif
+
+#ifndef _MAC
+
+/* dll's instance and module handles */
+extern HMODULE g_hmodOLE2;
+extern HINSTANCE g_hinst;
+
+/* Variables for registered clipboard formats */
+extern CLIPFORMAT g_cfObjectLink;
+extern CLIPFORMAT g_cfOwnerLink;
+extern CLIPFORMAT g_cfNative;
+extern CLIPFORMAT g_cfLink;
+extern CLIPFORMAT g_cfBinary;
+extern CLIPFORMAT g_cfFileName;
+extern CLIPFORMAT g_cfFileNameW;
+extern CLIPFORMAT g_cfNetworkName;
+extern CLIPFORMAT g_cfDataObject;
+extern CLIPFORMAT g_cfEmbeddedObject;
+extern CLIPFORMAT g_cfEmbedSource;
+extern CLIPFORMAT g_cfLinkSource;
+extern CLIPFORMAT g_cfOleDraw;
+extern CLIPFORMAT g_cfLinkSrcDescriptor;
+extern CLIPFORMAT g_cfObjectDescriptor;
+extern CLIPFORMAT g_cfCustomLinkSource;
+extern CLIPFORMAT g_cfPBrush;
+extern CLIPFORMAT g_cfMSDraw;
+extern CLIPFORMAT g_cfOlePrivateData;
+extern CLIPFORMAT g_cfScreenPicture; // used for XL and Word hack
+ // see clipapi.cpp
+
+#endif // _MAC
+
+
+#include <utstream.h>
+
+/*
+ * Warning disables:
+ *
+ * We compile with warning level 4, with the following warnings
+ * disabled:
+ *
+ * 4355: 'this' used in base member initializer list
+ *
+ * We don't see the point of this message and we do this all
+ * the time.
+ *
+ * 4505: Unreferenced local function has been removed -- the given
+ * function is local and not referenced in the body of the module.
+ *
+ * Unfortunately, this is generated for every inline function
+ * seen in the header files that is not used in the module.
+ * Since we use a number of inlines, this is a nuisance
+ * warning. It would be nice if the compiler distinguished
+ * between inlines and regular functions.
+ *
+ * 4706: Assignment within conditional expression.
+ *
+ * We use this style of programming extensively, so this
+ * warning is disabled.
+ */
+#pragma warning(disable:4355)
+#pragma warning(disable:4068)
+
+/*
+ * MACROS for Mac/PC core code
+ *
+ * The following macros reduce the proliferation of #ifdefs. They
+ * allow tagging a fragment of code as Mac only, PC only, or with
+ * variants which differ on the PC and the Mac.
+ *
+ * Usage:
+ *
+ *
+ * h = GetHandle();
+ * Mac(DisposeHandle(h));
+ *
+ *
+ * h = GetHandle();
+ * MacWin(h2 = h, CopyHandle(h, h2));
+ *
+ */
+#ifdef _MAC
+#define Mac(x) x
+#define Win(x)
+#define MacWin(x,y) x
+#else
+#define Mac(x)
+#define Win(x) x
+#define MacWin(x,y) y
+#endif
+
+// Define WX86OLE if WX86 hooks are to be included into ole and scm
+#ifndef i386
+#ifndef WX86OLE
+#define WX86OLE
+#endif
+#endif
+
+#ifdef WX86OLE
+const TCHAR tszInprocServerX86[] = TEXT("InprocServerX86");
+const TCHAR tszInprocHandlerX86[] = TEXT("InprocHandlerX86");
+#endif
+
+//
+// The following include is for an interface between OLE and Wx86
+#ifdef WX86OLE
+#include <wx86grpa.hxx>
+extern CWx86 gcwx86;
+#endif
+
+//
+// The following includes an interface that is common between the
+// WOW thunk layer, and the 32-bit version of OLE.
+//
+
+#include <thunkapi.hxx> // WOW thunking interfaces
+
+//
+// A call to CoInitializeWOW will set the following variable. When set,
+// it points to a VTABLE of functions that we can call in the thunk
+// DLL. Only used when running in a VDM.
+//
+extern LPOLETHUNKWOW g_pOleThunkWOW;
+
+
+// debug versions of interlocked increment/decrement; not accurate
+// under multi-threading conditions, but better than the return value
+// of the Interlocked increment/decrement functions.
+inline DWORD InterlockedAddRef(DWORD *pRefs)
+{
+#if DBG==1
+ DWORD refs = *pRefs + 1;
+ InterlockedIncrement((LPLONG)pRefs);
+ return refs;
+#else
+ return InterlockedIncrement((LPLONG)pRefs);
+#endif
+}
+
+inline DWORD InterlockedRelease(DWORD *pRefs)
+{
+#if DBG==1
+ DWORD refs = *pRefs - 1;
+ return InterlockedDecrement((LPLONG)pRefs) == 0 ? 0 : refs;
+#else
+ return InterlockedDecrement((LPLONG)pRefs);
+#endif
+}
+
+
+// helper for getting stable pointers during destruction or other times;
+// NOTE: not thread safe; must provide higher level synchronization
+inline void SafeReleaseAndNULL(IUnknown **ppUnk)
+{
+ if (*ppUnk != NULL)
+ {
+ IUnknown *pUnkSave = *ppUnk;
+ *ppUnk = NULL;
+ pUnkSave->Release();
+ }
+}
+
+
+
+/***********************************************************************/
+/* FILE FORMAT RELATED INFO ****/
+
+// Coponent object stream information
+
+#define COMPOBJ_STREAM OLESTR("\1CompObj")
+#define BYTE_ORDER_INDICATOR 0xfffe // for MAC it could be different
+#define COMPOBJ_STREAM_VERSION 0x0001
+
+// OLE defines values for different OSs
+#define OS_WIN 0x0000
+#define OS_MAC 0x0001
+#define OS_NT 0x0002
+
+// HIGH WORD is OS indicator, LOW WORD is OS version number
+extern DWORD gdwOrgOSVersion;
+extern DWORD gdwOleVersion;
+
+// Ole streams information
+#define OLE_STREAM OLESTR("\1Ole")
+#define OLE_PRODUCT_VERSION 0x0200 /* (HIGH BYTE major version) */
+#define OLE_STREAM_VERSION 0x0001
+
+#define OLE10_NATIVE_STREAM OLESTR("\1Ole10Native")
+#define OLE10_ITEMNAME_STREAM OLESTR("\1Ole10ItemName")
+#define OLE_PRESENTATION_STREAM OLESTR("\2OlePres000")
+#define OLE_MAX_PRES_STREAMS 1000
+#define OLE_CONTENTS_STREAM OLESTR("CONTENTS")
+#define OLE_INVALID_STREAMNUM (-1)
+
+/************************************************************************/
+/**** Storage APIs internally used ****/
+/************************************************************************/
+
+STDAPI ReadClipformatStm(LPSTREAM lpstream, DWORD FAR* lpdwCf);
+STDAPI WriteClipformatStm(LPSTREAM lpstream, CLIPFORMAT cf);
+
+STDAPI WriteMonikerStm (LPSTREAM pstm, LPMONIKER pmk);
+STDAPI ReadMonikerStm (LPSTREAM pstm, LPMONIKER FAR* pmk);
+
+STDAPI_(LPSTREAM) CreateMemStm(DWORD cb, LPHANDLE phMem);
+STDAPI_(LPSTREAM) CloneMemStm(HANDLE hMem);
+STDAPI_(void) ReleaseMemStm (LPHANDLE hMem, BOOL fInternalOnly = FALSE);
+
+STDAPI GetClassFileEx( LPCWSTR lpszFileName,
+ CLSID FAR *pcid,
+ REFCLSID clsidOle1);
+
+/*************************************************************************/
+/*** Initialization code for individual modules ***/
+/*************************************************************************/
+
+INTERNAL_(void) DDEWEP (
+ BOOL fSystemExit
+);
+
+INTERNAL_(BOOL) DDELibMain (
+ HANDLE hInst,
+ WORD wDataSeg,
+ WORD cbHeapSize,
+ LPWSTR lpszCmdLine
+);
+
+BOOL InitializeRunningObjectTable(void);
+
+HRESULT GetObjectFromRotByPath(
+ WCHAR *pwszPath,
+ IUnknown **ppvUnk);
+
+void DestroyRunningObjectTable(void);
+
+
+/**************************************************************************
+ 'lindex' related macros
+***************************************************************************/
+
+#define DEF_LINDEX (-1)
+
+//+-------------------------------------------------------------------------
+//
+// Function: IsValidLINDEX
+//
+// Synopsis: Tests for valid combination of aspect and lindex
+//
+// Arguments: [dwAspect] -- aspect (part of FORMATETC)
+// [lindex] -- lindex (part of FORMATETC)
+//
+// Returns: TRUE for valid lindex, else FALSE
+//
+// History: 20-Jun-94 AlexT Created
+//
+// Notes: Here is the spec for lindex values:
+//
+// dwAspect lindex values
+// -------- -------------
+// DVASPECT_CONTENT -1
+// DVASPECT_DOCPRINT anything
+// DVASPECT_ICON -1
+// DVASPECT_THUMBNAIL -1
+//
+// So, we test for lindex == -1 or aspect == DOCPRINT
+//
+//--------------------------------------------------------------------------
+
+inline BOOL IsValidLINDEX(DWORD dwAspect, LONG lindex)
+{
+ return((DEF_LINDEX == lindex) || (DVASPECT_DOCPRINT == dwAspect));
+}
+
+//+-------------------------------------------------------------------------
+//
+// Function: HasValidLINDEX
+//
+// Synopsis: Tests for valid combination of aspect and lindex
+//
+// Arguments: [pFormatEtc] -- pFormatEtc to test
+//
+// Returns: TRUE for valid lindex, else FALSE
+//
+// History: 20-Jun-94 AlexT Created
+//
+// Notes: See IsValidLINDEX, above
+//
+//--------------------------------------------------------------------------
+
+inline BOOL HasValidLINDEX(FORMATETC const *pFormatEtc)
+{
+ return(IsValidLINDEX(pFormatEtc->dwAspect, pFormatEtc->lindex));
+}
+
+#define INIT_FORETC(foretc) { \
+ (foretc).ptd = NULL; \
+ (foretc).lindex = DEF_LINDEX; \
+ (foretc).dwAspect = DVASPECT_CONTENT; \
+}
+
+// Only DDE layer will test for these values. And only for advises on cached
+// formats do we use these values
+
+#define ADVFDDE_ONSAVE 0x40000000
+#define ADVFDDE_ONCLOSE 0x80000000
+
+
+
+
+// Used in Ole Private Stream
+typedef enum tagOBJFLAGS
+{
+ OBJFLAGS_LINK=1L,
+ OBJFLAGS_DOCUMENT=2L, // this bit is owned by container and is
+ // propogated through saves
+ OBJFLAGS_CONVERT=4L,
+} OBJFLAGS;
+
+
+/*****************************************
+ Prototypes for dde\client\ddemnker.cpp
+******************************************/
+
+INTERNAL DdeBindToObject
+ (LPCOLESTR szFile,
+ REFCLSID clsid,
+ BOOL fPackageLink,
+ REFIID iid,
+ LPLPVOID ppv);
+
+INTERNAL DdeIsRunning
+ (CLSID clsid,
+ LPCOLESTR szFile,
+ LPBC pbc,
+ LPMONIKER pmkToLeft,
+ LPMONIKER pmkNewlyRunning);
+
+
+/**************************************
+ Prototypes for moniker\mkparse.cpp
+***************************************/
+
+INTERNAL Ole10_ParseMoniker
+ (LPMONIKER pmk,
+ LPOLESTR FAR* pszFile,
+ LPOLESTR FAR* pszItem);
+
+STDAPI CreateOle1FileMoniker(LPWSTR, REFCLSID, LPMONIKER FAR*);
+
+/****************************************************************************/
+/* Utility APIs, might get exposed later */
+/****************************************************************************/
+
+STDAPI OleGetData(LPDATAOBJECT lpDataObj, LPFORMATETC pformatetcIn,
+ LPSTGMEDIUM pmedium, BOOL fGetOwnership);
+STDAPI OleSetData(LPDATAOBJECT lpDataObj, LPFORMATETC pformatetc,
+ STGMEDIUM FAR * pmedium, BOOL fRelease);
+STDAPI OleDuplicateMedium(LPSTGMEDIUM lpMediumSrc, LPSTGMEDIUM lpMediumDest);
+
+STDAPI_(BOOL) OleIsDcMeta (HDC hdc);
+
+STDAPI SzFixNet( LPBINDCTX pbc, LPOLESTR szUNCName, LPOLESTR FAR * lplpszReturn,
+ UINT FAR * pEndServer, BOOL fForceConnection = TRUE);
+
+FARINTERNAL ReadFmtUserTypeProgIdStg
+ (IStorage FAR * pstg,
+ CLIPFORMAT FAR* pcf,
+ LPOLESTR FAR* pszUserType,
+ LPOLESTR szProgID);
+
+//+-------------------------------------------------------------------------
+//
+// Function: IsWOWProcess(), BOOL inline
+//
+// Synopsis: Tests whether or not we are running in a WOW process
+//
+// Returns: TRUE if in WOW process, FALSE otherwise
+//
+// Algorithm:
+//
+// History: dd-mmm-yy Author Comment
+// 15-Nov-95 murthys created
+//
+// Notes:
+//
+//--------------------------------------------------------------------------
+
+inline BOOL IsWOWProcess()
+{
+ return (BOOL) ( NULL == g_pOleThunkWOW ? FALSE : TRUE );
+}
+
+//+-------------------------------------------------------------------------
+//
+// Function: IsWOWThread(), BOOL inline
+//
+// Synopsis: Tests whether or not we are running in a 16-bit thread in a
+// WOW process
+//
+// Returns: TRUE if in 16-bit thread in a WOW process, FALSE otherwise
+//
+// Algorithm:
+//
+// History: dd-mmm-yy Author Comment
+// 15-Nov-95 murthys created
+//
+// Notes:
+//
+//--------------------------------------------------------------------------
+
+BOOLEAN TLSIsWOWThread();
+
+inline BOOL IsWOWThread()
+{
+ return (BOOL) ( IsWOWProcess() ? TLSIsWOWThread(): FALSE );
+}
+
+//+-------------------------------------------------------------------------
+//
+// Function: IsWOWThreadCallable(), BOOL inline
+//
+// Synopsis: Tests whether or not we can call into OLETHK32.
+//
+// Returns: TRUE if WOW thread is callable, FALSE if not
+//
+// Algorithm: Tests the g_pOleThunkWOW pointer to see if it is non-zero
+// and not set to -1. -1 means we are in wow, but OLETHK32
+// has already been unloaded. Also, checks to see if we're in
+// amidst a DLL_THREAD_DETACH. We will not allow calls to 16-bit
+// side in this case as it may have already been cleaned up.
+//
+// History: dd-mmm-yy Author Comment
+// 19-mar-95 KevinRo Created
+// 15-Nov-95 MurthyS Renamed from IsWowCallable
+// 29-Jan-95 MurthyS Added check for DLL_THREAD_DETACH
+//
+// Notes:
+// Assumes that IsWOWThread() was called and returned TRUE!
+//
+//--------------------------------------------------------------------------
+
+BOOLEAN TLSIsThreadDetaching();
+
+inline BOOL IsWOWThreadCallable()
+{
+ return (BOOL) (( NULL == g_pOleThunkWOW ? FALSE :
+ ( INVALID_HANDLE_VALUE == g_pOleThunkWOW ? FALSE:TRUE)) &&
+ !(TLSIsThreadDetaching()));
+}
+
+/****************************************************************************/
+/* Stabilization classes */
+/* These are used to stabilize objects during re-entrant calls */
+/****************************************************************************/
+
+#ifndef CO_E_RELEASED
+#define CO_E_RELEASED -2147467246L
+#endif
+
+//+-------------------------------------------------------------------------
+//
+// Class: CSafeRefCount
+//
+// Purpose: A concrete class for objects like the default handler to
+// inherit from. CSafeRefCount will keep track of reference
+// counts, nesting counts, and zombie states, allowing objects
+// to easily manage the liveness of their memory images.
+//
+// Interface:
+//
+// History: dd-mmm-yy Author Comment
+// 01-Aug-94 alexgo author
+// 23-Jan-95 t-ScottH added Dump method (_DEBUG only)
+//
+// Notes: inherits CPrivAlloc
+//
+//--------------------------------------------------------------------------
+
+class CSafeRefCount : public CPrivAlloc
+{
+public:
+ ULONG SafeAddRef();
+ ULONG SafeRelease();
+ ULONG IncrementNestCount();
+ ULONG DecrementNestCount();
+ BOOL IsZombie();
+ #ifdef _DEBUG
+ HRESULT Dump(char **ppszDumpOA, ULONG ulFlag, int nIndentLevel);
+ #endif // _DEBUG
+
+ CSafeRefCount();
+ virtual ~CSafeRefCount(); // this virtual destructor MUST be here
+ // even though it does no work.
+ // it is needed to fire derived obj's destructors
+
+private:
+
+ ULONG m_cRefs;
+ ULONG m_cNest;
+ BOOL m_fInDelete;
+};
+
+//+-------------------------------------------------------------------------
+//
+// Class: CStabilize
+//
+// Purpose: An instance of this class should be allocated on the
+// stack of every object method that makes an outgoing call.
+// The contstructor takes a pointer to the object's base
+// CSafeRefCount class.
+//
+// Interface:
+//
+// History: dd-mmm-yy Author Comment
+// 01-Aug-94 alexgo author
+//
+// Notes: The constructor will increment the nest count of the
+// object while the destructor will decrement it.
+//
+//--------------------------------------------------------------------------
+
+class CStabilize
+{
+public:
+ inline CStabilize( CSafeRefCount *pObjSafeRefCount );
+ inline ~CStabilize();
+
+private:
+ CSafeRefCount * m_pObjSafeRefCount;
+};
+
+inline CStabilize::CStabilize( CSafeRefCount *pObjSafeRefCount )
+{
+ pObjSafeRefCount->IncrementNestCount();
+ m_pObjSafeRefCount = pObjSafeRefCount;
+}
+
+inline CStabilize::~CStabilize()
+{
+ m_pObjSafeRefCount->DecrementNestCount();
+}
+
+typedef void * IFBuffer;
+
+//+-------------------------------------------------------------------------
+//
+// Function: GetMarshalledInterfaceBuffer
+//
+// Synopsis: marshals the given interface into an allocated buffer. The
+// buffer is returned
+//
+// Effects:
+//
+// Arguments: [refiid] -- the iid of the interface to marshal
+// [punk] -- the IUnknown to marshal
+// [pIFBuf] -- where to return the buffer
+//
+// Requires:
+//
+// Returns: HRESULT
+//
+// Signals:
+//
+// Modifies:
+//
+// Algorithm: calls CoMarshalInterface(MSHFLAGS_TABLESTRONG)
+//
+// History: dd-mmm-yy Author Comment
+// 03-Dec-94 alexgo author
+//
+// Notes:
+//
+//--------------------------------------------------------------------------
+
+HRESULT GetMarshalledInterfaceBuffer( REFIID riid, IUnknown *punk, IFBuffer
+ *pIFBuf);
+
+//+-------------------------------------------------------------------------
+//
+// Function: ReleaseMarshalledInterfaceBuffer
+//
+// Synopsis: releases the buffer allocated by GetMarshalledInterfaceBuffer
+//
+// Effects:
+//
+// Arguments: [IFBuf] -- the interface buffer to release
+//
+// Requires:
+//
+// Returns: HRESULT
+//
+// Signals:
+//
+// Modifies:
+//
+// Algorithm: calls CoReleaseMarshalData to undo the TABLE_STRONG
+// marshalling
+//
+// History: dd-mmm-yy Author Comment
+// 03-Dec-94 alexgo author
+//
+// Notes:
+//
+//--------------------------------------------------------------------------
+
+HRESULT ReleaseMarshalledInterfaceBuffer( IFBuffer IFBuf );
+
+
+#define E_UNSPEC E_FAIL
+
+#include <widewrap.h>
+
+#include <stkswtch.h>
+#include <shellapi.h>
+
+#ifdef WIN32 // REVIEW, just using this for tracking
+# define OLE_E_NOOLE1 MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x00FE)
+#endif // WIN32
+
+
+/***********************************************************************/
+/* Wrap mbstowcs and wcstombs which are unsafe to use */
+/* since they rely on crt.dll */
+/* */
+/* Note: cCh in both cases is the output buffer size, not a */
+/* string length. */
+/* */
+/***********************************************************************/
+
+#define mbstowcs(x, y, z) DONT_USE_mbstowcs___USE_MultiByteToWideChar_INSTEAD
+#define wcstombs(x, y, z) DONT_USE_wcstombs___USE_WideCharToMultiByte_INSTEAD
+
+
+
+//------------------------------------------------------------------
+//
+// Dynamically Loaded System APIs
+//
+// OLEs implementations of these system APIs dynamically load the
+// system DLLs. Since these are rarely used APIs we dynamically
+// load them to reduce the load time of OLE32.DLL
+//
+// The implementations can be found in com\util\dynload.cxx
+//
+//------------------------------------------------------------------
+
+// From MPR.DLL
+#undef WNetGetConnection
+#define WNetGetConnection(x,y,z) USE_OleWNetGetConnection_INSTEAD
+DWORD OleWNetGetConnection(LPCWSTR lpLocalName, LPWSTR lpRemoteName, LPDWORD lpnLength);
+
+#ifndef _CHICAGO_
+#undef WNetGetUniversalName
+#define WNetGetUniversalName(w,x,y,z) USE_OleWNetGetUniversalName_INSTEAD
+DWORD OleWNetGetUniversalName(LPCWSTR szLocalPath, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpBufferSize);
+#endif
+
+// From SHELL32.DLL
+#undef ExtractIcon
+#define ExtractIcon(x,y,z) USE_OleExtractIcon_INSTEAD
+HICON OleExtractIcon(HINSTANCE hInst, LPCWSTR lpszFileName, UINT nIconIndex);
+
+#undef ExtractAssociatedIcon
+#define ExtractAssociatedIcon(x,y,z) USE_OleExtractAssociatedIcon_INSTEAD
+HICON OleExtractAssociatedIcon(HINSTANCE hInst, LPCWSTR lpszFileName, LPWORD
+ pIndex);
+
+// From GDI32P.DLL
+HBRUSH OleGdiConvertBrush(HBRUSH hbrush);
+HBRUSH OleGdiCreateLocalBrush(HBRUSH hbrushRemote);
+
+
+#undef SHGetFileInfo
+#define SHGetFileInfo(v,w,x,y,z) USE_OleSHGetFileInfo_INSTEAD
+DWORD OleSHGetFileInfo(LPCWSTR pszPath, DWORD dwFileAttributes,
+ SHFILEINFO FAR *psfi, UINT cbFileInfo, UINT uFlags);
+
+// HOOK OLE macros for wrapping interface pointers
+#include <hkole32.h>
+
+// ----------------------------------------------------------------------------
+// API/Method trace output
+// ----------------------------------------------------------------------------
+
+#include <trace.hxx>
+
+#endif // _OLE2COM_H_