gpt4 book ai didi

c++ - WDK 新增的重载运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:32:28 27 4
gpt4 key购买 nike

我在“ native 子系统”的 wdk 中构建一个简单的代码我有一个重载 new 和 delete 运算符的库这是代码:



#include<ntddk.h>

#define HEAP_ZERO_MEMORY 0x00000008
#define HEAP_GROWABLE 0x00000002

typedef NTSTATUS
(NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
IN PVOID Base,
IN OUT PVOID *CommitAddress,
IN OUT PSIZE_T CommitSize
);

typedef struct _RTL_HEAP_PARAMETERS {
ULONG Length;
SIZE_T SegmentReserve;
SIZE_T SegmentCommit;
SIZE_T DeCommitFreeBlockThreshold;
SIZE_T DeCommitTotalFreeThreshold;
SIZE_T MaximumAllocationSize;
SIZE_T VirtualMemoryThreshold;
SIZE_T InitialCommit;
SIZE_T InitialReserve;
PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
SIZE_T Reserved[ 2 ];
} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;


void* operator new(size_t sz);

void operator delete(void* p);

void* mg_malloc(unsigned int size);
int mg_free(void *buffer);
void InitAPSupportLibrary();
void FinishAPSupportLibrary();

extern "C"
{
PVOID RtlAllocateHeap(
__in PVOID HeapHandle,
__in_opt ULONG Flags,
__in SIZE_T Size
);
BOOLEAN RtlFreeHeap(
__in PVOID HeapHandle,
__in_opt ULONG Flags,
__in PVOID HeapBase
);

PVOID

RtlCreateHeap(


IN ULONG Flags,
IN PVOID Base ,
IN ULONG Reserve ,
IN ULONG Commit,
IN BOOLEAN Lock ,
IN PRTL_HEAP_PARAMETERS RtlHeapParams );




PVOID RtlDestroyHeap(
__in PVOID HeapHandle
);
}

和cpp文件代码:



#include "main.h"

PVOID mainHeapHandle = NULL;


void InitAPSupportLibrary()
{
mainHeapHandle = RtlCreateHeap(HEAP_GROWABLE,NULL,0,0,NULL,0);
}

void FinishAPSupportLibrary()
{
if(mainHeapHandle) RtlDestroyHeap(mainHeapHandle);

}


void* mg_malloc(unsigned int size)
{

if(!mainHeapHandle)
InitAPSupportLibrary();

void *buf = RtlAllocateHeap(mainHeapHandle,HEAP_ZERO_MEMORY,size);
return buf;

}

int mg_free(void *buffer)
{
if (!mainHeapHandle) return 0;
return RtlFreeHeap(mainHeapHandle,0,buffer)?1:0;
}

void* operator new(size_t sz)
{
void* p = (void*)mg_malloc(sz);
return p;
}
void operator delete(void* p)
{
mg_free(p);
}

错误是: error C2373: 'operator new' : 重新定义;不同的类型修饰符 error C2373: 'operator delete' : 重新定义;不同的类型修饰符

谢谢你的帮助

最佳答案

如果你查看编译器的 <new> header ,operator delete 的声明看起来像这样:

void __CRTDECL operator delete(void *) _THROW0();

如果宏__CRTDECL扩展成除了什么都没有的东西(但可能是 __cdecl ),你可能与你的声明不匹配。

类似于 operator new .

关于c++ - WDK 新增的重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com