#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
该文章详细解释了CONTAINING_RECORD宏的用途,它用于从结构体的某个成员地址反推整个结构体的指针。通过将地址减去成员在零初始化的结构体中的偏移量,可以获取包含该成员的结构体类型的指针。此技术常用于内核驱动编程和处理嵌套结构。
#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))

被折叠的 条评论
为什么被折叠?