mirror of
https://github.com/reactos/reactos.git
synced 2025-05-06 10:28:45 +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;
|
||||
}
|
||||
|
||||
_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(
|
||||
_In_ PVOID Object)
|
||||
{
|
||||
UserHeapFree(Object);
|
||||
}
|
||||
|
||||
static void FreeSysObjectCB(
|
||||
_In_ PVOID Object)
|
||||
{
|
||||
ExFreePoolWithTag(Object, USERTAG_CLIPBOARD);
|
||||
}
|
||||
|
||||
static const struct
|
||||
{
|
||||
PVOID (*ObjectAlloc)(PDESKTOP, PTHREADINFO, SIZE_T, PVOID*);
|
||||
|
@ -226,7 +259,7 @@ static const struct
|
|||
{ AllocProcMarkObject, IntDestroyCurIconObject, FreeCurIconObject }, /* TYPE_CURSOR */
|
||||
{ AllocSysObject, /*UserSetWindowPosCleanup*/NULL, FreeSysObject }, /* TYPE_SETWINDOWPOS */
|
||||
{ AllocDeskThreadObject, IntRemoveHook, FreeDeskThreadObject }, /* TYPE_HOOK */
|
||||
{ AllocSysObject, /*UserClipDataCleanup*/NULL,FreeSysObject }, /* TYPE_CLIPDATA */
|
||||
{ AllocSysObjectCB, /*UserClipDataCleanup*/NULL,FreeSysObjectCB }, /* TYPE_CLIPDATA */
|
||||
{ AllocDeskProcObject, DestroyCallProc, FreeDeskProcObject }, /* TYPE_CALLPROC */
|
||||
{ AllocProcMarkObject, UserDestroyAccelTable, FreeProcMarkObject }, /* TYPE_ACCELTABLE */
|
||||
{ NULL, NULL, NULL }, /* TYPE_DDEACCESS */
|
||||
|
|
Loading…
Reference in a new issue