chapter 2.6: Windows内核模式编程基本建议

分配内存
1.保证分配内存失败不会导致crash:进行失败处理和重试,以及保存已被分配的内存指针
2.使用tagged 内存分配来更好的debug和防止内存泄露


使用spin locks
1.在使用spin lock时不要访问paged代码和数据
    使用PAGED_CODE()宏
2.尽可能短时间保持spin lock
3.小心地获取和释放spin lock:获取前先释放
4.按获取的逆顺序释放多重锁
5.使用Driver Verifier探测dead lock


管理Page fault
1.内存正确分配:合理选择paged/nonpaged pool
2.运行Driver Verifier并打开IRQL Checking:找paging相关错误


访问用户模式内存
1.不要信任任何来自用户模式的内容:长度检测,恶意检测,传入参数的复制(防止被修改)
2.不要简单的对用户模式指针解引用:probe&lock with DDI routines;使用try,catch。


阻塞线程
1.小心线程阻塞


验证驱动
1.运行Driver Verifier和KMDF Verifier:paged access error
2.使用PREfast和SDV检查代码


使用宏
1.使用VERIFY_IS_IRQL_PASSIVE_LEVEL()宏保证例程都运行在PASSIVE_LEVEL中。
2.使用PAGED_CODE()保证代码运行在PASSIVE_LEVEL之下。
3.使用UNREFERENCED_PARAMETER对所有不用的参数进行标记:Ntddk.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值