64 ビットのデバイスドライバでは、構造体マクロを使用すると、両方のサイズのデータ構造体でカーネルメモリーの同じ部分を使用できます。メモリーバッファーには、データ構造体のネイティブ形式 (つまり、LP64 形式と ILP32 形式) の内容が保持されます。構造体への各アクセスは、条件式によって実装されます。32 ビットのドライバとしてコンパイルされた場合は、1 つのデータモデル (ネイティブ形式) のみがサポートされます。条件式は使用されません。
64 ビットバージョンのマクロは、データ構造体のシャドウバージョンの定義に依存します。シャドウバージョンには、固定幅の型を含む 32 ビットインタフェースが記述されます。シャドウデータ構造体の名前は、ネイティブなデータ構造体の名前に「32」を追加することによって作成されます。将来の保守コストを軽減するために、便宜上、シャドウ構造体の定義はネイティブな構造体と同じファイル内に置きます。
これらのマクロは、次の引数を取ることができます。
struct キーワードのあとに入力されたデータ構造体のネイティブ形式の構造体名。
ioctl(9E) のモードパラメータから抽出されたユーザーのデータモデル (FILP32 や FLP64 など) が格納されたフラグワード。
これらのマクロで操作される構造体の特定のインスタンスを参照するために使用される名前。
構造体内のフィールドの名前。