指明代码加载内存位置的几种方式

//第一种方法
//
//  demo.h
//
#pragma once

#ifdef __cplusplus
extern "C"
{
#endif
#include <NTDDK.h>
#ifdef __cplusplus
}
#endif

#define PAGEDCODE  code_seg("PAGE")  //分页内存
#define LOCKEDCODE code_seg()       //非分页内存
#define INITCODE   code_seg("INIT")   //初始化内存块:指明该函数只是在加载的时候需要载入内存,之后可以卸载掉

#define PAGEDDATA  data_seg("PAGE")
#define LOCKEDDATA data_seg()
#define INITDATA   data_seg("INIT")


//
//   demo.cpp
//
#include "demo.h"


#pragma INITCODE
extern "C" NTSTATUS DriverEntry(....)
{
}

#pragma PAGEDCODE
NTSTATUS  DispatchRoutine(IN PDEVICE_OBJECT pDevObj,
     IN PIRP pIrp)
{
}

#pragma PAGEDCODE
VOID DriverUnload (IN PDRIVER_OBJECT pDriverObject) 
{
}
------------------------------------------------

//
//第二种方法

//使编译器把代码放到特定段的传统方法是使用alloc_text编译指示。但不是每种编译器都支持这个编译指示,
//判断是否定义了ALLOC_PRAGMA可以帮助决定能否使用alloc_text编译指示,这个编译指示可以把驱动程
//序的单独例程放到特定段中

#ifdef ALLOC_PRAGMA

#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(INIT, StartHook)
#pragma alloc_text(PAGE, DispatchIoCtrl)
#pragma alloc_text(PAGE, RemoveHook)
#pragma alloc_text(PAGE, UnloadDriver)

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值