#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
用于取得内存中任何结构体的首地址,要提供的参数是:结构体中某个成员(field)的地址address、结构体的类型type、提供地址那个成员的名字field。
(ULONG_PTR)(&((type *)0)->field)),它表示结构体type的field字段相对type首地址的内存地址偏移量,
也可以如此理解:结构体首地址从0开始数,field的偏移就是(ULONG_PTR)(&((type *)0)->field))
type结构体的field字段的地址减去field字段在结构体中的偏移。就是结构体的首地址