/*
* 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 $
*
*/
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,
handleTable->wTableSize = Size;
ExReleaseFastMutexUnsafe (&HandleTableMutex);
+ if(IrqlRaised)
+ KeLowerIrql(OldIrql);
+
return handleTable;
}
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++)
}
ExReleaseFastMutexUnsafe (&HandleTableMutex);
+ if(IrqlRaised)
+ KeLowerIrql(OldIrql);
+
return (tableIndex < HandleTable->wTableSize) ? tableIndex : 0;
}