summaryrefslogtreecommitdiff
path: root/video/KMDOD/memory.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'video/KMDOD/memory.cxx')
-rw-r--r--video/KMDOD/memory.cxx34
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();