// Finally, AND with the bucket mask to generate a valid index/bucket into
// the table
//
- ULONGLONG Result = 40543 * Tag;
+ ULONGLONG Result = (ULONGLONG)40543 * Tag;
return (ULONG)BucketMask & ((ULONG)Result ^ (Result >> 32));
}
//
// Free the "Generic DPC" temporary buffer, return the buffer length and status
//
- ExFreePool(Buffer);
+ ExFreePoolWithTag(Buffer, 'ofnI');
if (ReturnLength) *ReturnLength = CurrentLength;
return Status;
}
//
i = (USHORT)((NumberOfBytes + sizeof(POOL_HEADER) + (POOL_BLOCK_SIZE - 1))
/ POOL_BLOCK_SIZE);
+ ASSERT(i < POOL_LISTS_PER_PAGE);
//
// Handle lookaside list optimization for both paged and nonpaged pool
// Try again!
//
ExUnlockPool(PoolDesc, OldIrql);
- ListHead++;
continue;
}
BlockSize * POOL_BLOCK_SIZE,
Entry->PoolType - 1);
+ //
+ // Check block tag
+ //
+ if (TagToFree && TagToFree != Tag)
+ {
+ DPRINT1("Freeing pool - invalid tag specified: %.4s != %.4s\n", (char*)&TagToFree, (char*)&Tag);
+ KeBugCheckEx(BAD_POOL_CALLER, 0x0A, (ULONG_PTR)P, Tag, TagToFree);
+ }
+
//
// Is this allocation small enough to have come from a lookaside list?
//
//
OldIrql = ExLockPool(PoolDesc);
- //
- // Check block tag
- //
- if (TagToFree && TagToFree != Entry->PoolTag)
- {
- DPRINT1("Freeing pool - invalid tag specified: %.4s != %.4s\n", (char*)&TagToFree, (char*)&Entry->PoolTag);
- KeBugCheckEx(BAD_POOL_CALLER, 0x0A, (ULONG_PTR)P, Entry->PoolTag, TagToFree);
- }
-
//
// Check if the next allocation is at the end of the page
//