Fix for MSVC warning "C2323: 'operator new': non-member operator new or delete functions may not be declared static or in a namespace other than the global namespace."
See https://docs.microsoft.com/en-us/cpp/porting/visual-cpp-what-s-new-2003-through-2015?view=vs-2019 section "Overloaded operator new and operator delete"
endif()
# Other
+ add_definitions(-D_NEW_DELETE_OPERATORS_)
if(ARCH STREQUAL "i386")
add_definitions(-DUSE_COMPILER_EXCEPTIONS -D_USE_32BIT_TIME_T)
elseif(ARCH STREQUAL "amd64")
class CDmaChannelInit : public IDmaChannelInit
{
public:
+ inline
+ PVOID
+ operator new(
+ size_t Size,
+ POOL_TYPE PoolType,
+ ULONG Tag)
+ {
+ return ExAllocatePoolWithTag(PoolType, Size, Tag);
+ }
+
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef()
#include <debug.h>
+PVOID
+__cdecl
+operator new(
+ size_t Size,
+ POOL_TYPE PoolType,
+ ULONG Tag)
+{
+ return ExAllocatePoolWithTag(PoolType, Size, Tag);
+}
+
+void
+__cdecl
+operator delete(
+ PVOID ptr)
+{
+ ExFreePool(ptr);
+}
+
+void
+__cdecl
+operator delete(
+ PVOID ptr, UINT_PTR)
+{
+ ExFreePool(ptr);
+}
+
NTSTATUS
NTAPI
PcNewMiniport(
)
{
CMiniportDMusUARTStream *pStream =
- new(PoolType) CMiniportDMusUARTStream();
+ new(PoolType, 'wNcP') CMiniportDMusUARTStream();
if (pStream)
{
public IServiceSink
{
public:
+ inline
+ PVOID
+ operator new(
+ size_t Size,
+ POOL_TYPE PoolType,
+ ULONG Tag)
+ {
+ return ExAllocatePoolWithTag(PoolType, Size, Tag);
+ }
+
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef()
#define PC_ASSERT_IRQL(x) PC_ASSERT(KeGetCurrentIrql() <= (x))
#define PC_ASSERT_IRQL_EQUAL(x) PC_ASSERT(KeGetCurrentIrql()==(x))
+PVOID
+__cdecl
+operator new(
+ size_t Size,
+ POOL_TYPE PoolType,
+ ULONG Tag);
+
extern
"C"
NTSTATUS
#include "debug.hpp"
+PVOID
+__cdecl
+operator new(
+ size_t size,
+ POOL_TYPE pool_type,
+ ULONG tag);
+
#endif /* _CMIDRIVER_PCH_ */
ExFreePool(ptr);
}
-#endif /* ALLOCATION_OPERATORS_DEFINED */
+#endif /* _NEW_DELETE_OPERATORS_ */
#else /* Being compiled with C */
// the following includes are required to get kcom to compile
//
#include <portcls.h>
-#define _NEW_DELETE_OPERATORS_
#include <kcom.h>
PVOID
#include <stdunk.h>
+inline
+PVOID
+KCOM_New(
+ size_t size,
+ POOL_TYPE pool_type,
+ ULONG tag)
+{
+ PVOID result;
+
+ result = ExAllocatePoolWithTag(pool_type, size, tag);
+
+ if (result)
+ RtlZeroMemory(result, size);
+
+ return result;
+}
+
+PVOID
+__cdecl
+operator new(
+ size_t size,
+ POOL_TYPE pool_type)
+{
+ return KCOM_New(size, pool_type, 'wNcP');
+}
+
+PVOID
+__cdecl
+operator new(
+ size_t size,
+ POOL_TYPE pool_type,
+ ULONG tag)
+{
+ return KCOM_New(size, pool_type, tag);
+}
+
+void
+__cdecl
+operator delete(
+ PVOID ptr)
+{
+ ExFreePool(ptr);
+}
+
+void
+__cdecl
+operator delete(
+ PVOID ptr, UINT_PTR)
+{
+ ExFreePool(ptr);
+}
+
CUnknown::CUnknown(PUNKNOWN outer_unknown)
{
m_ref_count = 0;