KMDF中未分页内存的类型选择

本文介绍了Windows内核驱动在分配未分页内存时,应当使用NonPagedPoolNx而非NonPagedPool以提高安全性。从Windows 8开始,NonPagedPool等同于NonPagedPoolExecute,允许代码执行,存在安全隐患。建议驱动开发者使用NonPagedPoolNx,防止恶意代码执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核驱动程序中,内存空间的动态分配不能使用C语言的malloc等函数,取而代之的是ExAllocatePoolWithTag()和ExFreePool(),使用方法举例如下:

#defineTEST_POOL_TAG            (ULONG)'test'

PUCHAR tempBuf = NULL;

tempBuf = ExAllocatePoolWithTag ( NonPagedPool,tempBufSize, TEST_POOL_TAG );

ExFreePool ( (PVOID)tempBuf ); //free memory

但此种写法在进行HLK测试时,会出现蓝屏的现象,具体的错误信息如下:

DRIVER_VERIFIER_DETECTED_VIOLATION(c4)

A device driverattempting to corrupt the system has been caught.  This is

because the driverwas specified in the registry as being suspect (by the

administrator) andthe kernel has enabled substantial checking of this driver.

If the driverattempts to corrupt the system, bugchecks 0xC4, 0xC1 and 0xA will

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4013 “sprintf”未定义;假设外部返回 int KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 39 错误 C2059 语法错误:“)” KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 75 错误 C2065 “ETH_HEADER”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 86 错误 C2065 “ethHeader”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 86 错误 C2065 “ETH_HEADER”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 86 错误 C2059 语法错误:“)” KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 86 错误 C2065 “ethHeader”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 89 错误 C2223 “->EtherType”的左侧必须指向结构/联合 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 89 错误 C4013 “htons”未定义;假设外部返回 int KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 89 错误 C2065 “ETH_P_ARP”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 89 错误 C2059 语法错误:“)” KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 90 错误 C2065 “ETH_HEADER”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 92 错误 C2065 “ethHeader”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 98 错误 C2065 “ARP_OPCODE_REPLY”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 105 错误 C4013 “htonl”未定义;假设外部返回 int KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 106 错误 C2065 “ethHeader”: 未声明的标识符 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 116 错误 C2223 “->SrcAddress”的左侧必须指向结构/联合 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 116 错误 C2168 “memcpy”: 内部函数的实参太少 KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 116 错误 C2059 语法错误:“)” KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 162 错误 C2059 语法错误:“)” KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 181 错误 C2059 语法错误:“)” KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 191 错误 C2059 语法错误:“)” KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 213 错误 C2059 语法错误:“)” KMDF Driver4 C:\Users\Administrator\source\repos\KMDF Driver4\KMDF Driver4\arp.c 223
最新发布
07-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值