Huw Davies : ole32: Don' t allocate the ole clipboard object in global memory - we' re not going to directly expose it to other processes.
Module: wine Branch: master Commit: e7ffa2aeb5f633536cf4881ebbadc3da6461af98 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e7ffa2aeb5f633536cf4881ebb... Author: Huw Davies <huw(a)codeweavers.com> Date: Tue Mar 17 12:20:55 2009 +0000 ole32: Don't allocate the ole clipboard object in global memory - we're not going to directly expose it to other processes. --- dlls/ole32/clipboard.c | 77 ++++++++++-------------------------------------- 1 files changed, 16 insertions(+), 61 deletions(-) diff --git a/dlls/ole32/clipboard.c b/dlls/ole32/clipboard.c index 5bdd80a..a1fed82 100644 --- a/dlls/ole32/clipboard.c +++ b/dlls/ole32/clipboard.c @@ -108,16 +108,6 @@ struct OLEClipbrd IDataObject* pIDataObjectSrc; /* - * The registered DataObject clipboard format - */ - UINT cfDataObj; - - /* - * The handle to ourself - */ - HGLOBAL hSelf; - - /* * Reference count of this object */ LONG ref; @@ -647,68 +637,33 @@ void OLEClipbrd_UnInitialize(void) */ static OLEClipbrd* OLEClipbrd_Construct(void) { - OLEClipbrd* newObject = NULL; - HGLOBAL hNewObject = 0; - - /* - * Allocate space for the object. We use GlobalAlloc since we need - * an HGLOBAL to expose our DataObject as a registered clipboard type. - */ - hNewObject = GlobalAlloc( GMEM_DDESHARE|GMEM_MOVEABLE|GMEM_ZEROINIT, - sizeof(OLEClipbrd)); - if (hNewObject==0) - return NULL; - - /* - * Lock the handle for the entire lifetime of the clipboard. - */ - newObject = GlobalLock(hNewObject); - - /* - * Initialize the virtual function table. - */ - newObject->lpvtbl1 = &OLEClipbrd_IDataObject_VTable; + OLEClipbrd* This; - /* - * Start with one reference count. The caller of this function - * must release the interface pointer when it is done. - */ - newObject->ref = 1; + This = HeapAlloc( GetProcessHeap(), 0, sizeof(*This) ); + if (!This) return NULL; - newObject->hSelf = hNewObject; + This->lpvtbl1 = &OLEClipbrd_IDataObject_VTable; + This->ref = 1; - /* - * The Ole clipboard is a singleton - save the global handle and pointer - */ - theOleClipboard = newObject; + This->hWndClipboard = NULL; + This->pIDataObjectSrc = NULL; - return theOleClipboard; + theOleClipboard = This; + return This; } -static void OLEClipbrd_Destroy(OLEClipbrd* ptrToDestroy) +static void OLEClipbrd_Destroy(OLEClipbrd* This) { - TRACE("()\n"); + TRACE("()\n"); - if ( !ptrToDestroy ) - return; + if (!This) return; - /* - * Destroy the Ole clipboard window - */ - if ( ptrToDestroy->hWndClipboard ) - OLEClipbrd_DestroyWindow(ptrToDestroy->hWndClipboard); + theOleClipboard = NULL; - /* - * Free the actual OLE Clipboard structure. - */ - TRACE("() - Destroying clipboard data object.\n"); - GlobalUnlock(ptrToDestroy->hSelf); - GlobalFree(ptrToDestroy->hSelf); + if ( This->hWndClipboard ) + OLEClipbrd_DestroyWindow(This->hWndClipboard); - /* - * The Ole clipboard is a singleton (ptrToDestroy == theOleClipboard) - */ - theOleClipboard = NULL; + HeapFree(GetProcessHeap(), 0, This); }
participants (1)
-
Alexandre Julliard