标签归档:结构体

FIELD_OFFSET 宏详解

在日常开发过程中,我们常常用如下这种形式的结构体来传递数据。

typedef struct  _PATH_INFO {
    HANDLE  hPPid;              // 父进程 PID
    HANDLE  hPid;               // 子进程 PID
    ULONG   PathLength;         // 子进程路径长度
    TCHAR   Path[1];            // 用于存储子进程路径
} PATH_INFO, *PPATH_INFO;

其中前三个成员用来描述一个进程的父进程PID和自身进程的PID以及路径长度信息,而最后一个成员来描述该路径的实际内容,由于路径长度是不定的,我们为了节省内存,加了一个 PathLength 的成员来描述路径长度,不会将实际储存路径的成员设置成固定的 512 大小或者 1024 大小,这样会非常浪费内存,在使用过程中,我们会想如下这种方式来给结构体分配内存和填充数据。

继续阅读