mirror of
https://github.com/reactos/reactos.git
synced 2025-05-06 18:31:26 +00:00
[WIN32SS] Fix CF_DIB format not being saved to clipboard on Print Screen key (#3265)
Use pool to allocate (potentially huge) clipboard data buffers. CORE-17318
This commit is contained in:
parent
cc0e2a3672
commit
de6c514c3e
1 changed files with 34 additions and 1 deletions
|
@ -207,12 +207,45 @@ static PVOID AllocSysObject(
|
||||||
return Object;
|
return Object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_Success_(return!=NULL)
|
||||||
|
static PVOID AllocSysObjectCB(
|
||||||
|
_In_ PDESKTOP pDesk,
|
||||||
|
_In_ PTHREADINFO pti,
|
||||||
|
_In_ SIZE_T Size,
|
||||||
|
_Out_ PVOID* ObjectOwner)
|
||||||
|
{
|
||||||
|
PVOID Object;
|
||||||
|
|
||||||
|
UNREFERENCED_PARAMETER(pDesk);
|
||||||
|
UNREFERENCED_PARAMETER(pti);
|
||||||
|
ASSERT(Size > sizeof(HEAD));
|
||||||
|
|
||||||
|
/* Allocate the clipboard data */
|
||||||
|
// FIXME: This allocation should be done on the current session pool;
|
||||||
|
// however ReactOS' MM doesn't support session pool yet.
|
||||||
|
Object = ExAllocatePoolZero(/* SESSION_POOL_MASK | */ PagedPool, Size, USERTAG_CLIPBOARD);
|
||||||
|
if (!Object)
|
||||||
|
{
|
||||||
|
ERR("ExAllocatePoolZero failed. No object created.\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ObjectOwner = NULL;
|
||||||
|
return Object;
|
||||||
|
}
|
||||||
|
|
||||||
static void FreeSysObject(
|
static void FreeSysObject(
|
||||||
_In_ PVOID Object)
|
_In_ PVOID Object)
|
||||||
{
|
{
|
||||||
UserHeapFree(Object);
|
UserHeapFree(Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void FreeSysObjectCB(
|
||||||
|
_In_ PVOID Object)
|
||||||
|
{
|
||||||
|
ExFreePoolWithTag(Object, USERTAG_CLIPBOARD);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct
|
static const struct
|
||||||
{
|
{
|
||||||
PVOID (*ObjectAlloc)(PDESKTOP, PTHREADINFO, SIZE_T, PVOID*);
|
PVOID (*ObjectAlloc)(PDESKTOP, PTHREADINFO, SIZE_T, PVOID*);
|
||||||
|
@ -226,7 +259,7 @@ static const struct
|
||||||
{ AllocProcMarkObject, IntDestroyCurIconObject, FreeCurIconObject }, /* TYPE_CURSOR */
|
{ AllocProcMarkObject, IntDestroyCurIconObject, FreeCurIconObject }, /* TYPE_CURSOR */
|
||||||
{ AllocSysObject, /*UserSetWindowPosCleanup*/NULL, FreeSysObject }, /* TYPE_SETWINDOWPOS */
|
{ AllocSysObject, /*UserSetWindowPosCleanup*/NULL, FreeSysObject }, /* TYPE_SETWINDOWPOS */
|
||||||
{ AllocDeskThreadObject, IntRemoveHook, FreeDeskThreadObject }, /* TYPE_HOOK */
|
{ AllocDeskThreadObject, IntRemoveHook, FreeDeskThreadObject }, /* TYPE_HOOK */
|
||||||
{ AllocSysObject, /*UserClipDataCleanup*/NULL,FreeSysObject }, /* TYPE_CLIPDATA */
|
{ AllocSysObjectCB, /*UserClipDataCleanup*/NULL,FreeSysObjectCB }, /* TYPE_CLIPDATA */
|
||||||
{ AllocDeskProcObject, DestroyCallProc, FreeDeskProcObject }, /* TYPE_CALLPROC */
|
{ AllocDeskProcObject, DestroyCallProc, FreeDeskProcObject }, /* TYPE_CALLPROC */
|
||||||
{ AllocProcMarkObject, UserDestroyAccelTable, FreeProcMarkObject }, /* TYPE_ACCELTABLE */
|
{ AllocProcMarkObject, UserDestroyAccelTable, FreeProcMarkObject }, /* TYPE_ACCELTABLE */
|
||||||
{ NULL, NULL, NULL }, /* TYPE_DDEACCESS */
|
{ NULL, NULL, NULL }, /* TYPE_DDEACCESS */
|
||||||
|
|
Loading…
Reference in a new issue