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:
parent
e6eeb3aa17
commit
e7ffa2aeb5
|
@ -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;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Destroy the Ole clipboard window
|
|
||||||
*/
|
|
||||||
if ( ptrToDestroy->hWndClipboard )
|
|
||||||
OLEClipbrd_DestroyWindow(ptrToDestroy->hWndClipboard);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Free the actual OLE Clipboard structure.
|
|
||||||
*/
|
|
||||||
TRACE("() - Destroying clipboard data object.\n");
|
|
||||||
GlobalUnlock(ptrToDestroy->hSelf);
|
|
||||||
GlobalFree(ptrToDestroy->hSelf);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The Ole clipboard is a singleton (ptrToDestroy == theOleClipboard)
|
|
||||||
*/
|
|
||||||
theOleClipboard = NULL;
|
theOleClipboard = NULL;
|
||||||
|
|
||||||
|
if ( This->hWndClipboard )
|
||||||
|
OLEClipbrd_DestroyWindow(This->hWndClipboard);
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue