void *wrap_ExAllocatePoolWithTag(enum pool_type pool_type, SIZE_T size, ULONG tag, const char *file, int line) { void *addr; no_warn_unused struct alloc_info *info; TRACEENTER4("pool_type: %d, size: %lu, tag: %u", pool_type, size, tag); if (size <= KMALLOC_THRESHOLD) { if (current_irql() < DISPATCH_LEVEL) addr = wrap_kmalloc(size, GFP_KERNEL, file, line); else addr = wrap_kmalloc(size, GFP_ATOMIC, file, line); } else { if (current_irql() < DISPATCH_LEVEL) addr = wrap_vmalloc(size, file, line); else addr = wrap__vmalloc(size, GFP_ATOMIC | __GFP_HIGHMEM, PAGE_KERNEL, file, line); } #if ALLOC_DEBUG > 2 info = addr - sizeof(*info); info->tag = tag; #endif TRACEEXIT4(return addr); }
void *wrap_kzalloc(size_t size, gfp_t flags, const char *file, int line) { void *ptr = wrap_kmalloc(size, flags, file, line); if (ptr) memset(ptr, 0, size); return ptr; }
STDCALL void KeInitializeSpinLock(KSPIN_LOCK *lock) { spinlock_t *spin_lock; DBGTRACE("%s: lock = %p, *lock = %p\n", __FUNCTION__, lock, *lock); if (!lock) printk(KERN_ERR "%s: lock %p is not valid pointer?\n", __FUNCTION__, lock); spin_lock = wrap_kmalloc(sizeof(spinlock_t), GFP_KERNEL); if (!spin_lock) printk(KERN_ERR "%s: couldn't allocate space for spinlock\n", __FUNCTION__); else { DBGTRACE("%s: allocated spinlock %p\n", __FUNCTION__, spin_lock); spin_lock_init(spin_lock); *lock = (KSPIN_LOCK)spin_lock; } }