qxl-wddm-dod/qxldod/BaseObject.cpp

94 lines
1.9 KiB
C++
Raw Normal View History

/*
* Copyright 2013-2016 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*/
2013-12-09 11:55:42 +01:00
#include "BaseObject.h"
#pragma code_seg("PAGE")
#define QXLTAG 'LXQd'
//
// 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)
{
PAGED_CODE();
Size = (Size != 0) ? Size : 1;
void* pObject = ExAllocatePoolWithTag(PoolType, Size, QXLTAG);
if (pObject != NULL)
{
2015-03-24 06:41:58 +01:00
#if DBG
2013-12-09 11:55:42 +01:00
RtlFillMemory(pObject, Size, 0xCD);
2015-03-24 06:41:58 +01:00
#else
RtlZeroMemory(pObject, Size);
2013-12-09 11:55:42 +01:00
#endif // DBG
2015-03-24 06:41:58 +01:00
}
2013-12-09 11:55:42 +01:00
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)
{
PAGED_CODE();
Size = (Size != 0) ? Size : 1;
void* pObject = ExAllocatePoolWithTag(PoolType, Size, QXLTAG);
if (pObject != NULL)
{
2015-03-24 06:41:58 +01:00
#if DBG
2013-12-09 11:55:42 +01:00
RtlFillMemory(pObject, Size, 0xCD);
2015-03-24 06:41:58 +01:00
#else
RtlZeroMemory(pObject, Size);
2013-12-09 11:55:42 +01:00
#endif // DBG
2015-03-24 06:41:58 +01:00
}
2013-12-09 11:55:42 +01:00
return pObject;
}
void __cdecl operator delete(void* pObject)
{
PAGED_CODE();
if (pObject != NULL)
{
ExFreePool(pObject);
}
}
void __cdecl operator delete[](void* pObject)
{
PAGED_CODE();
if (pObject != NULL)
{
ExFreePool(pObject);
}
}
void __cdecl operator delete(void *pObject, size_t s)
{
PAGED_CODE();
UNREFERENCED_PARAMETER(s);
if (pObject != NULL) {
ExFreePool(pObject);
}
}