编写设备驱动程序

声明并初始化结构句柄

可以使用 STRUCT_DECL(9F)STRUCT_INIT(9F) 声明和初始化句柄及空间,以便在栈中对 ioctl 进行解码。STRUCT_HANDLE(9F)STRUCT_SET_HANDLE(9F) 可以声明和初始化句柄,但不在栈中分配空间。如果结构非常大,或者包含在其他某个数据结构中,则后面的宏比较有用。


注 –

因为 STRUCT_DECL(9F)STRUCT_HANDLE(9F) 宏扩展为数据结构声明,所以这些宏在 C 代码中应该使用这些声明进行分组。


用于声明和初始化结构的宏如下所示:

STRUCT_DECL(structname, handle)

声明为 structname 数据结构调用了 handle结构句柄STRUCT_DECL 按其本机形式在栈中分配空间。假定本机形式大于或等于结构的 ILP32 形式。

STRUCT_INIT(handle, umodel)

handle 的数据模型初始化为 umodel。在对使用 STRUCT_DECL(9F) 声明的结构句柄进行任何访问之前,必须调用此宏。

STRUCT_HANDLE(structname, handle)

声明调用了 handle结构句柄。它与 STRUCT_DECL(9F) 相对。

STRUCT_SET_HANDLE(handle , umodel, addr )

handle 的数据模型初始化为 umodel,然后将 addr 设置为用于后续处理的缓冲区。在访问使用 STRUCT_DECL(9F) 声明的结构句柄之前,请调用此宏。