ReactOS 0.4.16-dev-2354-g16de117
ole2.h File Reference
#include <winerror.h>
#include <objbase.h>
#include <oleauto.h>
#include <oleidl.h>
Include dependency graph for ole2.h:

Go to the source code of this file.

Classes

struct  _OLESTREAMVTBL
 
struct  _OLESTREAM
 

Macros

#define E_DRAW   VIEW_E_DRAW
 
#define DATA_E_FORMATETC   DV_E_FORMATETC
 
#define OLEIVERB_PRIMARY   (0L)
 
#define OLEIVERB_SHOW   (-1L)
 
#define OLEIVERB_OPEN   (-2L)
 
#define OLEIVERB_HIDE   (-3L)
 
#define OLEIVERB_UIACTIVATE   (-4L)
 
#define OLEIVERB_INPLACEACTIVATE   (-5L)
 
#define OLEIVERB_DISCARDUNDOSTATE   (-6L)
 
#define OLEIVERB_PROPERTIES   (-7L)
 
#define EMBDHLP_INPROC_HANDLER   0x00000000
 
#define EMBDHLP_INPROC_SERVER   0x00000001
 
#define EMBDHLP_CREATENOW   0x00000000
 
#define EMBDHLP_DELAYCREATE   0x00010000
 

Typedefs

typedef struct _OLESTREAMLPOLESTREAM
 
typedef struct _OLESTREAMVTBL OLESTREAMVTBL
 
typedef OLESTREAMVTBLLPOLESTREAMVTBL
 
typedef struct _OLESTREAM OLESTREAM
 

Functions

HRESULT WINAPI RegisterDragDrop (HWND, LPDROPTARGET)
 
HRESULT WINAPI RevokeDragDrop (HWND)
 
HRESULT WINAPI DoDragDrop (LPDATAOBJECT, LPDROPSOURCE, DWORD, DWORD *)
 
HRESULT WINAPI OleLoadFromStream (IStream *pStm, REFIID iidInterface, void **ppvObj)
 
HRESULT WINAPI OleSaveToStream (IPersistStream *pPStm, IStream *pStm)
 
HOLEMENU WINAPI OleCreateMenuDescriptor (HMENU hmenuCombined, LPOLEMENUGROUPWIDTHS lpMenuWidths)
 
HRESULT WINAPI OleDestroyMenuDescriptor (HOLEMENU hmenuDescriptor)
 
HRESULT WINAPI OleSetMenuDescriptor (HOLEMENU hmenuDescriptor, HWND hwndFrame, HWND hwndActiveObject, LPOLEINPLACEFRAME lpFrame, LPOLEINPLACEACTIVEOBJECT lpActiveObject)
 
HRESULT WINAPI WriteClassStg (IStorage *pstg, REFCLSID rclsid)
 
HRESULT WINAPI ReadClassStg (IStorage *pstg, CLSID *pclsid)
 
HRESULT WINAPI WriteClassStm (IStream *pStm, REFCLSID rclsid)
 
HRESULT WINAPI ReadClassStm (IStream *pStm, CLSID *pclsid)
 
HRESULT WINAPI OleSave (LPPERSISTSTORAGE pPS, LPSTORAGE pStg, BOOL fSameAsLoad)
 
HRESULT WINAPI OleRegGetUserType (REFCLSID clsid, DWORD dwFormOfType, LPOLESTR *pszUserType)
 
HRESULT WINAPI OleRegGetMiscStatus (REFCLSID clsid, DWORD dwAspect, DWORD *pdwStatus)
 
HRESULT WINAPI OleRegEnumFormatEtc (REFCLSID clsid, DWORD dwDirection, LPENUMFORMATETC *ppenumFormatetc)
 
HRESULT WINAPI CreateStreamOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
 
HRESULT WINAPI GetHGlobalFromStream (LPSTREAM pstm, HGLOBAL *phglobal)
 
HRESULT WINAPI OleRegEnumVerbs (REFCLSID clsid, LPENUMOLEVERB *ppenum)
 
BOOL WINAPI OleIsRunning (LPOLEOBJECT pObject)
 
HRESULT WINAPI OleCreateLinkFromData (LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
 
HRESULT WINAPI OleSetContainedObject (LPUNKNOWN pUnknown, BOOL fContained)
 
HRESULT WINAPI OleNoteObjectVisible (LPUNKNOWN pUnknown, BOOL fVisible)
 
HRESULT WINAPI OleQueryLinkFromData (IDataObject *pSrcDataObject)
 
HRESULT WINAPI OleQueryCreateFromData (LPDATAOBJECT pSrcDataObject)
 
HRESULT WINAPI OleRun (LPUNKNOWN pUnknown)
 
HRESULT WINAPI OleDraw (LPUNKNOWN pUnknown, DWORD dwAspect, HDC hdcDraw, LPCRECT lprcBounds)
 
VOID WINAPI ReleaseStgMedium (LPSTGMEDIUM)
 
HRESULT WINAPI OleGetClipboard (IDataObject **ppDataObj)
 
HRESULT WINAPI OleIsCurrentClipboard (LPDATAOBJECT)
 
HRESULT WINAPI OleSetClipboard (LPDATAOBJECT)
 
HRESULT WINAPI OleCreateStaticFromData (LPDATAOBJECT pSrcDataObj, REFIID iid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
 
HRESULT WINAPI ReadFmtUserTypeStg (LPSTORAGE pstg, CLIPFORMAT *pcf, LPOLESTR *lplpszUserType)
 
HRESULT WINAPI OleLoad (LPSTORAGE pStg, REFIID riid, LPOLECLIENTSITE pClientSite, LPVOID *ppvObj)
 
HRESULT WINAPI GetHGlobalFromILockBytes (LPLOCKBYTES plkbyt, HGLOBAL *phglobal)
 
HRESULT WINAPI CreateILockBytesOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPLOCKBYTES *pplkbyt)
 
HRESULT WINAPI CreateDataAdviseHolder (LPDATAADVISEHOLDER *ppDAHolder)
 
HGLOBAL WINAPI OleGetIconOfClass (REFCLSID rclsid, LPOLESTR lpszLabel, BOOL fUseTypeAsLabel)
 
HGLOBAL WINAPI OleGetIconOfFile (LPOLESTR lpszPath, BOOL fUseFileAsLabel)
 
HGLOBAL WINAPI OleMetafilePictFromIconAndLabel (HICON hIcon, LPOLESTR lpszLabel, LPOLESTR lpszSourceFile, UINT iIconIndex)
 
HRESULT WINAPI OleLockRunning (LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCloses)
 
HRESULT WINAPI OleCreateFromFile (REFCLSID rclsid, LPCOLESTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
 
HRESULT WINAPI OleCreateLink (LPMONIKER pmkLinkSrc, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
 
HRESULT WINAPI OleCreate (REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
 
HRESULT WINAPI OleFlushClipboard (void)
 
HRESULT WINAPI GetConvertStg (LPSTORAGE pStg)
 
HRESULT WINAPI SetConvertStg (LPSTORAGE pStg, BOOL fConvert)
 
BOOL WINAPI IsAccelerator (HACCEL hAccel, int cAccelEntries, struct tagMSG *lpMsg, WORD *lpwCmd)
 
HRESULT WINAPI OleCreateLinkToFile (LPCOLESTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
 
HANDLE WINAPI OleDuplicateData (HANDLE hSrc, CLIPFORMAT cfFormat, UINT uiFlags)
 
HRESULT WINAPI WriteFmtUserTypeStg (LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType)
 
HRESULT WINAPI OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame, LPOLEINPLACEFRAMEINFO lpFrameInfo, struct tagMSG *lpmsg)
 
HRESULT WINAPI OleCreateFromData (LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
 
HRESULT WINAPI OleCreateFromDataEx (LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD dwFlags, DWORD renderopt, ULONG num_formats, DWORD *adv_flags, LPFORMATETC fmts, IAdviseSink *sink, DWORD *conns, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
 
HRESULT WINAPI OleCreateDefaultHandler (REFCLSID clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
 
HRESULT WINAPI OleCreateEmbeddingHelper (REFCLSID clsid, LPUNKNOWN pUnkOuter, DWORD flags, IClassFactory *pCF, REFIID riid, LPVOID *ppvObj)
 
HRESULT WINAPI CreateOleAdviseHolder (LPOLEADVISEHOLDER *ppOAHolder)
 
HRESULT WINAPI OleInitialize (LPVOID pvReserved)
 
void WINAPI OleUninitialize (void)
 
BOOL WINAPI IsValidInterface (LPUNKNOWN punk)
 
DWORD WINAPI OleBuildVersion (VOID)
 
HRESULT WINAPI OleConvertOLESTREAMToIStorage (LPOLESTREAM lpolestream, LPSTORAGE pstg, const DVTARGETDEVICE *ptd)
 
HRESULT WINAPI OleConvertIStorageToOLESTREAM (LPSTORAGE pstg, LPOLESTREAM lpolestream)
 
HRESULT WINAPI OleDoAutoConvert (LPSTORAGE pStg, LPCLSID pClsidNew)
 
HRESULT WINAPI OleGetAutoConvert (REFCLSID clsidOld, LPCLSID pClsidNew)
 
HRESULT WINAPI OleSetAutoConvert (REFCLSID clsidOld, REFCLSID clsidNew)
 

Macro Definition Documentation

◆ DATA_E_FORMATETC

#define DATA_E_FORMATETC   DV_E_FORMATETC

Definition at line 36 of file ole2.h.

◆ E_DRAW

#define E_DRAW   VIEW_E_DRAW

Definition at line 35 of file ole2.h.

◆ EMBDHLP_CREATENOW

#define EMBDHLP_CREATENOW   0x00000000

Definition at line 49 of file ole2.h.

◆ EMBDHLP_DELAYCREATE

#define EMBDHLP_DELAYCREATE   0x00010000

Definition at line 50 of file ole2.h.

◆ EMBDHLP_INPROC_HANDLER

#define EMBDHLP_INPROC_HANDLER   0x00000000

Definition at line 47 of file ole2.h.

◆ EMBDHLP_INPROC_SERVER

#define EMBDHLP_INPROC_SERVER   0x00000001

Definition at line 48 of file ole2.h.

◆ OLEIVERB_DISCARDUNDOSTATE

#define OLEIVERB_DISCARDUNDOSTATE   (-6L)

Definition at line 44 of file ole2.h.

◆ OLEIVERB_HIDE

#define OLEIVERB_HIDE   (-3L)

Definition at line 41 of file ole2.h.

◆ OLEIVERB_INPLACEACTIVATE

#define OLEIVERB_INPLACEACTIVATE   (-5L)

Definition at line 43 of file ole2.h.

◆ OLEIVERB_OPEN

#define OLEIVERB_OPEN   (-2L)

Definition at line 40 of file ole2.h.

◆ OLEIVERB_PRIMARY

#define OLEIVERB_PRIMARY   (0L)

Definition at line 38 of file ole2.h.

◆ OLEIVERB_PROPERTIES

#define OLEIVERB_PROPERTIES   (-7L)

Definition at line 45 of file ole2.h.

◆ OLEIVERB_SHOW

#define OLEIVERB_SHOW   (-1L)

Definition at line 39 of file ole2.h.

◆ OLEIVERB_UIACTIVATE

#define OLEIVERB_UIACTIVATE   (-4L)

Definition at line 42 of file ole2.h.

Typedef Documentation

◆ LPOLESTREAM

Definition at line 149 of file ole2.h.

◆ LPOLESTREAMVTBL

Definition at line 154 of file ole2.h.

◆ OLESTREAM

◆ OLESTREAMVTBL

Function Documentation

◆ CreateDataAdviseHolder()

HRESULT WINAPI CreateDataAdviseHolder ( LPDATAADVISEHOLDER ppDAHolder)

◆ CreateILockBytesOnHGlobal()

HRESULT WINAPI CreateILockBytesOnHGlobal ( HGLOBAL  hGlobal,
BOOL  fDeleteOnRelease,
LPLOCKBYTES pplkbyt 
)

◆ CreateOleAdviseHolder()

HRESULT WINAPI CreateOleAdviseHolder ( LPOLEADVISEHOLDER *  ppOAHolder)

◆ CreateStreamOnHGlobal()

HRESULT WINAPI CreateStreamOnHGlobal ( HGLOBAL  hGlobal,
BOOL  fDeleteOnRelease,
LPSTREAM ppstm 
)

◆ DoDragDrop()

HRESULT WINAPI DoDragDrop ( LPDATAOBJECT  ,
LPDROPSOURCE  ,
DWORD  ,
DWORD  
)

◆ GetConvertStg()

HRESULT WINAPI GetConvertStg ( LPSTORAGE  pStg)

◆ GetHGlobalFromILockBytes()

HRESULT WINAPI GetHGlobalFromILockBytes ( LPLOCKBYTES  plkbyt,
HGLOBAL phglobal 
)

◆ GetHGlobalFromStream()

HRESULT WINAPI GetHGlobalFromStream ( LPSTREAM  pstm,
HGLOBAL phglobal 
)

◆ IsAccelerator()

BOOL WINAPI IsAccelerator ( HACCEL  hAccel,
int  cAccelEntries,
struct tagMSG lpMsg,
WORD lpwCmd 
)

◆ IsValidInterface()

BOOL WINAPI IsValidInterface ( LPUNKNOWN  punk)

Definition at line 172 of file ole32_main.c.

173{
174 return !(IsBadReadPtr(punk,4) ||
175 IsBadReadPtr(punk->lpVtbl,4) ||
176 IsBadReadPtr(punk->lpVtbl->QueryInterface,9) ||
178}
int(* FARPROC)()
Definition: compat.h:36
BOOL WINAPI IsBadReadPtr(IN LPCVOID lp, IN UINT_PTR ucb)
Definition: except.c:805
BOOL NTAPI IsBadCodePtr(FARPROC lpfn)
Definition: except.c:872
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158

Referenced by MkParseDisplayName().

◆ OleBuildVersion()

DWORD WINAPI OleBuildVersion ( VOID  )

Definition at line 153 of file ole2.c.

154{
155 TRACE("Returning version %d, build %d.\n", rmm, rup);
156 return (rmm<<16)+rup;
157}
#define rup
Definition: ole2ver.h:42
#define rmm
Definition: ole2ver.h:41
#define TRACE(s)
Definition: solgame.cpp:4

◆ OleConvertIStorageToOLESTREAM()

HRESULT WINAPI OleConvertIStorageToOLESTREAM ( LPSTORAGE  pstg,
LPOLESTREAM  lpolestream 
)

Definition at line 10301 of file storage32.c.

10304{
10305 int i;
10306 HRESULT hRes = S_OK;
10307 IStream *pStream;
10308 OLECONVERT_OLESTREAM_DATA pOleStreamData[2];
10309
10310 TRACE("%p %p\n", pstg, pOleStream);
10311
10312 memset(pOleStreamData, 0, sizeof(pOleStreamData));
10313
10314 if(pstg == NULL || pOleStream == NULL)
10315 {
10316 hRes = E_INVALIDARG;
10317 }
10318 if(hRes == S_OK)
10319 {
10320 /* Get the ProgID */
10321 pOleStreamData[0].dwOleTypeNameLength = OLESTREAM_MAX_STR_LEN;
10322 hRes = OLECONVERT_GetOLE10ProgID(pstg, pOleStreamData[0].strOleTypeName, &(pOleStreamData[0].dwOleTypeNameLength));
10323 }
10324 if(hRes == S_OK)
10325 {
10326 /* Was it originally Ole10 */
10327 hRes = IStorage_OpenStream(pstg, L"\1Ole10Native", 0, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pStream);
10328 if(hRes == S_OK)
10329 {
10330 IStream_Release(pStream);
10331 /* Get Presentation Data for Ole10Native */
10332 OLECONVERT_GetOle10PresData(pstg, pOleStreamData);
10333 }
10334 else
10335 {
10336 /* Get Presentation Data (OLE20) */
10337 OLECONVERT_GetOle20PresData(pstg, pOleStreamData);
10338 }
10339
10340 /* Save OLESTREAM */
10341 hRes = OLECONVERT_SaveOLE10(&(pOleStreamData[0]), pOleStream);
10342 if(hRes == S_OK)
10343 {
10344 hRes = OLECONVERT_SaveOLE10(&(pOleStreamData[1]), pOleStream);
10345 }
10346
10347 }
10348
10349 /* Free allocated memory */
10350 for(i=0; i < 2; i++)
10351 {
10352 HeapFree(GetProcessHeap(),0,pOleStreamData[i].pData);
10353 }
10354
10355 return hRes;
10356}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define HeapFree(x, y, z)
Definition: compat.h:735
static void OLECONVERT_GetOle10PresData(LPSTORAGE pStorage, OLECONVERT_OLESTREAM_DATA *pOleStreamData)
Definition: storage32.c:10076
static HRESULT OLECONVERT_SaveOLE10(OLECONVERT_OLESTREAM_DATA *pData, LPOLESTREAM pOleStream)
Definition: storage32.c:9566
static void OLECONVERT_GetOle20PresData(LPSTORAGE pStorage, OLECONVERT_OLESTREAM_DATA *pOleStreamData)
Definition: storage32.c:10128
static HRESULT OLECONVERT_GetOLE10ProgID(LPSTORAGE pStorage, char *strProgID, DWORD *dwSize)
Definition: storage32.c:10006
#define OLESTREAM_MAX_STR_LEN
Definition: storage32.c:9336
#define L(x)
Definition: resources.c:13
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
#define STGM_SHARE_EXCLUSIVE
Definition: objbase.h:940
#define STGM_READ
Definition: objbase.h:934
#define memset(x, y, z)
Definition: compat.h:39
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830

◆ OleConvertOLESTREAMToIStorage()

HRESULT WINAPI OleConvertOLESTREAMToIStorage ( LPOLESTREAM  lpolestream,
LPSTORAGE  pstg,
const DVTARGETDEVICE *  ptd 
)

Definition at line 10210 of file storage32.c.

10214{
10215 int i;
10216 HRESULT hRes=S_OK;
10217 OLECONVERT_OLESTREAM_DATA pOleStreamData[2];
10218
10219 TRACE("%p %p %p\n", pOleStream, pstg, ptd);
10220
10221 memset(pOleStreamData, 0, sizeof(pOleStreamData));
10222
10223 if(ptd != NULL)
10224 {
10225 FIXME("DVTARGETDEVICE is not NULL, unhandled parameter\n");
10226 }
10227
10228 if(pstg == NULL || pOleStream == NULL)
10229 {
10230 hRes = E_INVALIDARG;
10231 }
10232
10233 if(hRes == S_OK)
10234 {
10235 /* Load the OLESTREAM to Memory */
10236 hRes = OLECONVERT_LoadOLE10(pOleStream, &pOleStreamData[0], TRUE);
10237 }
10238
10239 if(hRes == S_OK)
10240 {
10241 /* Load the OLESTREAM to Memory (part 2)*/
10242 hRes = OLECONVERT_LoadOLE10(pOleStream, &pOleStreamData[1], FALSE);
10243 }
10244
10245 if(hRes == S_OK)
10246 {
10247
10248 if(pOleStreamData[0].dwDataLength > sizeof(STORAGE_magic))
10249 {
10250 /* Do we have the IStorage Data in the OLESTREAM */
10251 if(memcmp(pOleStreamData[0].pData, STORAGE_magic, sizeof(STORAGE_magic)) ==0)
10252 {
10253 OLECONVERT_GetOLE20FromOLE10(pstg, pOleStreamData[0].pData, pOleStreamData[0].dwDataLength);
10254 OLECONVERT_CreateOlePresStream(pstg, pOleStreamData[1].dwMetaFileWidth, pOleStreamData[1].dwMetaFileHeight, pOleStreamData[1].pData, pOleStreamData[1].dwDataLength);
10255 }
10256 else
10257 {
10258 /* It must be an original OLE 1.0 source */
10259 OLECONVERT_CreateOle10NativeStream(pstg, pOleStreamData[0].pData, pOleStreamData[0].dwDataLength);
10260 }
10261 }
10262 else
10263 {
10264 /* It must be an original OLE 1.0 source */
10265 OLECONVERT_CreateOle10NativeStream(pstg, pOleStreamData[0].pData, pOleStreamData[0].dwDataLength);
10266 }
10267
10268 /* Create CompObj Stream if necessary */
10269 hRes = OLECONVERT_CreateCompObjStream(pstg, pOleStreamData[0].strOleTypeName);
10270 if(hRes == S_OK)
10271 {
10272 /*Create the Ole Stream if necessary */
10273 STORAGE_CreateOleStream(pstg, 0);
10274 }
10275 }
10276
10277
10278 /* Free allocated memory */
10279 for(i=0; i < 2; i++)
10280 {
10281 HeapFree(GetProcessHeap(),0,pOleStreamData[i].pData);
10282 HeapFree(GetProcessHeap(),0,pOleStreamData[i].pstrOleObjFileName);
10283 pOleStreamData[i].pstrOleObjFileName = NULL;
10284 }
10285 return hRes;
10286}
#define FIXME(fmt,...)
Definition: precomp.h:53
_In_ size_t const _In_ int _In_ bool const _In_ unsigned const _In_ __acrt_rounding_mode const _Inout_ __crt_cached_ptd_host & ptd
Definition: cvt.cpp:355
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2802
static void OLECONVERT_CreateOle10NativeStream(LPSTORAGE pStorage, const BYTE *pData, DWORD dwDataLength)
Definition: storage32.c:9968
HRESULT OLECONVERT_CreateCompObjStream(LPSTORAGE pStorage, LPCSTR strOleTypeName)
Definition: storage32.c:9784
static const BYTE STORAGE_magic[8]
Definition: storage32.c:59
static HRESULT OLECONVERT_LoadOLE10(LPOLESTREAM pOleStream, OLECONVERT_OLESTREAM_DATA *pData, BOOL bStream1)
Definition: storage32.c:9398
static void OLECONVERT_GetOLE20FromOLE10(LPSTORAGE pDestStorage, const BYTE *pBuffer, DWORD nBufferLength)
Definition: storage32.c:9677
HRESULT STORAGE_CreateOleStream(IStorage *storage, DWORD flags)
Definition: storage32.c:9079
static void OLECONVERT_CreateOlePresStream(LPSTORAGE pStorage, DWORD dwExtentX, DWORD dwExtentY, BYTE *pData, DWORD dwDataLength)
Definition: storage32.c:9885

◆ OleCreate()

HRESULT WINAPI OleCreate ( REFCLSID  rclsid,
REFIID  riid,
DWORD  renderopt,
LPFORMATETC  pFormatEtc,
LPOLECLIENTSITE  pClientSite,
LPSTORAGE  pStg,
LPVOID ppvObj 
)

Definition at line 2596 of file ole2.c.

2604{
2605 HRESULT hres;
2606 IUnknown * pUnk = NULL;
2607 IOleObject *pOleObject = NULL;
2608
2609 TRACE("%s, %s, %ld, %p, %p, %p, %p.\n", debugstr_guid(rclsid),
2610 debugstr_guid(riid), renderopt, pFormatEtc, pClientSite, pStg, ppvObj);
2611
2612 hres = CoCreateInstance(rclsid, 0, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, riid, (LPVOID*)&pUnk);
2613
2614 if (SUCCEEDED(hres))
2615 hres = IStorage_SetClass(pStg, rclsid);
2616
2617 if (pClientSite && SUCCEEDED(hres))
2618 {
2619 hres = IUnknown_QueryInterface(pUnk, &IID_IOleObject, (LPVOID*)&pOleObject);
2620 if (SUCCEEDED(hres))
2621 {
2623 IOleObject_GetMiscStatus(pOleObject, DVASPECT_CONTENT, &dwStatus);
2624 }
2625 }
2626
2627 if (SUCCEEDED(hres))
2628 {
2629 IPersistStorage * pPS;
2630 if (SUCCEEDED((hres = IUnknown_QueryInterface(pUnk, &IID_IPersistStorage, (LPVOID*)&pPS))))
2631 {
2632 TRACE("trying to set stg %p\n", pStg);
2633 hres = IPersistStorage_InitNew(pPS, pStg);
2634 TRACE("-- result %#lx\n", hres);
2635 IPersistStorage_Release(pPS);
2636 }
2637 }
2638
2639 if (pClientSite && SUCCEEDED(hres))
2640 {
2641 TRACE("trying to set clientsite %p\n", pClientSite);
2642 hres = IOleObject_SetClientSite(pOleObject, pClientSite);
2643 TRACE("-- result %#lx\n", hres);
2644 }
2645
2646 if (pOleObject)
2647 IOleObject_Release(pOleObject);
2648
2649 if (((renderopt == OLERENDER_DRAW) || (renderopt == OLERENDER_FORMAT)) &&
2650 SUCCEEDED(hres))
2651 {
2652 hres = OleRun(pUnk);
2653 if (SUCCEEDED(hres))
2654 {
2655 IOleCache *pOleCache;
2656
2657 if (SUCCEEDED(IUnknown_QueryInterface(pUnk, &IID_IOleCache, (void **)&pOleCache)))
2658 {
2659 DWORD dwConnection;
2660 if (renderopt == OLERENDER_DRAW && !pFormatEtc) {
2661 FORMATETC pfe;
2662 pfe.cfFormat = 0;
2663 pfe.ptd = NULL;
2664 pfe.dwAspect = DVASPECT_CONTENT;
2665 pfe.lindex = -1;
2666 pfe.tymed = TYMED_NULL;
2667 hres = IOleCache_Cache(pOleCache, &pfe, ADVF_PRIMEFIRST, &dwConnection);
2668 }
2669 else
2670 hres = IOleCache_Cache(pOleCache, pFormatEtc, ADVF_PRIMEFIRST, &dwConnection);
2671 IOleCache_Release(pOleCache);
2672 }
2673 }
2674 }
2675
2676 if (FAILED(hres) && pUnk)
2677 {
2678 IUnknown_Release(pUnk);
2679 pUnk = NULL;
2680 }
2681
2682 *ppvObj = pUnk;
2683
2684 TRACE("-- %p\n", pUnk);
2685 return hres;
2686}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
HRESULT WINAPI DECLSPEC_HOTPATCH OleRun(LPUNKNOWN pUnknown)
Definition: ole2.c:1186
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
unsigned long DWORD
Definition: ntddk_ex.h:95
REFIID riid
Definition: atlbase.h:39
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
HRESULT hres
Definition: protocol.c:465
const GUID IID_IOleCache
const GUID IID_IPersistStorage
const GUID IID_IOleObject
DWORD dwStatus
Definition: mediaobj.idl:95

Referenced by InitWebBrowser(), test_OleCreate(), and UIINSERTOBJECTDLG_OnOpen().

◆ OleCreateDefaultHandler()

HRESULT WINAPI OleCreateDefaultHandler ( REFCLSID  clsid,
LPUNKNOWN  pUnkOuter,
REFIID  riid,
LPVOID ppvObj 
)

Definition at line 2281 of file defaulthandler.c.

2283{
2284 TRACE("(%s, %p, %s, %p)\n", debugstr_guid(clsid), pUnkOuter,debugstr_guid(riid), ppvObj);
2286 NULL, riid, ppvObj);
2287}
HRESULT WINAPI OleCreateEmbeddingHelper(REFCLSID clsid, LPUNKNOWN pUnkOuter, DWORD flags, IClassFactory *pCF, REFIID riid, LPVOID *ppvObj)
const CLSID * clsid
Definition: msctf.cpp:50
#define EMBDHLP_INPROC_HANDLER
Definition: ole2.h:47
#define EMBDHLP_CREATENOW
Definition: ole2.h:49

Referenced by add_icon_to_control(), HandlerCF_CreateInstance(), insert_static_object(), OleCreateStaticFromData(), OleLoad(), test_default_handler(), test_default_handler_run(), and test_olestream().

◆ OleCreateEmbeddingHelper()

HRESULT WINAPI OleCreateEmbeddingHelper ( REFCLSID  clsid,
LPUNKNOWN  pUnkOuter,
DWORD  flags,
IClassFactory pCF,
REFIID  riid,
LPVOID ppvObj 
)

Definition at line 2228 of file defaulthandler.c.

2235{
2236 DefaultHandler* newHandler = NULL;
2237 HRESULT hr = S_OK;
2238
2239 TRACE("%s, %p, %#lx, %p, %s, %p.\n", debugstr_guid(clsid), pUnkOuter, flags, pCF, debugstr_guid(riid), ppvObj);
2240
2241 if (!ppvObj)
2242 return E_POINTER;
2243
2244 *ppvObj = NULL;
2245
2246 /*
2247 * If This handler is constructed for aggregation, make sure
2248 * the caller is requesting the IUnknown interface.
2249 * This is necessary because it's the only time the non-delegating
2250 * IUnknown pointer can be returned to the outside.
2251 */
2252 if (pUnkOuter && !IsEqualIID(&IID_IUnknown, riid))
2253 return CLASS_E_NOAGGREGATION;
2254
2255 /*
2256 * Try to construct a new instance of the class.
2257 */
2258 newHandler = DefaultHandler_Construct(clsid, pUnkOuter, flags, pCF);
2259
2260 if (!newHandler)
2261 return E_OUTOFMEMORY;
2262
2263 /*
2264 * Make sure it supports the interface required by the caller.
2265 */
2266 hr = IUnknown_QueryInterface(&newHandler->IUnknown_iface, riid, ppvObj);
2267
2268 /*
2269 * Release the reference obtained in the constructor. If
2270 * the QueryInterface was unsuccessful, it will free the class.
2271 */
2272 IUnknown_Release(&newHandler->IUnknown_iface);
2273
2274 return hr;
2275}
const GUID IID_IUnknown
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static DefaultHandler * DefaultHandler_Construct(REFCLSID clsid, LPUNKNOWN pUnkOuter, DWORD flags, IClassFactory *pCF)
GLbitfield flags
Definition: glext.h:7161
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HRESULT hr
Definition: shlfolder.c:183
IUnknown IUnknown_iface
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define E_POINTER
Definition: winerror.h:3480

Referenced by OleCreateDefaultHandler(), and test_default_handler().

◆ OleCreateFromData()

HRESULT WINAPI OleCreateFromData ( LPDATAOBJECT  pSrcDataObj,
REFIID  riid,
DWORD  renderopt,
LPFORMATETC  pFormatEtc,
LPOLECLIENTSITE  pClientSite,
LPSTORAGE  pStg,
LPVOID ppvObj 
)

◆ OleCreateFromDataEx()

HRESULT WINAPI OleCreateFromDataEx ( LPDATAOBJECT  pSrcDataObj,
REFIID  riid,
DWORD  dwFlags,
DWORD  renderopt,
ULONG  num_formats,
DWORD adv_flags,
LPFORMATETC  fmts,
IAdviseSink sink,
DWORD conns,
LPOLECLIENTSITE  pClientSite,
LPSTORAGE  pStg,
LPVOID ppvObj 
)

◆ OleCreateFromFile()

HRESULT WINAPI OleCreateFromFile ( REFCLSID  rclsid,
LPCOLESTR  lpszFileName,
REFIID  riid,
DWORD  renderopt,
LPFORMATETC  lpFormatEtc,
LPOLECLIENTSITE  pClientSite,
LPSTORAGE  pStg,
LPVOID ppvObj 
)

◆ OleCreateLink()

HRESULT WINAPI OleCreateLink ( LPMONIKER  pmkLinkSrc,
REFIID  riid,
DWORD  renderopt,
LPFORMATETC  lpFormatEtc,
LPOLECLIENTSITE  pClientSite,
LPSTORAGE  pStg,
LPVOID ppvObj 
)

Definition at line 47 of file ole2stubs.c.

49{
50 FIXME("(not shown), stub!\n");
51 return E_NOTIMPL;
52}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ OleCreateLinkFromData()

HRESULT WINAPI OleCreateLinkFromData ( LPDATAOBJECT  pSrcDataObj,
REFIID  riid,
DWORD  renderopt,
LPFORMATETC  pFormatEtc,
LPOLECLIENTSITE  pClientSite,
LPSTORAGE  pStg,
LPVOID ppvObj 
)

◆ OleCreateLinkToFile()

HRESULT WINAPI OleCreateLinkToFile ( LPCOLESTR  lpszFileName,
REFIID  riid,
DWORD  renderopt,
LPFORMATETC  lpFormatEtc,
LPOLECLIENTSITE  pClientSite,
LPSTORAGE  pStg,
LPVOID ppvObj 
)

Definition at line 36 of file ole2stubs.c.

39{
40 FIXME("%p, %p, %ld, %p, %p, %p, %p stub!\n",lpszFileName, riid, renderopt, lpFormatEtc, pClientSite, pStg, ppvObj);
41 return E_NOTIMPL;
42}

◆ OleCreateMenuDescriptor()

HOLEMENU WINAPI OleCreateMenuDescriptor ( HMENU  hmenuCombined,
LPOLEMENUGROUPWIDTHS  lpMenuWidths 
)

Definition at line 1793 of file ole2.c.

1796{
1797 HOLEMENU hOleMenu;
1798 OleMenuDescriptor *pOleMenuDescriptor;
1799 int i;
1800
1801 if ( !hmenuCombined || !lpMenuWidths )
1802 return 0;
1803
1804 /* Create an OLE menu descriptor */
1805 if ( !(hOleMenu = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,
1806 sizeof(OleMenuDescriptor) ) ) )
1807 return 0;
1808
1809 pOleMenuDescriptor = GlobalLock( hOleMenu );
1810 if ( !pOleMenuDescriptor )
1811 return 0;
1812
1813 /* Initialize menu group widths and hmenu */
1814 for ( i = 0; i < 6; i++ )
1815 pOleMenuDescriptor->mgw.width[i] = lpMenuWidths->width[i];
1816
1817 pOleMenuDescriptor->hmenuCombined = hmenuCombined;
1818 pOleMenuDescriptor->bIsServerItem = FALSE;
1819 GlobalUnlock( hOleMenu );
1820
1821 return hOleMenu;
1822}
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
BOOL bIsServerItem
Definition: ole2.c:83
HMENU hmenuCombined
Definition: ole2.c:82
OLEMENUGROUPWIDTHS mgw
Definition: ole2.c:81
#define GMEM_ZEROINIT
Definition: winbase.h:330
#define GMEM_MOVEABLE
Definition: winbase.h:318

◆ OleCreateStaticFromData()

HRESULT WINAPI OleCreateStaticFromData ( LPDATAOBJECT  pSrcDataObj,
REFIID  iid,
DWORD  renderopt,
LPFORMATETC  pFormatEtc,
LPOLECLIENTSITE  pClientSite,
LPSTORAGE  pStg,
LPVOID ppvObj 
)

◆ OleDestroyMenuDescriptor()

HRESULT WINAPI OleDestroyMenuDescriptor ( HOLEMENU  hmenuDescriptor)

Definition at line 1828 of file ole2.c.

1830{
1831 if ( hmenuDescriptor )
1832 GlobalFree( hmenuDescriptor );
1833 return S_OK;
1834}
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611

◆ OleDoAutoConvert()

HRESULT WINAPI OleDoAutoConvert ( LPSTORAGE  pStg,
LPCLSID  pClsidNew 
)

Definition at line 2743 of file ole2.c.

2744{
2745 WCHAR *user_type_old, *user_type_new;
2746 CLIPFORMAT cf;
2747 STATSTG stat;
2748 CLSID clsid;
2749 HRESULT hr;
2750
2751 TRACE("(%p, %p)\n", pStg, pClsidNew);
2752
2753 *pClsidNew = CLSID_NULL;
2754 if(!pStg)
2755 return E_INVALIDARG;
2756 hr = IStorage_Stat(pStg, &stat, STATFLAG_NONAME);
2757 if(FAILED(hr))
2758 return hr;
2759
2760 *pClsidNew = stat.clsid;
2761 hr = OleGetAutoConvert(&stat.clsid, &clsid);
2762 if(FAILED(hr))
2763 return hr;
2764
2765 hr = IStorage_SetClass(pStg, &clsid);
2766 if(FAILED(hr))
2767 return hr;
2768
2769 hr = ReadFmtUserTypeStg(pStg, &cf, &user_type_old);
2770 if(FAILED(hr)) {
2771 cf = 0;
2772 user_type_new = NULL;
2773 }
2774
2775 hr = OleRegGetUserType(&clsid, USERCLASSTYPE_FULL, &user_type_new);
2776 if(FAILED(hr))
2777 user_type_new = NULL;
2778
2779 hr = WriteFmtUserTypeStg(pStg, cf, user_type_new);
2780 CoTaskMemFree(user_type_new);
2781 if(FAILED(hr))
2782 {
2783 CoTaskMemFree(user_type_old);
2784 IStorage_SetClass(pStg, &stat.clsid);
2785 return hr;
2786 }
2787
2788 hr = SetConvertStg(pStg, TRUE);
2789 if(FAILED(hr))
2790 {
2791 WriteFmtUserTypeStg(pStg, cf, user_type_old);
2792 IStorage_SetClass(pStg, &stat.clsid);
2793 }
2794 else
2795 *pClsidNew = clsid;
2796 CoTaskMemFree(user_type_old);
2797 return hr;
2798}
#define stat
Definition: acwin.h:99
HRESULT WINAPI OleRegGetUserType(REFCLSID clsid, DWORD form, LPOLESTR *usertype)
Definition: ole2.c:668
HRESULT WINAPI OleGetAutoConvert(REFCLSID clsidOld, LPCLSID pClsidNew)
Definition: ole2.c:2691
HRESULT WINAPI ReadFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT *pcf, LPOLESTR *lplpszUserType)
Definition: storage32.c:9269
HRESULT WINAPI WriteFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType)
Definition: storage32.c:9226
HRESULT WINAPI SetConvertStg(IStorage *storage, BOOL convert)
Definition: storage32.c:10377
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
#define CLSID_NULL
Definition: guiddef.h:99
Definition: stat.h:66
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by test_OleDoAutoConvert().

◆ OleDraw()

HRESULT WINAPI OleDraw ( LPUNKNOWN  pUnknown,
DWORD  dwAspect,
HDC  hdcDraw,
LPCRECT  lprcBounds 
)

◆ OleDuplicateData()

HANDLE WINAPI OleDuplicateData ( HANDLE  hSrc,
CLIPFORMAT  cfFormat,
UINT  uiFlags 
)

Definition at line 3219 of file ole2.c.

3220{
3221 HANDLE hDst = NULL;
3222
3223 TRACE("(%p,%x,%x)\n", hSrc, cfFormat, uiFlags);
3224
3225 if (!uiFlags) uiFlags = GMEM_MOVEABLE;
3226
3227 switch (cfFormat)
3228 {
3229 case CF_ENHMETAFILE:
3230 hDst = CopyEnhMetaFileW(hSrc, NULL);
3231 break;
3232 case CF_METAFILEPICT:
3233 hDst = CopyMetaFileW(hSrc, NULL);
3234 break;
3235 case CF_PALETTE:
3236 {
3238 UINT nEntries = GetPaletteEntries(hSrc, 0, 0, NULL);
3239 if (!nEntries) return NULL;
3241 FIELD_OFFSET(LOGPALETTE, palPalEntry[nEntries]));
3242 if (!logpalette) return NULL;
3243 if (!GetPaletteEntries(hSrc, 0, nEntries, logpalette->palPalEntry))
3244 {
3246 return NULL;
3247 }
3248 logpalette->palVersion = 0x300;
3249 logpalette->palNumEntries = (WORD)nEntries;
3250
3251 hDst = CreatePalette(logpalette);
3252
3254 break;
3255 }
3256 case CF_BITMAP:
3257 {
3258 LONG size;
3259 BITMAP bm;
3260 if (!GetObjectW(hSrc, sizeof(bm), &bm))
3261 return NULL;
3262 size = GetBitmapBits(hSrc, 0, NULL);
3263 if (!size) return NULL;
3264 bm.bmBits = HeapAlloc(GetProcessHeap(), 0, size);
3265 if (!bm.bmBits) return NULL;
3266 if (GetBitmapBits(hSrc, size, bm.bmBits))
3267 hDst = CreateBitmapIndirect(&bm);
3268 HeapFree(GetProcessHeap(), 0, bm.bmBits);
3269 break;
3270 }
3271 default:
3272 {
3273 SIZE_T size = GlobalSize(hSrc);
3274 LPVOID pvSrc = NULL;
3275 LPVOID pvDst = NULL;
3276
3277 /* allocate space for object */
3278 if (!size) return NULL;
3279 hDst = GlobalAlloc(uiFlags, size);
3280 if (!hDst) return NULL;
3281
3282 /* lock pointers */
3283 pvSrc = GlobalLock(hSrc);
3284 if (!pvSrc)
3285 {
3286 GlobalFree(hDst);
3287 return NULL;
3288 }
3289 pvDst = GlobalLock(hDst);
3290 if (!pvDst)
3291 {
3292 GlobalUnlock(hSrc);
3293 GlobalFree(hDst);
3294 return NULL;
3295 }
3296 /* copy data */
3297 memcpy(pvDst, pvSrc, size);
3298
3299 /* cleanup */
3300 GlobalUnlock(hDst);
3301 GlobalUnlock(hSrc);
3302 }
3303 }
3304
3305 TRACE("returning %p\n", hDst);
3306 return hDst;
3307}
#define CF_METAFILEPICT
Definition: constants.h:398
#define CF_BITMAP
Definition: constants.h:397
#define CF_PALETTE
Definition: constants.h:404
#define CF_ENHMETAFILE
Definition: constants.h:409
#define HeapAlloc
Definition: compat.h:733
unsigned short WORD
Definition: ntddk_ex.h:93
GLsizeiptr size
Definition: glext.h:5919
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const LOGPALETTE logpalette
Definition: clipboard.c:1342
unsigned int UINT
Definition: ndis.h:50
long LONG
Definition: pedump.c:60
LPVOID bmBits
Definition: wingdi.h:1873
WORD palNumEntries
Definition: wingdi.h:2280
WORD palVersion
Definition: wingdi.h:2279
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
ULONG_PTR SIZE_T
Definition: typedefs.h:80
UINT WINAPI GetPaletteEntries(HPALETTE hpal, UINT iStartIndex, UINT cEntries, LPPALETTEENTRY ppe)
Definition: palette.c:64
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
HPALETTE WINAPI CreatePalette(_In_reads_(_Inexpressible_(2 *sizeof(WORD)+plpal->palNumEntries *sizeof(PALETTEENTRY))) const LOGPALETTE *)
HBITMAP WINAPI CreateBitmapIndirect(_In_ const BITMAP *pbm)
HENHMETAFILE WINAPI CopyEnhMetaFileW(_In_ HENHMETAFILE hemfSrc, _In_opt_ LPCWSTR pszFile)
HMETAFILE WINAPI CopyMetaFileW(_In_ HMETAFILE hmfSrc, _In_opt_ LPCWSTR pszFile)
LONG WINAPI GetBitmapBits(_In_ HBITMAP hbit, _In_ LONG cb, _Out_writes_bytes_(cb) LPVOID lpvBits)

Referenced by copy_stg_medium(), and IDataObjectImpl::CopyMedium().

◆ OleFlushClipboard()

HRESULT WINAPI OleFlushClipboard ( void  )

Definition at line 2290 of file clipboard.c.

2291{
2292 struct oletls *info = COM_CurrentInfo();
2293 HRESULT hr;
2294 ole_clipbrd *clipbrd;
2295 HWND wnd;
2296
2297 TRACE("()\n");
2298
2299 if(FAILED(hr = get_ole_clipbrd(&clipbrd))) return hr;
2300
2301 if(!info->ole_inits)
2302 return E_FAIL;
2303
2304 if(FAILED(hr = get_clipbrd_window(clipbrd, &wnd))) return hr;
2305
2306 /*
2307 * Already flushed or no source DataObject? Nothing to do.
2308 */
2309 if (!clipbrd->src_data) return S_OK;
2310
2311 if (!OpenClipboard(wnd)) return CLIPBRD_E_CANT_OPEN;
2312
2314
2316
2318 set_src_dataobject(clipbrd, NULL);
2319
2321
2322 return hr;
2323}
static struct oletls * COM_CurrentInfo(void)
#define E_FAIL
Definition: ddrawi.h:102
static HRESULT set_src_dataobject(ole_clipbrd *clipbrd, IDataObject *data)
Definition: clipboard.c:1971
static HRESULT expose_marshalled_dataobject(ole_clipbrd *clipbrd, IDataObject *data)
Definition: clipboard.c:1939
static HRESULT set_dataobject_format(HWND hwnd)
Definition: clipboard.c:2154
static HRESULT get_clipbrd_window(ole_clipbrd *clipbrd, HWND *wnd)
Definition: clipboard.c:1900
static HRESULT get_ole_clipbrd(ole_clipbrd **clipbrd)
Definition: clipboard.c:261
IDataObject * src_data
Definition: clipboard.c:152
#define CLIPBRD_E_CANT_CLOSE
Definition: winerror.h:3884
#define CLIPBRD_E_CANT_OPEN
Definition: winerror.h:3880
BOOL WINAPI CloseClipboard(void)
Definition: ntwrapper.h:178
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
#define WM_RENDERALLFORMATS
Definition: winuser.h:1895
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by fnTextSrv_TxSetText(), CShellBrowser::OnDestroy(), SHFlushClipboard(), START_TEST(), test_consumer_refs(), test_flushed_getdata(), test_get_clipboard_uninitialized(), test_set_clipboard(), and test_set_clipboard_DRAWCLIPBOARD().

◆ OleGetAutoConvert()

HRESULT WINAPI OleGetAutoConvert ( REFCLSID  clsidOld,
LPCLSID  pClsidNew 
)

Definition at line 2691 of file ole2.c.

2692{
2693 HKEY hkey = NULL;
2695 LONG len;
2696 HRESULT res = S_OK;
2697
2698 res = COM_OpenKeyForCLSID(clsidOld, L"AutoConvertTo", KEY_READ, &hkey);
2699 if (FAILED(res))
2700 goto done;
2701
2702 len = sizeof(buf);
2703 if (RegQueryValueW(hkey, NULL, buf, &len))
2704 {
2706 goto done;
2707 }
2708 res = CLSIDFromString(buf, pClsidNew);
2709done:
2710 if (hkey) RegCloseKey(hkey);
2711 return res;
2712}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define CHARS_IN_GUID
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4241
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
Definition: combase.c:1470
HRESULT COM_OpenKeyForCLSID(REFCLSID clsid, LPCWSTR keyname, REGSAM access, HKEY *subkey)
Definition: compobj.c:540
GLuint res
Definition: glext.h:9613
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLenum GLsizei len
Definition: glext.h:6722
#define KEY_READ
Definition: nt_native.h:1026
#define REGDB_E_KEYMISSING
Definition: winerror.h:3799

Referenced by OleDoAutoConvert(), and test_OleDoAutoConvert().

◆ OleGetClipboard()

HRESULT WINAPI OleGetClipboard ( IDataObject **  ppDataObj)

Definition at line 2246 of file clipboard.c.

2247{
2248 HRESULT hr;
2249 ole_clipbrd *clipbrd;
2250 DWORD seq_no;
2251
2252 TRACE("(%p)\n", obj);
2253
2254 if(!obj) return E_INVALIDARG;
2255 *obj = NULL;
2256
2257 if(FAILED(hr = get_ole_clipbrd(&clipbrd))) return hr;
2258
2259 seq_no = GetClipboardSequenceNumber();
2261 if(clipbrd->latest_snapshot && clipbrd->latest_snapshot->seq_no != seq_no)
2262 clipbrd->latest_snapshot = NULL;
2263
2264 if(!clipbrd->latest_snapshot)
2265 {
2266 clipbrd->latest_snapshot = snapshot_construct(seq_no);
2267 if(!clipbrd->latest_snapshot)
2268 {
2270 return E_OUTOFMEMORY;
2271 }
2272 }
2273
2275 IDataObject_AddRef(*obj);
2277
2278 return S_OK;
2279}
static snapshot * snapshot_construct(DWORD seq_no)
Definition: clipboard.c:1785
static CRITICAL_SECTION latest_snapshot_cs
Definition: clipboard.c:175
EXTINLINE DWORD WINAPI GetClipboardSequenceNumber(VOID)
Definition: ntwrapper.h:202
snapshot * latest_snapshot
Definition: clipboard.c:149
IDataObject IDataObject_iface
Definition: clipboard.c:136
DWORD seq_no
Definition: clipboard.c:139
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)

Referenced by CDefViewBckgrndMenu::_bCanPaste(), CDefaultContextMenu::DoPaste(), CFontExt::GetUIObjectOf(), HasClipboardData(), CFontBackgroundMenu::InvokeCommand(), OleUIPasteSpecialW(), paste_special(), test_complex_get_clipboard(), test_consumer_refs(), test_enum_fmtetc(), test_flushed_getdata(), test_get_clipboard(), test_get_clipboard_locked(), test_get_clipboard_uninitialized(), test_getdatahere(), test_multithreaded_clipboard(), and test_nonole_clipboard().

◆ OleGetIconOfClass()

HGLOBAL WINAPI OleGetIconOfClass ( REFCLSID  rclsid,
LPOLESTR  lpszLabel,
BOOL  fUseTypeAsLabel 
)

Definition at line 57 of file ole2stubs.c.

58{
59 FIXME("(%p,%p,%x), stub!\n", rclsid, lpszLabel, fUseTypeAsLabel);
60 return NULL;
61}

◆ OleGetIconOfFile()

HGLOBAL WINAPI OleGetIconOfFile ( LPOLESTR  lpszPath,
BOOL  fUseFileAsLabel 
)

Definition at line 66 of file ole2stubs.c.

67{
68 FIXME("(%s, %d), stub!\n", debugstr_w(path), use_file_as_label);
69 return NULL;
70}
#define debugstr_w
Definition: kernel32.h:32

◆ OleInitialize()

HRESULT WINAPI OleInitialize ( LPVOID  pvReserved)

Definition at line 162 of file ole2.c.

163{
164 HRESULT hr;
165
166 TRACE("(%p)\n", reserved);
167
168 /*
169 * The first duty of the OleInitialize is to initialize the COM libraries.
170 */
172
173 /*
174 * If the CoInitializeEx call failed, the OLE libraries can't be
175 * initialized.
176 */
177 if (FAILED(hr))
178 return hr;
179
180 if (!COM_CurrentInfo()->ole_inits)
181 hr = S_OK;
182 else
183 hr = S_FALSE;
184
185 /*
186 * Then, it has to initialize the OLE specific modules.
187 * This includes:
188 * Clipboard
189 * Drag and Drop
190 * Object linking and Embedding
191 * In-place activation
192 */
193 if (!COM_CurrentInfo()->ole_inits++ &&
195 {
196 /*
197 * Initialize the libraries.
198 */
199 TRACE("() - Initializing the OLE libraries\n");
200
201 /*
202 * Drag and Drop
203 */
205
206 /*
207 * OLE shared menu
208 */
210 }
211
212 return hr;
213}
#define InterlockedIncrement
Definition: armddk.h:53
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
Definition: combase.c:2803
static LONG OLE_moduleLockCount
Definition: ole2.c:101
static void OLEMenu_Initialize(void)
Definition: ole2.c:1392
static void OLEDD_Initialize(void)
Definition: ole2.c:2106
r reserved
Definition: btrfs.c:3006
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:279
#define S_FALSE
Definition: winerror.h:3451

Referenced by _tWinMain(), adv_install(), AtlAxWinInit(), AVIFileInit(), BrowserThreadProc(), CreateHelpViewer(), CDesktopThread::DesktopThreadProc(), display_cpl_sheets(), do_enum(), FileOpenDlgProc95(), hook_proc(), ImageView_Main(), init_explorerbrowser(), ME_MakeEditor(), OleInit::OleInit(), SHRegisterDragDrop(), START_TEST(), StartWithDesktop(), test_CoCreateInstance(), test_CoInitializeEx(), test_consumer_refs(), test_DoDragDrop(), test_flushed_getdata(), test_get_clipboard_locked(), test_getdatahere(), test_multithreaded_clipboard(), test_nonole_clipboard(), test_ole_init_wndproc(), test_ole_initialization(), test_OleCreateFontIndirect(), test_OleInitialize_InitCounting(), test_Register_Revoke(), test_set_clipboard(), test_set_clipboard_DRAWCLIPBOARD(), test_TreatAsClass(), CHardErrorThread::ThreadProc(), wmain(), and wWinMain().

◆ OleIsCurrentClipboard()

HRESULT WINAPI OleIsCurrentClipboard ( LPDATAOBJECT  )

◆ OleIsRunning()

BOOL WINAPI OleIsRunning ( LPOLEOBJECT  pObject)

Definition at line 2803 of file ole2.c.

2804{
2805 IRunnableObject *pRunnable;
2806 HRESULT hr;
2807 BOOL running;
2808
2809 TRACE("(%p)\n", object);
2810
2811 if (!object) return FALSE;
2812
2813 hr = IOleObject_QueryInterface(object, &IID_IRunnableObject, (void **)&pRunnable);
2814 if (FAILED(hr))
2815 return TRUE;
2816 running = IRunnableObject_IsRunning(pRunnable);
2817 IRunnableObject_Release(pRunnable);
2818 return running;
2819}
unsigned int BOOL
Definition: ntddk_ex.h:94
const GUID IID_IRunnableObject

Referenced by test_runnable().

◆ OleLoad()

HRESULT WINAPI OleLoad ( LPSTORAGE  pStg,
REFIID  riid,
LPOLECLIENTSITE  pClientSite,
LPVOID ppvObj 
)

Definition at line 1205 of file ole2.c.

1210{
1211 IPersistStorage* persistStorage = NULL;
1212 IUnknown* pUnk;
1213 IOleObject* pOleObject = NULL;
1214 STATSTG storageInfo;
1215 HRESULT hres;
1216
1217 TRACE("(%p, %s, %p, %p)\n", pStg, debugstr_guid(riid), pClientSite, ppvObj);
1218
1219 *ppvObj = NULL;
1220
1221 /*
1222 * TODO, Conversion ... OleDoAutoConvert
1223 */
1224
1225 /*
1226 * Get the class ID for the object.
1227 */
1228 hres = IStorage_Stat(pStg, &storageInfo, STATFLAG_NONAME);
1229 if (FAILED(hres))
1230 return hres;
1231
1232 /*
1233 * Now, try and create the handler for the object
1234 */
1235 hres = CoCreateInstance(&storageInfo.clsid,
1236 NULL,
1237 CLSCTX_INPROC_HANDLER|CLSCTX_INPROC_SERVER,
1238 riid,
1239 (void**)&pUnk);
1240
1241 /*
1242 * If that fails, as it will most times, load the default
1243 * OLE handler.
1244 */
1245 if (FAILED(hres))
1246 {
1247 hres = OleCreateDefaultHandler(&storageInfo.clsid,
1248 NULL,
1249 riid,
1250 (void**)&pUnk);
1251 }
1252
1253 /*
1254 * If we couldn't find a handler... this is bad. Abort the whole thing.
1255 */
1256 if (FAILED(hres))
1257 return hres;
1258
1259 if (pClientSite)
1260 {
1261 hres = IUnknown_QueryInterface(pUnk, &IID_IOleObject, (void **)&pOleObject);
1262 if (SUCCEEDED(hres))
1263 {
1265 hres = IOleObject_GetMiscStatus(pOleObject, DVASPECT_CONTENT, &dwStatus);
1266 }
1267 }
1268
1269 /*
1270 * Initialize the object with its IPersistStorage interface.
1271 */
1272 hres = IUnknown_QueryInterface(pUnk, &IID_IPersistStorage, (void**)&persistStorage);
1273 if (SUCCEEDED(hres))
1274 {
1275 hres = IPersistStorage_Load(persistStorage, pStg);
1276
1277 IPersistStorage_Release(persistStorage);
1278 persistStorage = NULL;
1279 }
1280
1281 if (SUCCEEDED(hres) && pClientSite)
1282 /*
1283 * Inform the new object of its client site.
1284 */
1285 hres = IOleObject_SetClientSite(pOleObject, pClientSite);
1286
1287 /*
1288 * Cleanup interfaces used internally
1289 */
1290 if (pOleObject)
1291 IOleObject_Release(pOleObject);
1292
1293 if (SUCCEEDED(hres))
1294 {
1295 IOleLink *pOleLink;
1296 HRESULT hres1;
1297 hres1 = IUnknown_QueryInterface(pUnk, &IID_IOleLink, (void **)&pOleLink);
1298 if (SUCCEEDED(hres1))
1299 {
1300 FIXME("handle OLE link\n");
1301 IOleLink_Release(pOleLink);
1302 }
1303 }
1304
1305 if (FAILED(hres))
1306 {
1307 IUnknown_Release(pUnk);
1308 pUnk = NULL;
1309 }
1310
1311 *ppvObj = pUnk;
1312
1313 return hres;
1314}
HRESULT WINAPI OleCreateDefaultHandler(REFCLSID clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
const GUID IID_IOleLink

Referenced by OleCreateFromDataEx(), OleCreateFromFileEx(), and test_OleLoad().

◆ OleLoadFromStream()

HRESULT WINAPI OleLoadFromStream ( IStream pStm,
REFIID  iidInterface,
void **  ppvObj 
)

Definition at line 9001 of file storage32.c.

9002{
9003 CLSID clsid;
9004 HRESULT res;
9005 LPPERSISTSTREAM xstm;
9006
9007 TRACE("(%p,%s,%p)\n",pStm,debugstr_guid(iidInterface),ppvObj);
9008
9009 res=ReadClassStm(pStm,&clsid);
9010 if (FAILED(res))
9011 return res;
9012 res=CoCreateInstance(&clsid,NULL,CLSCTX_INPROC_SERVER,iidInterface,ppvObj);
9013 if (FAILED(res))
9014 return res;
9015 res=IUnknown_QueryInterface((IUnknown*)*ppvObj,&IID_IPersistStream,(LPVOID*)&xstm);
9016 if (FAILED(res)) {
9017 IUnknown_Release((IUnknown*)*ppvObj);
9018 return res;
9019 }
9020 res=IPersistStream_Load(xstm,pStm);
9021 IPersistStream_Release(xstm);
9022 /* FIXME: all refcounts ok at this point? I think they should be:
9023 * pStm : unchanged
9024 * ppvObj : 1
9025 * xstm : 0 (released)
9026 */
9027 return res;
9028}
HRESULT WINAPI ReadClassStm(IStream *pStm, CLSID *pclsid)
Definition: storage32.c:109
interface IPersistStream * LPPERSISTSTREAM
Definition: objfwd.h:16
const GUID IID_IPersistStream
Definition: proxy.cpp:13

Referenced by CompositeMonikerImpl_Load(), HlinkClone(), IPersistStream_fnLoad(), and CTrayBandSite::OnLoad().

◆ OleLockRunning()

HRESULT WINAPI OleLockRunning ( LPUNKNOWN  pUnknown,
BOOL  fLock,
BOOL  fLastUnlockCloses 
)

Definition at line 1358 of file ole2.c.

1359{
1361 HRESULT hres;
1362
1363 TRACE("(%p,%x,%x)\n", pUnknown, fLock, fLastUnlockCloses);
1364
1365 hres = IUnknown_QueryInterface(pUnknown,
1367 (void**)&runnable);
1368
1369 if (SUCCEEDED(hres))
1370 {
1371 hres = IRunnableObject_LockRunning(runnable, fLock, fLastUnlockCloses);
1372
1373 IRunnableObject_Release(runnable);
1374
1375 return hres;
1376 }
1377
1378 return S_OK;
1379}
_In_ PUNKNOWN pUnknown
Definition: drmk.h:76
static IRunnableObject * runnable
Definition: ole2.c:76

Referenced by test_OleLockRunning().

◆ OleMetafilePictFromIconAndLabel()

HGLOBAL WINAPI OleMetafilePictFromIconAndLabel ( HICON  hIcon,
LPOLESTR  lpszLabel,
LPOLESTR  lpszSourceFile,
UINT  iIconIndex 
)

Definition at line 40 of file ole32_main.c.

42{
43 METAFILEPICT mfp;
44 HDC hdc;
45 HGLOBAL hmem = NULL;
46 LPVOID mfdata;
47 static const char szIconOnly[] = "IconOnly";
48 SIZE text_size = { 0, 0 };
49 INT width;
50 INT icon_width;
51 INT icon_height;
52 INT label_offset;
53 HDC hdcScreen;
54 LOGFONTW lf;
55 HFONT font;
56
57 TRACE("%p %p %s %d\n", hIcon, lpszLabel, debugstr_w(lpszSourceFile), iIconIndex);
58
59 if( !hIcon )
60 return NULL;
61
62 if (!SystemParametersInfoW(SPI_GETICONTITLELOGFONT, sizeof(lf), &lf, 0))
63 return NULL;
64
66 if (!font)
67 return NULL;
68
70 if( !hdc )
71 {
73 return NULL;
74 }
75
77
78 ExtEscape(hdc, MFCOMMENT, sizeof(szIconOnly), szIconOnly, 0, NULL);
79
80 icon_width = GetSystemMetrics(SM_CXICON);
81 icon_height = GetSystemMetrics(SM_CYICON);
82 /* FIXME: should we give the label a bit of padding here? */
83 label_offset = icon_height;
84 if (lpszLabel)
85 {
86 HFONT screen_old_font;
87 /* metafile DCs don't support GetTextExtentPoint32, so size the font
88 * using the desktop window DC */
89 hdcScreen = GetDC(NULL);
90 screen_old_font = SelectObject(hdcScreen, font);
91 GetTextExtentPoint32W(hdcScreen, lpszLabel, lstrlenW(lpszLabel), &text_size);
92 SelectObject(hdcScreen, screen_old_font);
93 ReleaseDC(NULL, hdcScreen);
94
95 width = 3 * icon_width;
96 }
97 else
98 width = icon_width;
99
101 SetWindowOrgEx(hdc, 0, 0, NULL);
102 SetWindowExtEx(hdc, width, label_offset + text_size.cy, NULL);
103
104 /* draw the icon centered */
105 DrawIcon(hdc, (width-icon_width) / 2, 0, hIcon);
106 if(lpszLabel)
107 /* draw the label centered too, if provided */
108 TextOutW(hdc, (width-text_size.cx) / 2, label_offset, lpszLabel, lstrlenW(lpszLabel));
109
110 if (lpszSourceFile)
111 {
112 char szIconIndex[10];
113 int path_length = WideCharToMultiByte(CP_ACP,0,lpszSourceFile,-1,NULL,0,NULL,NULL);
114 if (path_length > 1)
115 {
116 char * szPath = CoTaskMemAlloc(path_length * sizeof(CHAR));
117 if (szPath)
118 {
122 }
123 }
124 snprintf(szIconIndex, 10, "%u", iIconIndex);
125 ExtEscape(hdc, MFCOMMENT, strlen(szIconIndex)+1, szIconIndex, 0, NULL);
126 }
127
128 mfp.mm = MM_ANISOTROPIC;
129 hdcScreen = GetDC(NULL);
131 mfp.yExt = MulDiv(label_offset + text_size.cy, HIMETRIC_INCHES, GetDeviceCaps(hdcScreen, LOGPIXELSY));
132 ReleaseDC(NULL, hdcScreen);
133 mfp.hMF = CloseMetaFile(hdc);
135 if( !mfp.hMF )
136 return NULL;
137
138 hmem = GlobalAlloc( GMEM_MOVEABLE, sizeof(mfp) );
139 if( !hmem )
140 {
141 DeleteMetaFile(mfp.hMF);
142 return NULL;
143 }
144
145 mfdata = GlobalLock( hmem );
146 if( !mfdata )
147 {
148 GlobalFree( hmem );
149 DeleteMetaFile(mfp.hMF);
150 return NULL;
151 }
152
153 memcpy(mfdata,&mfp,sizeof(mfp));
154 GlobalUnlock( hmem );
155
156 TRACE("returning %p\n",hmem);
157
158 return hmem;
159}
static long path_length
Definition: maze.c:116
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
#define lstrlenW
Definition: compat.h:750
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1592
pKey DeleteObject()
GLint GLint GLsizei width
Definition: gl.h:1546
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
LPCWSTR szPath
Definition: env.c:37
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
HICON hIcon
Definition: msconfig.c:44
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
Definition: mk_font.cpp:20
#define HIMETRIC_INCHES
Definition: ole32_main.c:35
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
HMETAFILE hMF
Definition: wingdi.h:3054
int32_t INT
Definition: typedefs.h:58
BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE)
int WINAPI SetMapMode(_In_ HDC, _In_ int)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
BOOL WINAPI SetWindowOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
Definition: coord.c:532
#define LOGPIXELSY
Definition: wingdi.h:719
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
#define MM_ANISOTROPIC
Definition: wingdi.h:867
HMETAFILE WINAPI CloseMetaFile(_In_ HDC hdc)
BOOL WINAPI SetWindowExtEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPSIZE)
HDC WINAPI CreateMetaFileW(_In_opt_ LPCWSTR)
#define LOGPIXELSX
Definition: wingdi.h:718
BOOL WINAPI TextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(c) LPCWSTR lpString, _In_ int c)
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
int WINAPI ExtEscape(_In_ HDC hdc, _In_ int iEscape, _In_ int cjInput, _In_reads_bytes_opt_(cjInput) LPCSTR lpInData, _In_ int cjOutput, _Out_writes_bytes_opt_(cjOutput) LPSTR lpOutData)
BOOL WINAPI GetTextExtentPoint32W(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE psizl)
#define MFCOMMENT
Definition: wingdi.h:1008
#define snprintf
Definition: wintirpc.h:48
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
BOOL WINAPI DrawIcon(_In_ HDC, _In_ int, _In_ int, _In_ HICON)
Definition: cursoricon.c:2387
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1391
#define SM_CYICON
Definition: winuser.h:984
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define SM_CXICON
Definition: winuser.h:983
int WINAPI GetSystemMetrics(_In_ int)
char CHAR
Definition: xmlstorage.h:175

Referenced by test_data_cache().

◆ OleNoteObjectVisible()

HRESULT WINAPI OleNoteObjectVisible ( LPUNKNOWN  pUnknown,
BOOL  fVisible 
)

Definition at line 2824 of file ole2.c.

2825{
2826 TRACE("(%p, %s)\n", pUnknown, bVisible ? "TRUE" : "FALSE");
2827 return CoLockObjectExternal(pUnknown, bVisible, TRUE);
2828}
HRESULT WINAPI CoLockObjectExternal(IUnknown *object, BOOL lock, BOOL last_unlock_releases)
Definition: combase.c:3237

◆ OleQueryCreateFromData()

HRESULT WINAPI OleQueryCreateFromData ( LPDATAOBJECT  pSrcDataObject)

◆ OleQueryLinkFromData()

HRESULT WINAPI OleQueryLinkFromData ( IDataObject pSrcDataObject)

Definition at line 838 of file ole2.c.

840{
841 FIXME("(%p),stub!\n", pSrcDataObject);
842 return S_FALSE;
843}

◆ OleRegEnumFormatEtc()

HRESULT WINAPI OleRegEnumFormatEtc ( REFCLSID  clsid,
DWORD  dwDirection,
LPENUMFORMATETC ppenumFormatetc 
)

Definition at line 75 of file ole2stubs.c.

79{
80 FIXME("%p, %ld, %p stub!\n", clsid, dwDirection, ppenumFormatetc);
81
82 return E_NOTIMPL;
83}

Referenced by DefaultHandler_EnumFormatEtc().

◆ OleRegEnumVerbs()

HRESULT WINAPI OleRegEnumVerbs ( REFCLSID  clsid,
LPENUMOLEVERB *  ppenum 
)

Definition at line 1107 of file ole2.c.

1108{
1109 LONG res;
1110 HKEY hkeyVerb;
1111 DWORD dwSubKeys;
1112
1113 TRACE("(%s, %p)\n", debugstr_guid(clsid), ppenum);
1114
1115 res = COM_OpenKeyForCLSID(clsid, L"Verb", KEY_READ, &hkeyVerb);
1116 if (FAILED(res))
1117 {
1118 if (res == REGDB_E_CLASSNOTREG)
1119 ERR("CLSID %s not registered\n", debugstr_guid(clsid));
1120 else if (res == REGDB_E_KEYMISSING)
1121 ERR("no Verbs key for class %s\n", debugstr_guid(clsid));
1122 else
1123 ERR("failed to open Verbs key for CLSID %s with error %ld\n",
1125 return res;
1126 }
1127
1128 res = RegQueryInfoKeyW(hkeyVerb, NULL, NULL, NULL, &dwSubKeys, NULL,
1129 NULL, NULL, NULL, NULL, NULL, NULL);
1130 if (res != ERROR_SUCCESS)
1131 {
1132 ERR("failed to get subkey count with error %ld\n", GetLastError());
1133 return REGDB_E_READREGDB;
1134 }
1135
1136 if (!dwSubKeys)
1137 {
1138 WARN("class %s has no verbs\n", debugstr_guid(clsid));
1139 RegCloseKey(hkeyVerb);
1140 return OLEOBJ_E_NOVERBS;
1141 }
1142
1143 return EnumOLEVERB_Construct(hkeyVerb, 0, ppenum);
1144}
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
Definition: reg.c:3662
static HRESULT EnumOLEVERB_Construct(HKEY hkeyVerb, ULONG index, IEnumOLEVERB **ppenum)
Definition: ole2.c:1075
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:3801
#define REGDB_E_READREGDB
Definition: winerror.h:3797
#define OLEOBJ_E_NOVERBS
Definition: winerror.h:3840

Referenced by DefaultHandler_EnumVerbs(), and SEALED_::IOleObject::EnumVerbs().

◆ OleRegGetMiscStatus()

HRESULT WINAPI OleRegGetMiscStatus ( REFCLSID  clsid,
DWORD  dwAspect,
DWORD pdwStatus 
)

Definition at line 848 of file ole2.c.

852{
853 WCHAR keyName[16];
854 HKEY miscStatusKey;
855 HKEY aspectKey;
856 LONG result;
857 HRESULT hr;
858
859 TRACE("%s, %ld, %p.\n", debugstr_guid(clsid), dwAspect, pdwStatus);
860
861 if (!pdwStatus) return E_INVALIDARG;
862
863 *pdwStatus = 0;
864
865 if (actctx_get_miscstatus(clsid, dwAspect, pdwStatus)) return S_OK;
866
867 hr = COM_OpenKeyForCLSID(clsid, L"MiscStatus", KEY_READ, &miscStatusKey);
868 if (FAILED(hr))
869 /* missing key is not a failure */
870 return hr == REGDB_E_KEYMISSING ? S_OK : hr;
871
872 OLEUTL_ReadRegistryDWORDValue(miscStatusKey, pdwStatus);
873
874 /*
875 * Open the key specific to the requested aspect.
876 */
877 swprintf(keyName, ARRAY_SIZE(keyName), L"%d", dwAspect);
878
879 result = open_classes_key(miscStatusKey, keyName, KEY_READ, &aspectKey);
880 if (result == ERROR_SUCCESS)
881 {
882 OLEUTL_ReadRegistryDWORDValue(aspectKey, pdwStatus);
883 RegCloseKey(aspectKey);
884 }
885
886 RegCloseKey(miscStatusKey);
887 return S_OK;
888}
#define ARRAY_SIZE(A)
Definition: main.h:20
static LSTATUS open_classes_key(HKEY hkey, const WCHAR *name, REGSAM access, HKEY *retkey)
Definition: combase.c:297
BOOL actctx_get_miscstatus(const CLSID *clsid, DWORD aspect, DWORD *status)
Definition: compobj.c:160
static void OLEUTL_ReadRegistryDWORDValue(HKEY regKey, DWORD *pdwValue)
Definition: ole2.c:2518
#define swprintf
Definition: precomp.h:40
GLuint64EXT * result
Definition: glext.h:11304

Referenced by DefaultHandler_GetMiscStatus(), SEALED_::IOleObject::GetMiscStatus(), and test_OleRegGetMiscStatus().

◆ OleRegGetUserType()

HRESULT WINAPI OleRegGetUserType ( REFCLSID  clsid,
DWORD  dwFormOfType,
LPOLESTR pszUserType 
)

Definition at line 668 of file ole2.c.

669{
670 DWORD valuetype, valuelen;
671 WCHAR auxkeynameW[16];
672 HKEY usertypekey;
674 LONG ret;
675
676 TRACE("%s, %lu, %p.\n", debugstr_guid(clsid), form, usertype);
677
678 if (!usertype)
679 return E_INVALIDARG;
680
681 *usertype = NULL;
682
683 /* Return immediately if it's not registered. */
684 hres = COM_OpenKeyForCLSID(clsid, NULL, KEY_READ, &usertypekey);
685 if (FAILED(hres))
686 return hres;
687
688 valuelen = 0;
689
690 /* Try additional types if requested. If they don't exist fall back to USERCLASSTYPE_FULL. */
691 if (form != USERCLASSTYPE_FULL)
692 {
693 HKEY auxkey;
694
695 swprintf(auxkeynameW, ARRAY_SIZE(auxkeynameW), L"AuxUserType\\%d", form);
696 if (COM_OpenKeyForCLSID(clsid, auxkeynameW, KEY_READ, &auxkey) == S_OK)
697 {
698 if (!RegQueryValueExW(auxkey, L"", NULL, &valuetype, NULL, &valuelen) && valuelen)
699 {
700 RegCloseKey(usertypekey);
701 usertypekey = auxkey;
702 }
703 else
704 RegCloseKey(auxkey);
705 }
706 }
707
708 valuelen = 0;
709 if (RegQueryValueExW(usertypekey, L"", NULL, &valuetype, NULL, &valuelen))
710 {
711 RegCloseKey(usertypekey);
712 return REGDB_E_READREGDB;
713 }
714
715 *usertype = CoTaskMemAlloc(valuelen);
716 if (!*usertype)
717 {
718 RegCloseKey(usertypekey);
719 return E_OUTOFMEMORY;
720 }
721
722 ret = RegQueryValueExW(usertypekey, L"", NULL, &valuetype, (BYTE *)*usertype, &valuelen);
723 RegCloseKey(usertypekey);
724 if (ret != ERROR_SUCCESS)
725 {
726 CoTaskMemFree(*usertype);
727 *usertype = NULL;
728 return REGDB_E_READREGDB;
729 }
730
731 return S_OK;
732}
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
return ret
Definition: mutex.c:146
int form
Definition: main.c:89
unsigned char BYTE
Definition: xxhash.c:193

Referenced by DefaultHandler_GetUserType(), get_descriptors(), SEALED_::IOleObject::GetUserType(), OleDoAutoConvert(), OleObject_GetUserType(), and test_OleRegGetUserType().

◆ OleRun()

HRESULT WINAPI OleRun ( LPUNKNOWN  pUnknown)

Definition at line 1186 of file ole2.c.

1187{
1188 IRunnableObject *runable;
1189 HRESULT hres;
1190
1191 TRACE("(%p)\n", pUnknown);
1192
1193 hres = IUnknown_QueryInterface(pUnknown, &IID_IRunnableObject, (void**)&runable);
1194 if (FAILED(hres))
1195 return S_OK; /* Appears to return no error. */
1196
1197 hres = IRunnableObject_Run(runable, NULL);
1198 IRunnableObject_Release(runable);
1199 return hres;
1200}

Referenced by OleCreate(), START_TEST(), and test_OleRun().

◆ OleSave()

HRESULT WINAPI OleSave ( LPPERSISTSTORAGE  pPS,
LPSTORAGE  pStg,
BOOL  fSameAsLoad 
)

Definition at line 1319 of file ole2.c.

1323{
1324 HRESULT hres;
1325 CLSID objectClass;
1326
1327 TRACE("(%p,%p,%x)\n", pPS, pStg, fSameAsLoad);
1328
1329 /*
1330 * First, we transfer the class ID (if available)
1331 */
1332 hres = IPersistStorage_GetClassID(pPS, &objectClass);
1333
1334 if (SUCCEEDED(hres))
1335 {
1336 WriteClassStg(pStg, &objectClass);
1337 }
1338
1339 /*
1340 * Then, we ask the object to save itself to the
1341 * storage. If it is successful, we commit the storage.
1342 */
1343 hres = IPersistStorage_Save(pPS, pStg, fSameAsLoad);
1344
1345 if (SUCCEEDED(hres))
1346 {
1347 IStorage_Commit(pStg,
1348 STGC_DEFAULT);
1349 }
1350
1351 return hres;
1352}
HRESULT WINAPI WriteClassStg(IStorage *pStg, REFCLSID rclsid)
Definition: storage32.c:58

◆ OleSaveToStream()

HRESULT WINAPI OleSaveToStream ( IPersistStream pPStm,
IStream pStm 
)

Definition at line 9036 of file storage32.c.

9037{
9038
9039 CLSID clsid;
9040 HRESULT res;
9041
9042 TRACE("(%p,%p)\n",pPStm,pStm);
9043
9044 res=IPersistStream_GetClassID(pPStm,&clsid);
9045
9046 if (SUCCEEDED(res)){
9047
9048 res=WriteClassStm(pStm,&clsid);
9049
9050 if (SUCCEEDED(res))
9051
9052 res=IPersistStream_Save(pPStm,pStm,TRUE);
9053 }
9054
9055 TRACE("Finished Save\n");
9056 return res;
9057}
HRESULT WINAPI WriteClassStm(IStream *pStm, REFCLSID rclsid)
Definition: storage32.c:96

Referenced by composite_save_components(), HlinkClone(), and IPersistStream_fnSave().

◆ OleSetAutoConvert()

HRESULT WINAPI OleSetAutoConvert ( REFCLSID  clsidOld,
REFCLSID  clsidNew 
)

Definition at line 2717 of file ole2.c.

2718{
2719 HKEY hkey = NULL;
2720 WCHAR szClsidNew[CHARS_IN_GUID];
2721 HRESULT res = S_OK;
2722
2723 TRACE("(%s,%s)\n", debugstr_guid(clsidOld), debugstr_guid(clsidNew));
2724
2725 res = COM_OpenKeyForCLSID(clsidOld, NULL, KEY_READ | KEY_WRITE, &hkey);
2726 if (FAILED(res))
2727 goto done;
2728 StringFromGUID2(clsidNew, szClsidNew, CHARS_IN_GUID);
2729 if (RegSetValueW(hkey, L"AutoConvertTo", REG_SZ, szClsidNew, (lstrlenW(szClsidNew)+1) * sizeof(WCHAR)))
2730 {
2732 goto done;
2733 }
2734
2735done:
2736 if (hkey) RegCloseKey(hkey);
2737 return res;
2738}
LONG WINAPI RegSetValueW(HKEY hKeyOriginal, LPCWSTR lpSubKey, DWORD dwType, LPCWSTR lpData, DWORD cbData)
Definition: reg.c:5000
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
#define REG_SZ
Definition: layer.c:22
#define KEY_WRITE
Definition: nt_native.h:1034
#define REGDB_E_WRITEREGDB
Definition: winerror.h:3798

Referenced by test_OleDoAutoConvert().

◆ OleSetClipboard()

HRESULT WINAPI OleSetClipboard ( LPDATAOBJECT  )

◆ OleSetContainedObject()

HRESULT WINAPI OleSetContainedObject ( LPUNKNOWN  pUnknown,
BOOL  fContained 
)

Definition at line 1149 of file ole2.c.

1152{
1154 HRESULT hres;
1155
1156 TRACE("(%p,%x)\n", pUnknown, fContained);
1157
1158 hres = IUnknown_QueryInterface(pUnknown,
1160 (void**)&runnable);
1161
1162 if (SUCCEEDED(hres))
1163 {
1164 hres = IRunnableObject_SetContainedObject(runnable, fContained);
1165
1166 IRunnableObject_Release(runnable);
1167
1168 return hres;
1169 }
1170
1171 return S_OK;
1172}

Referenced by InitWebBrowser().

◆ OleSetMenuDescriptor()

HRESULT WINAPI OleSetMenuDescriptor ( HOLEMENU  hmenuDescriptor,
HWND  hwndFrame,
HWND  hwndActiveObject,
LPOLEINPLACEFRAME  lpFrame,
LPOLEINPLACEACTIVEOBJECT  lpActiveObject 
)

Definition at line 1856 of file ole2.c.

1862{
1863 OleMenuDescriptor *pOleMenuDescriptor = NULL;
1864
1865 /* Check args */
1866 if ( !hwndFrame || (hOleMenu && !hwndActiveObject) )
1867 return E_INVALIDARG;
1868
1869 if ( lpFrame || lpActiveObject )
1870 {
1871 FIXME("(%p, %p, %p, %p, %p), Context sensitive help filtering not implemented!\n",
1872 hOleMenu,
1873 hwndFrame,
1874 hwndActiveObject,
1875 lpFrame,
1876 lpActiveObject);
1877 }
1878
1879 /* Set up a message hook to intercept the containers frame window messages.
1880 * The message filter is responsible for dispatching menu messages from the
1881 * shared menu which are intended for the object.
1882 */
1883
1884 if ( hOleMenu ) /* Want to install dispatching code */
1885 {
1886 /* If OLEMenu hooks are already installed for this thread, fail
1887 * Note: This effectively means that OleSetMenuDescriptor cannot
1888 * be called twice in succession on the same frame window
1889 * without first calling it with a null hOleMenu to uninstall
1890 */
1892 return E_FAIL;
1893
1894 /* Get the menu descriptor */
1895 pOleMenuDescriptor = GlobalLock( hOleMenu );
1896 if ( !pOleMenuDescriptor )
1897 return E_UNEXPECTED;
1898
1899 /* Update the menu descriptor */
1900 pOleMenuDescriptor->hwndFrame = hwndFrame;
1901 pOleMenuDescriptor->hwndActiveObject = hwndActiveObject;
1902
1903 GlobalUnlock( hOleMenu );
1904 pOleMenuDescriptor = NULL;
1905
1906 /* Add a menu descriptor windows property to the frame window */
1907 SetPropW( hwndFrame, prop_olemenuW, hOleMenu );
1908
1909 /* Install thread scope message hooks for WH_GETMESSAGE and WH_CALLWNDPROC */
1911 return E_FAIL;
1912 }
1913 else /* Want to uninstall dispatching code */
1914 {
1915 /* Uninstall the hooks */
1917 return E_FAIL;
1918
1919 /* Remove the menu descriptor property from the frame window */
1920 RemovePropW( hwndFrame, prop_olemenuW );
1921 }
1922
1923 return S_OK;
1924}
static BOOL OLEMenu_InstallHooks(DWORD tid)
Definition: ole2.c:1412
static OleMenuHookItem * OLEMenu_IsHookInstalled(DWORD tid)
Definition: ole2.c:1504
static const WCHAR prop_olemenuW[]
Definition: ole2.c:111
static BOOL OLEMenu_UnInstallHooks(DWORD tid)
Definition: ole2.c:1462
HWND hwndActiveObject
Definition: ole2.c:80
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
#define E_UNEXPECTED
Definition: winerror.h:3528
HANDLE WINAPI RemovePropW(_In_ HWND, _In_ LPCWSTR)
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)

Referenced by test_ole_menu().

◆ OleTranslateAccelerator()

HRESULT WINAPI OleTranslateAccelerator ( LPOLEINPLACEFRAME  lpFrame,
LPOLEINPLACEFRAMEINFO  lpFrameInfo,
struct tagMSG lpmsg 
)

◆ OleUninitialize()

void WINAPI OleUninitialize ( void  )

Definition at line 218 of file ole2.c.

219{
220 TRACE("()\n");
221
222 if (COM_CurrentInfo()->ole_inits == 0)
223 {
224 WARN("ole_inits is already 0\n");
225 return ;
226 }
227 /*
228 * If we hit the bottom of the lock stack, free the libraries.
229 */
231 {
232 /*
233 * Actually free the libraries.
234 */
235 TRACE("() - Freeing the last reference count\n");
236
237 /*
238 * OLE Clipboard
239 */
241
242 /*
243 * OLE shared menu
244 */
246 }
247
248 /*
249 * Then, uninitialize the COM libraries.
250 */
252}
#define InterlockedDecrement
Definition: armddk.h:52
return
Definition: dirsup.c:529
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
static void OLEMenu_UnInitialize(void)
Definition: ole2.c:1401
void clipbrd_uninitialize(void)
Definition: clipboard.c:2009

Referenced by _tWinMain(), adv_install(), BrowserThreadProc(), CDesktopThread::DesktopThreadProc(), display_cpl_sheets(), do_enum(), GetFileName95(), hook_proc(), ImageView_Main(), ME_DestroyEditor(), ReleaseHelpViewer(), CHardErrorThread::s_HardErrorThreadProc(), START_TEST(), StartWithDesktop(), test_CoCreateInstance(), test_CoInitializeEx(), test_consumer_refs(), test_DoDragDrop(), test_flushed_getdata(), test_get_clipboard_locked(), test_getdatahere(), test_multithreaded_clipboard(), test_nonole_clipboard(), test_ole_init_wndproc(), test_ole_initialization(), test_OleCreateFontIndirect(), test_OleInitialize_InitCounting(), test_Register_Revoke(), test_set_clipboard(), test_set_clipboard_DRAWCLIPBOARD(), test_TreatAsClass(), wmain(), and OleInit::~OleInit().

◆ ReadClassStg()

HRESULT WINAPI ReadClassStg ( IStorage pstg,
CLSID pclsid 
)

Definition at line 72 of file storage32.c.

73{
74 STATSTG pstatstg;
75 HRESULT hRes;
76
77 TRACE("(%p, %p)\n", pstg, pclsid);
78
79 if (!pstg || !pclsid)
80 return E_INVALIDARG;
81
82 /*
83 * read a STATSTG structure (contains the clsid) from the storage
84 */
85 hRes = IStorage_Stat(pstg, &pstatstg, STATFLAG_NONAME);
86
87 if (SUCCEEDED(hRes))
88 *pclsid = pstatstg.clsid;
89
90 return hRes;
91}

Referenced by DataCache_InitNew(), DataCache_Load(), GetClassFile(), render_embed_source_hack(), and test_writeclassstg().

◆ ReadClassStm()

HRESULT WINAPI ReadClassStm ( IStream pStm,
CLSID pclsid 
)

Definition at line 109 of file storage32.c.

110{
111 ULONG nbByte;
112 HRESULT res;
113
114 TRACE("(%p,%p)\n", pStm, pclsid);
115
116 if (!pStm || !pclsid)
117 return E_INVALIDARG;
118
119 /* clear the output args */
120 *pclsid = CLSID_NULL;
121
122 res = IStream_Read(pStm, pclsid, sizeof(CLSID), &nbByte);
123
124 if (FAILED(res))
125 return res;
126
127 if (nbByte != sizeof(CLSID))
128 return STG_E_READFAULT;
129 else
130 return S_OK;
131}
uint32_t ULONG
Definition: typedefs.h:59
#define STG_E_READFAULT
Definition: winerror.h:3671

Referenced by OleLoadFromStream(), ReadFmtUserTypeStg(), and test_ReadClassStm().

◆ ReadFmtUserTypeStg()

HRESULT WINAPI ReadFmtUserTypeStg ( LPSTORAGE  pstg,
CLIPFORMAT *  pcf,
LPOLESTR lplpszUserType 
)

Definition at line 9269 of file storage32.c.

9270{
9271 HRESULT r;
9272 IStream *stm = 0;
9273 unsigned char unknown1[12];
9274 unsigned char unknown2[16];
9275 DWORD count;
9276 LPWSTR szProgIDName = NULL, szCLSIDName = NULL, szOleTypeName = NULL;
9277 CLSID clsid;
9278
9279 TRACE("(%p,%p,%p)\n", pstg, pcf, lplpszUserType);
9280
9281 r = IStorage_OpenStream( pstg, L"\1CompObj", NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &stm );
9282 if( FAILED ( r ) )
9283 {
9284 WARN("Failed to open stream r = %#lx\n", r);
9285 return r;
9286 }
9287
9288 /* read the various parts of the structure */
9289 r = IStream_Read( stm, unknown1, sizeof(unknown1), &count );
9290 if( FAILED( r ) || ( count != sizeof(unknown1) ) )
9291 goto end;
9292 r = ReadClassStm( stm, &clsid );
9293 if( FAILED( r ) )
9294 goto end;
9295
9296 r = STREAM_ReadString( stm, &szCLSIDName );
9297 if( FAILED( r ) )
9298 goto end;
9299
9300 r = STREAM_ReadString( stm, &szOleTypeName );
9301 if( FAILED( r ) )
9302 goto end;
9303
9304 r = STREAM_ReadString( stm, &szProgIDName );
9305 if( FAILED( r ) )
9306 goto end;
9307
9308 r = IStream_Read( stm, unknown2, sizeof(unknown2), &count );
9309 if( FAILED( r ) || ( count != sizeof(unknown2) ) )
9310 goto end;
9311
9312 /* ok, success... now we just need to store what we found */
9313 if( pcf )
9314 *pcf = RegisterClipboardFormatW( szOleTypeName );
9315
9316 if( lplpszUserType )
9317 {
9318 *lplpszUserType = szCLSIDName;
9319 szCLSIDName = NULL;
9320 }
9321
9322end:
9323 CoTaskMemFree( szCLSIDName );
9324 CoTaskMemFree( szOleTypeName );
9325 CoTaskMemFree( szProgIDName );
9326 IStream_Release( stm );
9327
9328 return r;
9329}
static HRESULT STREAM_ReadString(IStream *stm, LPWSTR *string)
Definition: storage32.c:9132
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by OleDoAutoConvert().

◆ RegisterDragDrop()

HRESULT WINAPI RegisterDragDrop ( HWND  hwnd,
LPDROPTARGET  pDropTarget 
)

Definition at line 547 of file ole2.c.

548{
549 DWORD pid = 0;
550 HRESULT hr;
552 HANDLE map;
553 IDropTarget *wrapper;
554
555 TRACE("(%p,%p)\n", hwnd, pDropTarget);
556
557 if (!COM_CurrentApt())
558 {
559 ERR("COM not initialized\n");
560 return E_OUTOFMEMORY;
561 }
562
563 if (!pDropTarget)
564 return E_INVALIDARG;
565
566 if (!IsWindow(hwnd))
567 {
568 ERR("invalid hwnd %p\n", hwnd);
570 }
571
572 /* block register for other processes windows */
574 if (pid != GetCurrentProcessId())
575 {
576 FIXME("register for another process windows is disabled\n");
578 }
579
580 /* check if the window is already registered */
581 if (is_droptarget(hwnd))
583
584 /*
585 * Marshal the drop target pointer into a shared memory map and
586 * store the map's handle in a Wine specific window prop. We also
587 * store the drop target pointer itself in the
588 * "OleDropTargetInterface" prop for compatibility with Windows.
589 */
590
592 if(FAILED(hr)) return hr;
593
594 /* IDropTarget::QueryInterface() shouldn't be called, some (broken) apps depend on this. */
595 wrapper = WrapDropTarget( hwnd );
596 if(!wrapper)
597 {
598 IStream_Release(stream);
599 return E_OUTOFMEMORY;
600 }
601 hr = CoMarshalInterface(stream, &IID_IDropTarget, (IUnknown*)wrapper, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG);
602 IDropTarget_Release(wrapper);
603
604 if(SUCCEEDED(hr))
605 {
607 if(SUCCEEDED(hr))
608 {
609 IDropTarget_AddRef(pDropTarget);
610 SetPropW(hwnd, prop_oledroptarget, pDropTarget);
612 }
613 else
614 {
616 zero.QuadPart = 0;
617 IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL);
619 }
620 }
621 IStream_Release(stream);
622
623 return hr;
624}
Definition: _map.h:48
static struct apartment * COM_CurrentApt(void)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
HRESULT WINAPI CoMarshalInterface(IStream *stream, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
Definition: marshal.c:483
HRESULT WINAPI CoReleaseMarshalData(IStream *stream)
Definition: marshal.c:673
static IDropTarget * WrapDropTarget(HWND hwnd)
Definition: ole2.c:508
static const WCHAR prop_oledroptarget[]
Definition: ole2.c:114
static HRESULT create_map_from_stream(IStream *stream, HANDLE *map)
Definition: ole2.c:327
static const WCHAR prop_marshalleddroptarget[]
Definition: ole2.c:117
static BOOL is_droptarget(HWND hwnd)
Definition: ole2.c:280
int zero
Definition: sehframes.cpp:29
Definition: parse.h:23
DWORD WINAPI GetCurrentProcessId(void)
Definition: proc.c:1156
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
Definition: winddi.h:3837
#define DRAGDROP_E_ALREADYREGISTERED
Definition: winerror.h:3762
#define DRAGDROP_E_INVALIDHWND
Definition: winerror.h:3764
BOOL WINAPI IsWindow(_In_opt_ HWND)

Referenced by DesktopShellView::InitDragDrop(), ShellBrowser::InitDragDrop(), CDefView::OnCreate(), SHRegisterDragDrop(), test_DoDragDrop(), and test_Register_Revoke().

◆ ReleaseStgMedium()

VOID WINAPI ReleaseStgMedium ( LPSTGMEDIUM  )

◆ RevokeDragDrop()

HRESULT WINAPI RevokeDragDrop ( HWND  hwnd)

Definition at line 629 of file ole2.c.

630{
631 HANDLE map;
633 IDropTarget *drop_target;
634 HRESULT hr;
635
636 TRACE("(%p)\n", hwnd);
637
638 if (!IsWindow(hwnd))
639 {
640 ERR("invalid hwnd %p\n", hwnd);
642 }
643
644 /* no registration data */
647
648 drop_target = GetPropW(hwnd, prop_oledroptarget);
649 if(drop_target) IDropTarget_Release(drop_target);
650
653
655 if(SUCCEEDED(hr))
656 {
658 IStream_Release(stream);
659 }
661
662 return hr;
663}
#define CloseHandle
Definition: compat.h:739
static HANDLE get_droptarget_handle(HWND hwnd)
Definition: ole2.c:270
static HRESULT create_stream_from_map(HANDLE map, IStream **stream)
Definition: ole2.c:353
#define DRAGDROP_E_NOTREGISTERED
Definition: winerror.h:3760
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)

Referenced by CDefView::OnDestroy(), SHRevokeDragDrop(), test_Register_Revoke(), and DesktopShellView::~DesktopShellView().

◆ SetConvertStg()

HRESULT WINAPI SetConvertStg ( LPSTORAGE  pStg,
BOOL  fConvert 
)

◆ WriteClassStg()

HRESULT WINAPI WriteClassStg ( IStorage pstg,
REFCLSID  rclsid 
)

Definition at line 58 of file storage32.c.

59{
60 if (!pStg)
61 return E_INVALIDARG;
62
63 if (!rclsid)
65
66 return IStorage_SetClass(pStg, rclsid);
67}
#define STG_E_INVALIDPOINTER
Definition: winerror.h:3666

Referenced by OleCreateStaticFromData(), OleSave(), test_hglobal_storage_stat(), test_overwrite(), test_storage_refcount(), test_streamenum(), test_transacted_shared(), and test_writeclassstg().

◆ WriteClassStm()

HRESULT WINAPI WriteClassStm ( IStream pStm,
REFCLSID  rclsid 
)

Definition at line 96 of file storage32.c.

97{
98 TRACE("(%p,%p)\n", pStm, rclsid);
99
100 if (!pStm || !rclsid)
101 return E_INVALIDARG;
102
103 return IStream_Write(pStm, rclsid, sizeof(CLSID), NULL);
104}

Referenced by OLECONVERT_CreateCompObjStream(), OleSaveToStream(), STORAGE_WriteCompObj(), and test_ReadClassStm().

◆ WriteFmtUserTypeStg()

HRESULT WINAPI WriteFmtUserTypeStg ( LPSTORAGE  pstg,
CLIPFORMAT  cf,
LPOLESTR  lpszUserType 
)

Definition at line 9226 of file storage32.c.

9228{
9229 STATSTG stat;
9230 HRESULT r;
9231 WCHAR szwClipName[0x40];
9232 CLSID clsid;
9233 LPWSTR wstrProgID = NULL;
9234 DWORD n;
9235
9236 TRACE("(%p,%x,%s)\n",pstg,cf,debugstr_w(lpszUserType));
9237
9238 /* get the clipboard format name */
9239 if( cf )
9240 {
9241 n = GetClipboardFormatNameW(cf, szwClipName, ARRAY_SIZE(szwClipName));
9242 szwClipName[n]=0;
9243 }
9244
9245 TRACE("Clipboard name is %s\n", debugstr_w(szwClipName));
9246
9247 r = IStorage_Stat(pstg, &stat, STATFLAG_NONAME);
9248 if(SUCCEEDED(r))
9249 clsid = stat.clsid;
9250 else
9251 clsid = CLSID_NULL;
9252
9253 ProgIDFromCLSID(&clsid, &wstrProgID);
9254
9255 TRACE("progid is %s\n",debugstr_w(wstrProgID));
9256
9257 r = STORAGE_WriteCompObj( pstg, &clsid, lpszUserType,
9258 cf ? szwClipName : NULL, wstrProgID );
9259
9260 CoTaskMemFree(wstrProgID);
9261
9262 return r;
9263}
HRESULT WINAPI DECLSPEC_HOTPATCH ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *progid)
Definition: combase.c:1262
static HRESULT STORAGE_WriteCompObj(LPSTORAGE pstg, CLSID *clsid, LPCWSTR lpszUserType, LPCWSTR szClipName, LPCWSTR szProgIDName)
Definition: storage32.c:9180
GLdouble n
Definition: glext.h:7729
int WINAPI GetClipboardFormatNameW(_In_ UINT format, _Out_writes_(cchMaxCount) LPWSTR lpszFormatName, _In_ int cchMaxCount)

Referenced by OleCreateStaticFromData(), OleDoAutoConvert(), test_fmtusertypestg(), and test_OleDoAutoConvert().