//第一种方法
//
// 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