diff options
Diffstat (limited to 'video/KMDOD/memory.cxx')
| -rw-r--r-- | video/KMDOD/memory.cxx | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/video/KMDOD/memory.cxx b/video/KMDOD/memory.cxx index 5b68c297..54f6a6dc 100644 --- a/video/KMDOD/memory.cxx +++ b/video/KMDOD/memory.cxx @@ -14,19 +14,17 @@ // // New and delete operators // -_When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) -void* __cdecl operator new(size_t Size, POOL_TYPE PoolType) +void* __cdecl operator new(size_t Size, BDD_POOL_TYPE PoolType) { PAGED_CODE(); Size = (Size != 0) ? Size : 1; + POOL_FLAGS Flags = PoolType == BDD_POOL_TYPE::NonPaged ? POOL_FLAG_NON_PAGED : POOL_FLAG_PAGED; // Note that ExAllocatePool2 replaces ExAllocatePool* APIs in OS's starting // with Windows 10, version 2004. If your driver targets previous versions it // should use ExAllocatePoolZero instead. - void* pObject = ExAllocatePool2(PoolType, Size, BDDTAG); + void* pObject = ExAllocatePool2(Flags, Size, BDDTAG); #if DBG if (pObject != NULL) @@ -38,16 +36,14 @@ void* __cdecl operator new(size_t Size, POOL_TYPE PoolType) return pObject; } -_When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) -void* __cdecl operator new[](size_t Size, POOL_TYPE PoolType) +void* __cdecl operator new[](size_t Size, BDD_POOL_TYPE PoolType) { PAGED_CODE(); Size = (Size != 0) ? Size : 1; + POOL_FLAGS Flags = PoolType == BDD_POOL_TYPE::NonPaged ? POOL_FLAG_NON_PAGED : POOL_FLAG_PAGED; - void* pObject = ExAllocatePool2(PoolType, Size, BDDTAG); + void* pObject = ExAllocatePool2(Flags, Size, BDDTAG); #if DBG if (pObject != NULL) @@ -59,6 +55,24 @@ void* __cdecl operator new[](size_t Size, POOL_TYPE PoolType) return pObject; } +void __cdecl operator delete(void* pObject, BDD_POOL_TYPE PoolType) +{ + PAGED_CODE(); + + UNREFERENCED_PARAMETER(PoolType); + + ::operator delete(pObject); +} + +void __cdecl operator delete[](void* pObject, BDD_POOL_TYPE PoolType) +{ + PAGED_CODE(); + + UNREFERENCED_PARAMETER(PoolType); + + ::operator delete[](pObject); +} + void __cdecl operator delete(void* pObject) { PAGED_CODE(); |
