存档

文章标签 ‘宏’

计算结构体成员偏移值offsetof

2011年11月16日 6 条评论

    一个比较有意思的宏,不知道大家见得多不多。我见得不多,但是偶尔也会用一下。最早看到offsetof这个宏,不知道是从哪里看到的一道面试题,就是求结构体的成员相对于结构体的偏移值,第一个想到的方法当然是对结构体变量的成员和对应的结构体变量取地址操作然后相减;如果不定义结构体变量,那么又该如何操作呢?这时候offsetof就派上用场了,当然,我们感兴趣的是offsetof的内部实现。
下面这段代码是我从Visual Studio 2005的里面复制出来[......]

继续阅读

分类: C语言 标签: , , ,

PAGED_CODE()

2011年2月25日 2 条评论

PAGED_CODE这个宏可以确保调用线程运行在一个允许分页的足够低IRQL级别。
参数:无
返回值:无
注释:如果IRQL > APC_LEVEL,则PAGED_CODE()会对系统产生一个断言。
对这个宏的调用必须放在一个包含有可以使用分页内存的代码或者访问分页内存的代码的驱动例程的开始位置。
PAGED_CODE这个宏仅仅检测这个宏所在位置的IRQL级别。如果在这个宏之后提升IRQL级别,PAGED_CODE将无法检测出之后的IRQL级别。当IRQL被不适当的提升的时候驱动程序员必须[......]

继续阅读

分类: Windows驱动开发 标签: , ,