(五)、驱动重载new 和 delete 与内存间复制

一、重载new 与 delete

驱动程序的编写对c++的使用有很大限制
驱动程序中使用new 或 delete操作需要进行重载
 
0
会直接报错
 
重载代码:
#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;
}

 

实验
 
0
 

二、内存复制

 
0
这些函数都是宏定义
0
 
posted @ 2022-04-03 23:19  TLSN  阅读(65)  评论(0编辑  收藏  举报