ole32: Don't allocate the ole clipboard object in global memory - we're not going to directly expose it to other processes.

This commit is contained in:
Huw Davies 2009-03-17 12:20:55 +00:00 committed by Alexandre Julliard
parent e6eeb3aa17
commit e7ffa2aeb5
1 changed files with 16 additions and 61 deletions

View File

@ -107,16 +107,6 @@ struct OLEClipbrd
*/ */
IDataObject* pIDataObjectSrc; IDataObject* pIDataObjectSrc;
/*
* The registered DataObject clipboard format
*/
UINT cfDataObj;
/*
* The handle to ourself
*/
HGLOBAL hSelf;
/* /*
* Reference count of this object * Reference count of this object
*/ */
@ -647,68 +637,33 @@ void OLEClipbrd_UnInitialize(void)
*/ */
static OLEClipbrd* OLEClipbrd_Construct(void) static OLEClipbrd* OLEClipbrd_Construct(void)
{ {
OLEClipbrd* newObject = NULL; OLEClipbrd* This;
HGLOBAL hNewObject = 0;
/* This = HeapAlloc( GetProcessHeap(), 0, sizeof(*This) );
* Allocate space for the object. We use GlobalAlloc since we need if (!This) return NULL;
* 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;
/* This->lpvtbl1 = &OLEClipbrd_IDataObject_VTable;
* Lock the handle for the entire lifetime of the clipboard. This->ref = 1;
*/
newObject = GlobalLock(hNewObject);
/* This->hWndClipboard = NULL;
* Initialize the virtual function table. This->pIDataObjectSrc = NULL;
*/
newObject->lpvtbl1 = &OLEClipbrd_IDataObject_VTable;
/* theOleClipboard = This;
* Start with one reference count. The caller of this function return This;
* must release the interface pointer when it is done.
*/
newObject->ref = 1;
newObject->hSelf = hNewObject;
/*
* The Ole clipboard is a singleton - save the global handle and pointer
*/
theOleClipboard = newObject;
return theOleClipboard;
} }
static void OLEClipbrd_Destroy(OLEClipbrd* ptrToDestroy) static void OLEClipbrd_Destroy(OLEClipbrd* This)
{ {
TRACE("()\n"); TRACE("()\n");
if ( !ptrToDestroy ) if (!This) return;
return;
/* theOleClipboard = NULL;
* Destroy the Ole clipboard window
*/
if ( ptrToDestroy->hWndClipboard )
OLEClipbrd_DestroyWindow(ptrToDestroy->hWndClipboard);
/* if ( This->hWndClipboard )
* Free the actual OLE Clipboard structure. OLEClipbrd_DestroyWindow(This->hWndClipboard);
*/
TRACE("() - Destroying clipboard data object.\n");
GlobalUnlock(ptrToDestroy->hSelf);
GlobalFree(ptrToDestroy->hSelf);
/* HeapFree(GetProcessHeap(), 0, This);
* The Ole clipboard is a singleton (ptrToDestroy == theOleClipboard)
*/
theOleClipboard = NULL;
} }