X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fsubsys%2Fwin32k%2Fobjects%2Fgdiobj.c;h=f6c80d37b08b3bf1e926e1a1952f8ea3cb1f0cf3;hp=a464fede37951b723013d73c005b2b4ab71b0454;hb=1472d11a1f0547ebfa7f93307e23d98e8c1ee115;hpb=e570a920e4ea8598a791baa414d92807133670ba diff --git a/reactos/subsys/win32k/objects/gdiobj.c b/reactos/subsys/win32k/objects/gdiobj.c index a464fede379..f6c80d37b08 100644 --- a/reactos/subsys/win32k/objects/gdiobj.c +++ b/reactos/subsys/win32k/objects/gdiobj.c @@ -19,7 +19,7 @@ /* * GDIOBJ.C - GDI object manipulation routines * - * $Id: gdiobj.c,v 1.45 2003/10/04 21:09:29 gvg Exp $ + * $Id: gdiobj.c,v 1.46 2003/10/15 03:09:23 vizzini Exp $ * */ @@ -154,6 +154,14 @@ static PGDI_HANDLE_TABLE FASTCALL GDIOBJ_iAllocHandleTable (WORD Size) { PGDI_HANDLE_TABLE handleTable; + KIRQL OldIrql; + BOOLEAN IrqlRaised = FALSE; + + if(KeGetCurrentIrql() < APC_LEVEL) + { + KeRaiseIrql(APC_LEVEL, &OldIrql); + IrqlRaised = TRUE; + } ExAcquireFastMutexUnsafe (&HandleTableMutex); handleTable = ExAllocatePool(PagedPool, @@ -166,6 +174,9 @@ GDIOBJ_iAllocHandleTable (WORD Size) handleTable->wTableSize = Size; ExReleaseFastMutexUnsafe (&HandleTableMutex); + if(IrqlRaised) + KeLowerIrql(OldIrql); + return handleTable; } @@ -192,6 +203,14 @@ static WORD FASTCALL GDIOBJ_iGetNextOpenHandleIndex (void) { WORD tableIndex; + BOOLEAN IrqlRaised = FALSE; + KIRQL OldIrql; + + if(KeGetCurrentIrql() < APC_LEVEL) + { + KeRaiseIrql(APC_LEVEL, &OldIrql); + IrqlRaised = TRUE; + } ExAcquireFastMutexUnsafe (&HandleTableMutex); for (tableIndex = 1; tableIndex < HandleTable->wTableSize; tableIndex++) @@ -204,6 +223,9 @@ GDIOBJ_iGetNextOpenHandleIndex (void) } ExReleaseFastMutexUnsafe (&HandleTableMutex); + if(IrqlRaised) + KeLowerIrql(OldIrql); + return (tableIndex < HandleTable->wTableSize) ? tableIndex : 0; }