(五)、驱动重载new 和 delete 与内存间复制
一、重载new 与 delete
驱动程序的编写对c++的使用有很大限制
驱动程序中使用new 或 delete操作需要进行重载
会直接报错
重载代码:
#include <ntddk.h> void* __cdecl operator new[](size_t size) { DbgPrint("类外new的重载\n"); return ExAllocatePool(PagedPool, size);//堆分配分页// } void __cdecl operator delete[](void* p) { DbgPrint("类外deleted的重载\n"); if (p != NULL) { ExFreePool(p); } } class MyClass { public: MyClass(); void* __cdecl operator new(size_t size,POOL_TYPE PoolType = PagedPool) { DbgPrint("类内new的重载\n"); return ExAllocatePool(PoolType,size);//堆分配分页// } void __cdecl operator delete(void *p) { DbgPrint("进入delete\n"); if (p != NULL) { ExFreePool(p); } DbgPrint("类内delete的重载\n"); } ~MyClass(); private: }; MyClass::MyClass() { DbgPrint("构造函数\n"); } MyClass::~MyClass() { DbgPrint("析构函数\n"); } VOID Unload(PDRIVER_OBJECT driver) { DbgPrint("Driver Unload\n"); } extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING) { PCHAR ctr = new CHAR[100]; delete[] ctr; MyClass* MC = new (PagedPool)MyClass; delete MC; driver->DriverUnload = Unload; return STATUS_SUCCESS; }
实验
二、内存复制
这些函数都是宏定义