代码如下:typedefstruct _HEADER_DATA{ETHERNET_HEADEREtherHeader;union {struct { IP_HEADER IpHeader; };struct { LLC_SNA...
全文
回复(5) 2004-05-15 18:37 来自版块 - NDIS网络接口开发
表情
arthurtu把所有的结构都设置成1byte对齐显然不是好主意 用#pragma pack(1) #pragma pack(pop)(2004-05-18 12:19)
bingjie呵呵,这个我也没试过(2004-05-17 22:38)
nicklezhang我的意思是,IO Manager传下来的Irp是8byte对齐的,而在我的驱动程序编译选项中是1byte对齐,这样访问Irp中的成员变量时岂不就要出错?(2004-05-17 16:45)
nicklezhang但是如果我改成4bytes或1byte对齐,那如果遇到象_IRP这样的结构,例如IO Manager传下来的Irp,岂不是和我的驱动程序中的用法冲突?谢谢(2004-05-17 16:43)
bingjie这是结构对齐的问题,MS C编译器对结构编译时默认是4字节对齐的,VC++是8字节对齐,实际上当结构的成员不是4字节对齐时编译器会自动插入隐含的成员变量导致整个结构按照4字节对齐。由于你的EtherHeader是14字节,所以编译器在其后插入了2字节,导致你其它的结构到偏移都后移...(2004-05-15 21:16)

返回顶部