Win32 API 日本語リファレンス
ホームStorage.Nvme › NVME_IDENTIFY_CONTROLLER_DATA

NVME_IDENTIFY_CONTROLLER_DATA

構造体
サイズx64: 4096 バイト / x86: 4096 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
VIDWORD2+0+0PCIベンダID。
SSVIDWORD2+2+2PCIサブシステムベンダID。
SNBYTE20+4+4シリアル番号を表す固定長バイト配列(ASCII)。
MNBYTE40+24+24モデル番号を表す固定長バイト配列(ASCII)。
FRBYTE8+64+64ファームウェアリビジョンを表す固定長バイト配列(ASCII)。
RABBYTE1+72+72推奨アービトレーションバースト(2の累乗指数)。
IEEEBYTE3+73+73IEEE OUI識別子(3バイト)。
CMIC_CMIC_e__Struct1+76+76マルチパスI/O・名前空間共有機能を示す構造体。
MDTSBYTE1+77+77最大データ転送サイズ(最小ページサイズに対する2の累乗指数)。
CNTLIDWORD2+78+78このコントローラの識別子。
VERDWORD4+80+80準拠するNVMeバージョン。
RTD3RDWORD4+84+84RTD3再開レイテンシ(マイクロ秒)。
RTD3EDWORD4+88+88RTD3エントリレイテンシ(マイクロ秒)。
OAES_OAES_e__Struct4+92+92サポートする任意非同期イベント通知を示す構造体。
CTRATT_CTRATT_e__Struct4+96+96コントローラ属性(128ビットホスト識別子対応等)を示す構造体。
RRLS_RRLS_e__Struct2+100+100読み取り回復レベル対応を示す構造体。
Reserved0BYTE9+102+102予約領域。未使用。
CNTRLTYPEBYTE1+111+111コントローラ種別(I/O・管理・検出)を示す値。
FGUIDBYTE16+112+112FRU(現場交換ユニット)グローバル一意識別子(16バイト)。
CRDT1WORD2+128+128コマンドリトライ遅延時間1。
CRDT2WORD2+130+130コマンドリトライ遅延時間2。
CRDT3WORD2+132+132コマンドリトライ遅延時間3。
Reserved1BYTE106+134+134予約領域。未使用。
ReservedForManagementBYTE13+240+240NVMe管理インターフェイス用に予約された領域。
NVMSRBYTE1+253+253NVMサブシステムレポート(エンクロージャ等)を示す値。
VWCIBYTE1+254+254VPDライトサイクル情報を示す値。
MECBYTE1+255+255管理エンドポイント機能(SMBus/PCIe)を示す値。
OACS_OACS_e__Struct2+256+256サポートする任意管理コマンド(セキュリティ・フォーマット等)を示す構造体。
ACLBYTE1+258+258中止コマンド制限(同時実行可能なAbort数から1を引いた値)。
AERLBYTE1+259+259非同期イベント要求制限(同時保持可能数から1を引いた値)。
FRMW_FRMW_e__Struct1+260+260ファームウェア更新機能(スロット数・有効化方式)を示す構造体。
LPA_LPA_e__Struct1+261+261ログページ属性(対応する任意ログ)を示す構造体。
ELPEBYTE1+262+262エラーログページエントリ数から1を引いた値。
NPSSBYTE1+263+263サポートする電源状態数から1を引いた値。
AVSCC_AVSCC_e__Struct1+264+264管理ベンダ固有コマンドの形式を示す構造体。
APSTA_APSTA_e__Struct1+265+265自律電源状態遷移の対応を示す構造体。
WCTEMPWORD2+266+266警告複合温度閾値(WCTEMP、ケルビン)。
CCTEMPWORD2+268+268クリティカル複合温度閾値(CCTEMP、ケルビン)。
MTFAWORD2+270+270最大ファームウェア有効化時間(100ミリ秒単位)。
HMPREDWORD4+272+272ホストメモリバッファ推奨サイズ(4KiB単位)。
HMMINDWORD4+276+276ホストメモリバッファ最小サイズ(4KiB単位)。
TNVMCAPBYTE16+280+280総NVM容量(バイト、128ビット)。
UNVMCAPBYTE16+296+296未割り当てNVM容量(バイト、128ビット)。
RPMBS_RPMBS_e__Struct4+312+312RPMB(リプレイ保護メモリブロック)対応を示す構造体。
EDSTTWORD2+316+316拡張デバイス自己テストの推定実行時間(分)。
DSTOBYTE1+318+318デバイス自己テスト動作(単一実行制限等)を示す値。
FWUGBYTE1+319+319ファームウェア更新粒度(4KiB単位)。0xFFで未報告。
KASWORD2+320+320キープアライブサポートの粒度(100ミリ秒単位)。
HCTMA_HCTMA_e__Struct2+322+322ホスト制御熱管理の対応を示す構造体。
MNTMTWORD2+324+324最小熱管理温度(MNTMT、ケルビン)。
MXTMTWORD2+326+326最大熱管理温度(MXTMT、ケルビン)。
SANICAP_SANICAP_e__Struct4+328+328サニタイズ機能(クリプト消去・ブロック消去等)の対応を示す構造体。
HMMINDSDWORD4+332+332ホストメモリバッファ最小デスクリプタサイズ。
HMMAXDWORD2+336+336ホストメモリバッファ最大デスクリプタエントリ数。
NSETIDMAXWORD2+338+338サポートするNVMセットIDの最大値。
ENDGIDMAXWORD2+340+340サポートするエンデュアランスグループIDの最大値。
ANATTBYTE1+342+342ANA遷移時間(秒)。
ANACAP_ANACAP_e__Struct1+343+343ANA(非対称ネームスペースアクセス)機能の対応を示す構造体。
ANAGRPMAXDWORD4+344+344サポートするANAグループIDの最大値。
NANAGRPIDDWORD4+348+348サポートするANAグループIDの総数。
PELSDWORD4+352+352永続イベントログのサイズ(64KiB単位)。
DomainIdWORD2+356+356このコントローラが属するドメインの識別子。
Reserved2BYTE10+358+358予約領域。未使用。
MEGCAPBYTE16+368+368最大エンデュアランスグループ容量(バイト、128ビット)。
TMPTHHABYTE1+384+384温度閾値ヒステリシス属性を示す値。
Reserved3BYTE1+385+385予約領域。未使用。
CQTWORD2+386+386コマンドキュータイムアウト関連値。
Reserved4BYTE124+388+388予約領域。未使用。
SQES_SQES_e__Struct1+512+512サポートする送信キューエントリサイズ(最小/最大、2の累乗指数)を示す構造体。
CQES_CQES_e__Struct1+513+513サポートする完了キューエントリサイズ(最小/最大、2の累乗指数)を示す構造体。
MAXCMDWORD2+514+5141キューで未完了にできる最大コマンド数。
NNDWORD4+516+516サポートするネームスペース数の上限。
ONCS_ONCS_e__Struct2+520+520サポートする任意NVMコマンド(比較・書き込みゼロ等)を示す構造体。
FUSES_FUSES_e__Struct2+522+522フューズド操作(比較&書き込み等)の対応を示す構造体。
FNA_FNA_e__Struct1+524+524フォーマット時の動作属性(全名前空間一括等)を示す構造体。
VWC_VWC_e__Struct1+525+525揮発性ライトキャッシュの有無を示す構造体。
AWUNWORD2+526+526アトミック書き込みユニット(通常、論理ブロック数)。
AWUPFWORD2+528+528アトミック書き込みユニット(電源断時、論理ブロック数)。
NVSCC_NVSCC_e__Struct1+530+530NVMベンダ固有コマンドの形式を示す構造体。
NWPC_NWPC_e__Struct1+531+531ネームスペース書き込み保護機能の対応を示す構造体。
ACWUWORD2+532+532アトミック比較書き込みユニット(論理ブロック数)。
CopyDescFormatsWORD2+534+534サポートするコピーデスクリプタ形式を示すビットマスク。
SGLS_SGLS_e__Struct4+536+536SGL(スキャッタギャザリスト)機能の対応を示す構造体。
MNANDWORD4+540+540サポートする最大ネームスペース数。
MAXDNABYTE16+544+544ドメインあたりの最大ネームスペース割り当て容量(128ビット)。
MAXCNADWORD4+560+560コントローラあたりの最大割り当て可能ネームスペース数。
Reserved6BYTE204+564+564予約領域。未使用。
SUBNQNBYTE256+768+768NVMサブシステムのNVMe修飾名を表す固定長バイト配列。
Reserved7BYTE768+1024+1024予約領域。未使用。
IOCCSZDWORD4+1792+1792I/Oキューコマンドカプセルサイズ(16バイト単位、Fabrics)。
IORCSZDWORD4+1796+1796I/Oキュー応答カプセルサイズ(16バイト単位、Fabrics)。
ICDOFFWORD2+1800+1800インカプセルデータオフセット(16バイト単位、Fabrics)。
FCATT_FCATT_e__Struct1+1802+1802Fabricsコントローラ属性を示す構造体。
MSDBDBYTE1+1803+1803SGLデスクリプタの最大送信データブロック数(Fabrics)。
OFCS_OFCS_e__Struct2+1804+1804任意Fabricsコマンド(切断等)の対応を示す構造体。
DCTYPEBYTE1+1806+1806検出コントローラ種別を示す値(Fabrics)。
Reserved8BYTE241+1807+1807予約領域。未使用。
PDSNVME_POWER_STATE_DESC1024+2048+2048サポートする各電源状態記述子を並べたNVME_POWER_STATE_DESC配列。
VSBYTE1024+3072+3072ベンダ固有領域を表す固定長バイト配列。

構造体: _CMIC_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _OAES_e__Struct x64 4B / x86 4B

フィールドサイズx64x86
_bitfieldDWORD4+0+0

構造体: _CTRATT_e__Struct x64 4B / x86 4B

フィールドサイズx64x86
_bitfieldDWORD4+0+0

構造体: _RRLS_e__Struct x64 2B / x86 2B

フィールドサイズx64x86
_bitfieldWORD2+0+0

構造体: _OACS_e__Struct x64 2B / x86 2B

フィールドサイズx64x86
_bitfieldWORD2+0+0

構造体: _FRMW_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _LPA_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _AVSCC_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _APSTA_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _RPMBS_e__Struct x64 4B / x86 4B

フィールドサイズx64x86
_bitfieldDWORD4+0+0

構造体: _HCTMA_e__Struct x64 2B / x86 2B

フィールドサイズx64x86
_bitfieldWORD2+0+0

構造体: _SANICAP_e__Struct x64 4B / x86 4B

フィールドサイズx64x86
_bitfieldDWORD4+0+0

構造体: _ANACAP_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _SQES_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _CQES_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _ONCS_e__Struct x64 2B / x86 2B

フィールドサイズx64x86
_bitfieldWORD2+0+0

構造体: _FUSES_e__Struct x64 2B / x86 2B

フィールドサイズx64x86
_bitfieldWORD2+0+0

構造体: _FNA_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _VWC_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _NVSCC_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _NWPC_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _SGLS_e__Struct x64 4B / x86 4B

フィールドサイズx64x86
_bitfieldDWORD4+0+0

構造体: _FCATT_e__Struct x64 1B / x86 1B

フィールドサイズx64x86
_bitfieldBYTE1+0+0

構造体: _OFCS_e__Struct x64 2B / x86 2B

フィールドサイズx64x86
_bitfieldWORD2+0+0

各言語での定義

#include <windows.h>

// NVME_POWER_STATE_DESC  (x64 32 / x86 32 バイト)
typedef struct NVME_POWER_STATE_DESC {
    WORD MP;
    BYTE Reserved0;
    BYTE _bitfield1;
    DWORD ENLAT;
    DWORD EXLAT;
    BYTE _bitfield2;
    BYTE _bitfield3;
    BYTE _bitfield4;
    BYTE _bitfield5;
    WORD IDLP;
    BYTE _bitfield6;
    BYTE Reserved7;
    WORD ACTP;
    BYTE _bitfield7;
    BYTE Reserved9[9];
} NVME_POWER_STATE_DESC;

// NVME_IDENTIFY_CONTROLLER_DATA  (x64 4096 / x86 4096 バイト)
typedef struct NVME_IDENTIFY_CONTROLLER_DATA {
    WORD VID;
    WORD SSVID;
    BYTE SN[20];
    BYTE MN[40];
    BYTE FR[8];
    BYTE RAB;
    BYTE IEEE[3];
    _CMIC_e__Struct CMIC;
    BYTE MDTS;
    WORD CNTLID;
    DWORD VER;
    DWORD RTD3R;
    DWORD RTD3E;
    _OAES_e__Struct OAES;
    _CTRATT_e__Struct CTRATT;
    _RRLS_e__Struct RRLS;
    BYTE Reserved0[9];
    BYTE CNTRLTYPE;
    BYTE FGUID[16];
    WORD CRDT1;
    WORD CRDT2;
    WORD CRDT3;
    BYTE Reserved1[106];
    BYTE ReservedForManagement[13];
    BYTE NVMSR;
    BYTE VWCI;
    BYTE MEC;
    _OACS_e__Struct OACS;
    BYTE ACL;
    BYTE AERL;
    _FRMW_e__Struct FRMW;
    _LPA_e__Struct LPA;
    BYTE ELPE;
    BYTE NPSS;
    _AVSCC_e__Struct AVSCC;
    _APSTA_e__Struct APSTA;
    WORD WCTEMP;
    WORD CCTEMP;
    WORD MTFA;
    DWORD HMPRE;
    DWORD HMMIN;
    BYTE TNVMCAP[16];
    BYTE UNVMCAP[16];
    _RPMBS_e__Struct RPMBS;
    WORD EDSTT;
    BYTE DSTO;
    BYTE FWUG;
    WORD KAS;
    _HCTMA_e__Struct HCTMA;
    WORD MNTMT;
    WORD MXTMT;
    _SANICAP_e__Struct SANICAP;
    DWORD HMMINDS;
    WORD HMMAXD;
    WORD NSETIDMAX;
    WORD ENDGIDMAX;
    BYTE ANATT;
    _ANACAP_e__Struct ANACAP;
    DWORD ANAGRPMAX;
    DWORD NANAGRPID;
    DWORD PELS;
    WORD DomainId;
    BYTE Reserved2[10];
    BYTE MEGCAP[16];
    BYTE TMPTHHA;
    BYTE Reserved3;
    WORD CQT;
    BYTE Reserved4[124];
    _SQES_e__Struct SQES;
    _CQES_e__Struct CQES;
    WORD MAXCMD;
    DWORD NN;
    _ONCS_e__Struct ONCS;
    _FUSES_e__Struct FUSES;
    _FNA_e__Struct FNA;
    _VWC_e__Struct VWC;
    WORD AWUN;
    WORD AWUPF;
    _NVSCC_e__Struct NVSCC;
    _NWPC_e__Struct NWPC;
    WORD ACWU;
    WORD CopyDescFormats;
    _SGLS_e__Struct SGLS;
    DWORD MNAN;
    BYTE MAXDNA[16];
    DWORD MAXCNA;
    BYTE Reserved6[204];
    BYTE SUBNQN[256];
    BYTE Reserved7[768];
    DWORD IOCCSZ;
    DWORD IORCSZ;
    WORD ICDOFF;
    _FCATT_e__Struct FCATT;
    BYTE MSDBD;
    _OFCS_e__Struct OFCS;
    BYTE DCTYPE;
    BYTE Reserved8[241];
    NVME_POWER_STATE_DESC PDS[32];
    BYTE VS[1024];
} NVME_IDENTIFY_CONTROLLER_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NVME_POWER_STATE_DESC
{
    public ushort MP;
    public byte Reserved0;
    public byte _bitfield1;
    public uint ENLAT;
    public uint EXLAT;
    public byte _bitfield2;
    public byte _bitfield3;
    public byte _bitfield4;
    public byte _bitfield5;
    public ushort IDLP;
    public byte _bitfield6;
    public byte Reserved7;
    public ushort ACTP;
    public byte _bitfield7;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 9)] public byte[] Reserved9;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NVME_IDENTIFY_CONTROLLER_DATA
{
    public ushort VID;
    public ushort SSVID;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] public byte[] SN;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)] public byte[] MN;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] FR;
    public byte RAB;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] IEEE;
    public _CMIC_e__Struct CMIC;
    public byte MDTS;
    public ushort CNTLID;
    public uint VER;
    public uint RTD3R;
    public uint RTD3E;
    public _OAES_e__Struct OAES;
    public _CTRATT_e__Struct CTRATT;
    public _RRLS_e__Struct RRLS;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 9)] public byte[] Reserved0;
    public byte CNTRLTYPE;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] FGUID;
    public ushort CRDT1;
    public ushort CRDT2;
    public ushort CRDT3;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 106)] public byte[] Reserved1;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 13)] public byte[] ReservedForManagement;
    public byte NVMSR;
    public byte VWCI;
    public byte MEC;
    public _OACS_e__Struct OACS;
    public byte ACL;
    public byte AERL;
    public _FRMW_e__Struct FRMW;
    public _LPA_e__Struct LPA;
    public byte ELPE;
    public byte NPSS;
    public _AVSCC_e__Struct AVSCC;
    public _APSTA_e__Struct APSTA;
    public ushort WCTEMP;
    public ushort CCTEMP;
    public ushort MTFA;
    public uint HMPRE;
    public uint HMMIN;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] TNVMCAP;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] UNVMCAP;
    public _RPMBS_e__Struct RPMBS;
    public ushort EDSTT;
    public byte DSTO;
    public byte FWUG;
    public ushort KAS;
    public _HCTMA_e__Struct HCTMA;
    public ushort MNTMT;
    public ushort MXTMT;
    public _SANICAP_e__Struct SANICAP;
    public uint HMMINDS;
    public ushort HMMAXD;
    public ushort NSETIDMAX;
    public ushort ENDGIDMAX;
    public byte ANATT;
    public _ANACAP_e__Struct ANACAP;
    public uint ANAGRPMAX;
    public uint NANAGRPID;
    public uint PELS;
    public ushort DomainId;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public byte[] Reserved2;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] MEGCAP;
    public byte TMPTHHA;
    public byte Reserved3;
    public ushort CQT;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 124)] public byte[] Reserved4;
    public _SQES_e__Struct SQES;
    public _CQES_e__Struct CQES;
    public ushort MAXCMD;
    public uint NN;
    public _ONCS_e__Struct ONCS;
    public _FUSES_e__Struct FUSES;
    public _FNA_e__Struct FNA;
    public _VWC_e__Struct VWC;
    public ushort AWUN;
    public ushort AWUPF;
    public _NVSCC_e__Struct NVSCC;
    public _NWPC_e__Struct NWPC;
    public ushort ACWU;
    public ushort CopyDescFormats;
    public _SGLS_e__Struct SGLS;
    public uint MNAN;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] MAXDNA;
    public uint MAXCNA;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 204)] public byte[] Reserved6;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] public byte[] SUBNQN;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 768)] public byte[] Reserved7;
    public uint IOCCSZ;
    public uint IORCSZ;
    public ushort ICDOFF;
    public _FCATT_e__Struct FCATT;
    public byte MSDBD;
    public _OFCS_e__Struct OFCS;
    public byte DCTYPE;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 241)] public byte[] Reserved8;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public NVME_POWER_STATE_DESC[] PDS;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)] public byte[] VS;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NVME_POWER_STATE_DESC
    Public MP As UShort
    Public Reserved0 As Byte
    Public _bitfield1 As Byte
    Public ENLAT As UInteger
    Public EXLAT As UInteger
    Public _bitfield2 As Byte
    Public _bitfield3 As Byte
    Public _bitfield4 As Byte
    Public _bitfield5 As Byte
    Public IDLP As UShort
    Public _bitfield6 As Byte
    Public Reserved7 As Byte
    Public ACTP As UShort
    Public _bitfield7 As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=9)> Public Reserved9() As Byte
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NVME_IDENTIFY_CONTROLLER_DATA
    Public VID As UShort
    Public SSVID As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=20)> Public SN() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=40)> Public MN() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public FR() As Byte
    Public RAB As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public IEEE() As Byte
    Public CMIC As _CMIC_e__Struct
    Public MDTS As Byte
    Public CNTLID As UShort
    Public VER As UInteger
    Public RTD3R As UInteger
    Public RTD3E As UInteger
    Public OAES As _OAES_e__Struct
    Public CTRATT As _CTRATT_e__Struct
    Public RRLS As _RRLS_e__Struct
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=9)> Public Reserved0() As Byte
    Public CNTRLTYPE As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public FGUID() As Byte
    Public CRDT1 As UShort
    Public CRDT2 As UShort
    Public CRDT3 As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=106)> Public Reserved1() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=13)> Public ReservedForManagement() As Byte
    Public NVMSR As Byte
    Public VWCI As Byte
    Public MEC As Byte
    Public OACS As _OACS_e__Struct
    Public ACL As Byte
    Public AERL As Byte
    Public FRMW As _FRMW_e__Struct
    Public LPA As _LPA_e__Struct
    Public ELPE As Byte
    Public NPSS As Byte
    Public AVSCC As _AVSCC_e__Struct
    Public APSTA As _APSTA_e__Struct
    Public WCTEMP As UShort
    Public CCTEMP As UShort
    Public MTFA As UShort
    Public HMPRE As UInteger
    Public HMMIN As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public TNVMCAP() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public UNVMCAP() As Byte
    Public RPMBS As _RPMBS_e__Struct
    Public EDSTT As UShort
    Public DSTO As Byte
    Public FWUG As Byte
    Public KAS As UShort
    Public HCTMA As _HCTMA_e__Struct
    Public MNTMT As UShort
    Public MXTMT As UShort
    Public SANICAP As _SANICAP_e__Struct
    Public HMMINDS As UInteger
    Public HMMAXD As UShort
    Public NSETIDMAX As UShort
    Public ENDGIDMAX As UShort
    Public ANATT As Byte
    Public ANACAP As _ANACAP_e__Struct
    Public ANAGRPMAX As UInteger
    Public NANAGRPID As UInteger
    Public PELS As UInteger
    Public DomainId As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> Public Reserved2() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public MEGCAP() As Byte
    Public TMPTHHA As Byte
    Public Reserved3 As Byte
    Public CQT As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=124)> Public Reserved4() As Byte
    Public SQES As _SQES_e__Struct
    Public CQES As _CQES_e__Struct
    Public MAXCMD As UShort
    Public NN As UInteger
    Public ONCS As _ONCS_e__Struct
    Public FUSES As _FUSES_e__Struct
    Public FNA As _FNA_e__Struct
    Public VWC As _VWC_e__Struct
    Public AWUN As UShort
    Public AWUPF As UShort
    Public NVSCC As _NVSCC_e__Struct
    Public NWPC As _NWPC_e__Struct
    Public ACWU As UShort
    Public CopyDescFormats As UShort
    Public SGLS As _SGLS_e__Struct
    Public MNAN As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public MAXDNA() As Byte
    Public MAXCNA As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=204)> Public Reserved6() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)> Public SUBNQN() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=768)> Public Reserved7() As Byte
    Public IOCCSZ As UInteger
    Public IORCSZ As UInteger
    Public ICDOFF As UShort
    Public FCATT As _FCATT_e__Struct
    Public MSDBD As Byte
    Public OFCS As _OFCS_e__Struct
    Public DCTYPE As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=241)> Public Reserved8() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public PDS() As NVME_POWER_STATE_DESC
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1024)> Public VS() As Byte
End Structure
import ctypes
from ctypes import wintypes

class NVME_POWER_STATE_DESC(ctypes.Structure):
    _fields_ = [
        ("MP", ctypes.c_ushort),
        ("Reserved0", ctypes.c_ubyte),
        ("_bitfield1", ctypes.c_ubyte),
        ("ENLAT", wintypes.DWORD),
        ("EXLAT", wintypes.DWORD),
        ("_bitfield2", ctypes.c_ubyte),
        ("_bitfield3", ctypes.c_ubyte),
        ("_bitfield4", ctypes.c_ubyte),
        ("_bitfield5", ctypes.c_ubyte),
        ("IDLP", ctypes.c_ushort),
        ("_bitfield6", ctypes.c_ubyte),
        ("Reserved7", ctypes.c_ubyte),
        ("ACTP", ctypes.c_ushort),
        ("_bitfield7", ctypes.c_ubyte),
        ("Reserved9", ctypes.c_ubyte * 9),
    ]

class NVME_IDENTIFY_CONTROLLER_DATA(ctypes.Structure):
    _fields_ = [
        ("VID", ctypes.c_ushort),
        ("SSVID", ctypes.c_ushort),
        ("SN", ctypes.c_ubyte * 20),
        ("MN", ctypes.c_ubyte * 40),
        ("FR", ctypes.c_ubyte * 8),
        ("RAB", ctypes.c_ubyte),
        ("IEEE", ctypes.c_ubyte * 3),
        ("CMIC", _CMIC_e__Struct),
        ("MDTS", ctypes.c_ubyte),
        ("CNTLID", ctypes.c_ushort),
        ("VER", wintypes.DWORD),
        ("RTD3R", wintypes.DWORD),
        ("RTD3E", wintypes.DWORD),
        ("OAES", _OAES_e__Struct),
        ("CTRATT", _CTRATT_e__Struct),
        ("RRLS", _RRLS_e__Struct),
        ("Reserved0", ctypes.c_ubyte * 9),
        ("CNTRLTYPE", ctypes.c_ubyte),
        ("FGUID", ctypes.c_ubyte * 16),
        ("CRDT1", ctypes.c_ushort),
        ("CRDT2", ctypes.c_ushort),
        ("CRDT3", ctypes.c_ushort),
        ("Reserved1", ctypes.c_ubyte * 106),
        ("ReservedForManagement", ctypes.c_ubyte * 13),
        ("NVMSR", ctypes.c_ubyte),
        ("VWCI", ctypes.c_ubyte),
        ("MEC", ctypes.c_ubyte),
        ("OACS", _OACS_e__Struct),
        ("ACL", ctypes.c_ubyte),
        ("AERL", ctypes.c_ubyte),
        ("FRMW", _FRMW_e__Struct),
        ("LPA", _LPA_e__Struct),
        ("ELPE", ctypes.c_ubyte),
        ("NPSS", ctypes.c_ubyte),
        ("AVSCC", _AVSCC_e__Struct),
        ("APSTA", _APSTA_e__Struct),
        ("WCTEMP", ctypes.c_ushort),
        ("CCTEMP", ctypes.c_ushort),
        ("MTFA", ctypes.c_ushort),
        ("HMPRE", wintypes.DWORD),
        ("HMMIN", wintypes.DWORD),
        ("TNVMCAP", ctypes.c_ubyte * 16),
        ("UNVMCAP", ctypes.c_ubyte * 16),
        ("RPMBS", _RPMBS_e__Struct),
        ("EDSTT", ctypes.c_ushort),
        ("DSTO", ctypes.c_ubyte),
        ("FWUG", ctypes.c_ubyte),
        ("KAS", ctypes.c_ushort),
        ("HCTMA", _HCTMA_e__Struct),
        ("MNTMT", ctypes.c_ushort),
        ("MXTMT", ctypes.c_ushort),
        ("SANICAP", _SANICAP_e__Struct),
        ("HMMINDS", wintypes.DWORD),
        ("HMMAXD", ctypes.c_ushort),
        ("NSETIDMAX", ctypes.c_ushort),
        ("ENDGIDMAX", ctypes.c_ushort),
        ("ANATT", ctypes.c_ubyte),
        ("ANACAP", _ANACAP_e__Struct),
        ("ANAGRPMAX", wintypes.DWORD),
        ("NANAGRPID", wintypes.DWORD),
        ("PELS", wintypes.DWORD),
        ("DomainId", ctypes.c_ushort),
        ("Reserved2", ctypes.c_ubyte * 10),
        ("MEGCAP", ctypes.c_ubyte * 16),
        ("TMPTHHA", ctypes.c_ubyte),
        ("Reserved3", ctypes.c_ubyte),
        ("CQT", ctypes.c_ushort),
        ("Reserved4", ctypes.c_ubyte * 124),
        ("SQES", _SQES_e__Struct),
        ("CQES", _CQES_e__Struct),
        ("MAXCMD", ctypes.c_ushort),
        ("NN", wintypes.DWORD),
        ("ONCS", _ONCS_e__Struct),
        ("FUSES", _FUSES_e__Struct),
        ("FNA", _FNA_e__Struct),
        ("VWC", _VWC_e__Struct),
        ("AWUN", ctypes.c_ushort),
        ("AWUPF", ctypes.c_ushort),
        ("NVSCC", _NVSCC_e__Struct),
        ("NWPC", _NWPC_e__Struct),
        ("ACWU", ctypes.c_ushort),
        ("CopyDescFormats", ctypes.c_ushort),
        ("SGLS", _SGLS_e__Struct),
        ("MNAN", wintypes.DWORD),
        ("MAXDNA", ctypes.c_ubyte * 16),
        ("MAXCNA", wintypes.DWORD),
        ("Reserved6", ctypes.c_ubyte * 204),
        ("SUBNQN", ctypes.c_ubyte * 256),
        ("Reserved7", ctypes.c_ubyte * 768),
        ("IOCCSZ", wintypes.DWORD),
        ("IORCSZ", wintypes.DWORD),
        ("ICDOFF", ctypes.c_ushort),
        ("FCATT", _FCATT_e__Struct),
        ("MSDBD", ctypes.c_ubyte),
        ("OFCS", _OFCS_e__Struct),
        ("DCTYPE", ctypes.c_ubyte),
        ("Reserved8", ctypes.c_ubyte * 241),
        ("PDS", NVME_POWER_STATE_DESC * 32),
        ("VS", ctypes.c_ubyte * 1024),
    ]
#[repr(C)]
pub struct NVME_POWER_STATE_DESC {
    pub MP: u16,
    pub Reserved0: u8,
    pub _bitfield1: u8,
    pub ENLAT: u32,
    pub EXLAT: u32,
    pub _bitfield2: u8,
    pub _bitfield3: u8,
    pub _bitfield4: u8,
    pub _bitfield5: u8,
    pub IDLP: u16,
    pub _bitfield6: u8,
    pub Reserved7: u8,
    pub ACTP: u16,
    pub _bitfield7: u8,
    pub Reserved9: [u8; 9],
}

#[repr(C)]
pub struct NVME_IDENTIFY_CONTROLLER_DATA {
    pub VID: u16,
    pub SSVID: u16,
    pub SN: [u8; 20],
    pub MN: [u8; 40],
    pub FR: [u8; 8],
    pub RAB: u8,
    pub IEEE: [u8; 3],
    pub CMIC: _CMIC_e__Struct,
    pub MDTS: u8,
    pub CNTLID: u16,
    pub VER: u32,
    pub RTD3R: u32,
    pub RTD3E: u32,
    pub OAES: _OAES_e__Struct,
    pub CTRATT: _CTRATT_e__Struct,
    pub RRLS: _RRLS_e__Struct,
    pub Reserved0: [u8; 9],
    pub CNTRLTYPE: u8,
    pub FGUID: [u8; 16],
    pub CRDT1: u16,
    pub CRDT2: u16,
    pub CRDT3: u16,
    pub Reserved1: [u8; 106],
    pub ReservedForManagement: [u8; 13],
    pub NVMSR: u8,
    pub VWCI: u8,
    pub MEC: u8,
    pub OACS: _OACS_e__Struct,
    pub ACL: u8,
    pub AERL: u8,
    pub FRMW: _FRMW_e__Struct,
    pub LPA: _LPA_e__Struct,
    pub ELPE: u8,
    pub NPSS: u8,
    pub AVSCC: _AVSCC_e__Struct,
    pub APSTA: _APSTA_e__Struct,
    pub WCTEMP: u16,
    pub CCTEMP: u16,
    pub MTFA: u16,
    pub HMPRE: u32,
    pub HMMIN: u32,
    pub TNVMCAP: [u8; 16],
    pub UNVMCAP: [u8; 16],
    pub RPMBS: _RPMBS_e__Struct,
    pub EDSTT: u16,
    pub DSTO: u8,
    pub FWUG: u8,
    pub KAS: u16,
    pub HCTMA: _HCTMA_e__Struct,
    pub MNTMT: u16,
    pub MXTMT: u16,
    pub SANICAP: _SANICAP_e__Struct,
    pub HMMINDS: u32,
    pub HMMAXD: u16,
    pub NSETIDMAX: u16,
    pub ENDGIDMAX: u16,
    pub ANATT: u8,
    pub ANACAP: _ANACAP_e__Struct,
    pub ANAGRPMAX: u32,
    pub NANAGRPID: u32,
    pub PELS: u32,
    pub DomainId: u16,
    pub Reserved2: [u8; 10],
    pub MEGCAP: [u8; 16],
    pub TMPTHHA: u8,
    pub Reserved3: u8,
    pub CQT: u16,
    pub Reserved4: [u8; 124],
    pub SQES: _SQES_e__Struct,
    pub CQES: _CQES_e__Struct,
    pub MAXCMD: u16,
    pub NN: u32,
    pub ONCS: _ONCS_e__Struct,
    pub FUSES: _FUSES_e__Struct,
    pub FNA: _FNA_e__Struct,
    pub VWC: _VWC_e__Struct,
    pub AWUN: u16,
    pub AWUPF: u16,
    pub NVSCC: _NVSCC_e__Struct,
    pub NWPC: _NWPC_e__Struct,
    pub ACWU: u16,
    pub CopyDescFormats: u16,
    pub SGLS: _SGLS_e__Struct,
    pub MNAN: u32,
    pub MAXDNA: [u8; 16],
    pub MAXCNA: u32,
    pub Reserved6: [u8; 204],
    pub SUBNQN: [u8; 256],
    pub Reserved7: [u8; 768],
    pub IOCCSZ: u32,
    pub IORCSZ: u32,
    pub ICDOFF: u16,
    pub FCATT: _FCATT_e__Struct,
    pub MSDBD: u8,
    pub OFCS: _OFCS_e__Struct,
    pub DCTYPE: u8,
    pub Reserved8: [u8; 241],
    pub PDS: [NVME_POWER_STATE_DESC; 32],
    pub VS: [u8; 1024],
}
import "golang.org/x/sys/windows"

type NVME_POWER_STATE_DESC struct {
	MP uint16
	Reserved0 byte
	_bitfield1 byte
	ENLAT uint32
	EXLAT uint32
	_bitfield2 byte
	_bitfield3 byte
	_bitfield4 byte
	_bitfield5 byte
	IDLP uint16
	_bitfield6 byte
	Reserved7 byte
	ACTP uint16
	_bitfield7 byte
	Reserved9 [9]byte
}

type NVME_IDENTIFY_CONTROLLER_DATA struct {
	VID uint16
	SSVID uint16
	SN [20]byte
	MN [40]byte
	FR [8]byte
	RAB byte
	IEEE [3]byte
	CMIC _CMIC_e__Struct
	MDTS byte
	CNTLID uint16
	VER uint32
	RTD3R uint32
	RTD3E uint32
	OAES _OAES_e__Struct
	CTRATT _CTRATT_e__Struct
	RRLS _RRLS_e__Struct
	Reserved0 [9]byte
	CNTRLTYPE byte
	FGUID [16]byte
	CRDT1 uint16
	CRDT2 uint16
	CRDT3 uint16
	Reserved1 [106]byte
	ReservedForManagement [13]byte
	NVMSR byte
	VWCI byte
	MEC byte
	OACS _OACS_e__Struct
	ACL byte
	AERL byte
	FRMW _FRMW_e__Struct
	LPA _LPA_e__Struct
	ELPE byte
	NPSS byte
	AVSCC _AVSCC_e__Struct
	APSTA _APSTA_e__Struct
	WCTEMP uint16
	CCTEMP uint16
	MTFA uint16
	HMPRE uint32
	HMMIN uint32
	TNVMCAP [16]byte
	UNVMCAP [16]byte
	RPMBS _RPMBS_e__Struct
	EDSTT uint16
	DSTO byte
	FWUG byte
	KAS uint16
	HCTMA _HCTMA_e__Struct
	MNTMT uint16
	MXTMT uint16
	SANICAP _SANICAP_e__Struct
	HMMINDS uint32
	HMMAXD uint16
	NSETIDMAX uint16
	ENDGIDMAX uint16
	ANATT byte
	ANACAP _ANACAP_e__Struct
	ANAGRPMAX uint32
	NANAGRPID uint32
	PELS uint32
	DomainId uint16
	Reserved2 [10]byte
	MEGCAP [16]byte
	TMPTHHA byte
	Reserved3 byte
	CQT uint16
	Reserved4 [124]byte
	SQES _SQES_e__Struct
	CQES _CQES_e__Struct
	MAXCMD uint16
	NN uint32
	ONCS _ONCS_e__Struct
	FUSES _FUSES_e__Struct
	FNA _FNA_e__Struct
	VWC _VWC_e__Struct
	AWUN uint16
	AWUPF uint16
	NVSCC _NVSCC_e__Struct
	NWPC _NWPC_e__Struct
	ACWU uint16
	CopyDescFormats uint16
	SGLS _SGLS_e__Struct
	MNAN uint32
	MAXDNA [16]byte
	MAXCNA uint32
	Reserved6 [204]byte
	SUBNQN [256]byte
	Reserved7 [768]byte
	IOCCSZ uint32
	IORCSZ uint32
	ICDOFF uint16
	FCATT _FCATT_e__Struct
	MSDBD byte
	OFCS _OFCS_e__Struct
	DCTYPE byte
	Reserved8 [241]byte
	PDS [32]NVME_POWER_STATE_DESC
	VS [1024]byte
}
type
  NVME_POWER_STATE_DESC = record
    MP: Word;
    Reserved0: Byte;
    _bitfield1: Byte;
    ENLAT: DWORD;
    EXLAT: DWORD;
    _bitfield2: Byte;
    _bitfield3: Byte;
    _bitfield4: Byte;
    _bitfield5: Byte;
    IDLP: Word;
    _bitfield6: Byte;
    Reserved7: Byte;
    ACTP: Word;
    _bitfield7: Byte;
    Reserved9: array[0..8] of Byte;
  end;

  NVME_IDENTIFY_CONTROLLER_DATA = record
    VID: Word;
    SSVID: Word;
    SN: array[0..19] of Byte;
    MN: array[0..39] of Byte;
    FR: array[0..7] of Byte;
    RAB: Byte;
    IEEE: array[0..2] of Byte;
    CMIC: _CMIC_e__Struct;
    MDTS: Byte;
    CNTLID: Word;
    VER: DWORD;
    RTD3R: DWORD;
    RTD3E: DWORD;
    OAES: _OAES_e__Struct;
    CTRATT: _CTRATT_e__Struct;
    RRLS: _RRLS_e__Struct;
    Reserved0: array[0..8] of Byte;
    CNTRLTYPE: Byte;
    FGUID: array[0..15] of Byte;
    CRDT1: Word;
    CRDT2: Word;
    CRDT3: Word;
    Reserved1: array[0..105] of Byte;
    ReservedForManagement: array[0..12] of Byte;
    NVMSR: Byte;
    VWCI: Byte;
    MEC: Byte;
    OACS: _OACS_e__Struct;
    ACL: Byte;
    AERL: Byte;
    FRMW: _FRMW_e__Struct;
    LPA: _LPA_e__Struct;
    ELPE: Byte;
    NPSS: Byte;
    AVSCC: _AVSCC_e__Struct;
    APSTA: _APSTA_e__Struct;
    WCTEMP: Word;
    CCTEMP: Word;
    MTFA: Word;
    HMPRE: DWORD;
    HMMIN: DWORD;
    TNVMCAP: array[0..15] of Byte;
    UNVMCAP: array[0..15] of Byte;
    RPMBS: _RPMBS_e__Struct;
    EDSTT: Word;
    DSTO: Byte;
    FWUG: Byte;
    KAS: Word;
    HCTMA: _HCTMA_e__Struct;
    MNTMT: Word;
    MXTMT: Word;
    SANICAP: _SANICAP_e__Struct;
    HMMINDS: DWORD;
    HMMAXD: Word;
    NSETIDMAX: Word;
    ENDGIDMAX: Word;
    ANATT: Byte;
    ANACAP: _ANACAP_e__Struct;
    ANAGRPMAX: DWORD;
    NANAGRPID: DWORD;
    PELS: DWORD;
    DomainId: Word;
    Reserved2: array[0..9] of Byte;
    MEGCAP: array[0..15] of Byte;
    TMPTHHA: Byte;
    Reserved3: Byte;
    CQT: Word;
    Reserved4: array[0..123] of Byte;
    SQES: _SQES_e__Struct;
    CQES: _CQES_e__Struct;
    MAXCMD: Word;
    NN: DWORD;
    ONCS: _ONCS_e__Struct;
    FUSES: _FUSES_e__Struct;
    FNA: _FNA_e__Struct;
    VWC: _VWC_e__Struct;
    AWUN: Word;
    AWUPF: Word;
    NVSCC: _NVSCC_e__Struct;
    NWPC: _NWPC_e__Struct;
    ACWU: Word;
    CopyDescFormats: Word;
    SGLS: _SGLS_e__Struct;
    MNAN: DWORD;
    MAXDNA: array[0..15] of Byte;
    MAXCNA: DWORD;
    Reserved6: array[0..203] of Byte;
    SUBNQN: array[0..255] of Byte;
    Reserved7: array[0..767] of Byte;
    IOCCSZ: DWORD;
    IORCSZ: DWORD;
    ICDOFF: Word;
    FCATT: _FCATT_e__Struct;
    MSDBD: Byte;
    OFCS: _OFCS_e__Struct;
    DCTYPE: Byte;
    Reserved8: array[0..240] of Byte;
    PDS: array[0..31] of NVME_POWER_STATE_DESC;
    VS: array[0..1023] of Byte;
  end;
const NVME_POWER_STATE_DESC = extern struct {
    MP: u16,
    Reserved0: u8,
    _bitfield1: u8,
    ENLAT: u32,
    EXLAT: u32,
    _bitfield2: u8,
    _bitfield3: u8,
    _bitfield4: u8,
    _bitfield5: u8,
    IDLP: u16,
    _bitfield6: u8,
    Reserved7: u8,
    ACTP: u16,
    _bitfield7: u8,
    Reserved9: [9]u8,
};

const NVME_IDENTIFY_CONTROLLER_DATA = extern struct {
    VID: u16,
    SSVID: u16,
    SN: [20]u8,
    MN: [40]u8,
    FR: [8]u8,
    RAB: u8,
    IEEE: [3]u8,
    CMIC: _CMIC_e__Struct,
    MDTS: u8,
    CNTLID: u16,
    VER: u32,
    RTD3R: u32,
    RTD3E: u32,
    OAES: _OAES_e__Struct,
    CTRATT: _CTRATT_e__Struct,
    RRLS: _RRLS_e__Struct,
    Reserved0: [9]u8,
    CNTRLTYPE: u8,
    FGUID: [16]u8,
    CRDT1: u16,
    CRDT2: u16,
    CRDT3: u16,
    Reserved1: [106]u8,
    ReservedForManagement: [13]u8,
    NVMSR: u8,
    VWCI: u8,
    MEC: u8,
    OACS: _OACS_e__Struct,
    ACL: u8,
    AERL: u8,
    FRMW: _FRMW_e__Struct,
    LPA: _LPA_e__Struct,
    ELPE: u8,
    NPSS: u8,
    AVSCC: _AVSCC_e__Struct,
    APSTA: _APSTA_e__Struct,
    WCTEMP: u16,
    CCTEMP: u16,
    MTFA: u16,
    HMPRE: u32,
    HMMIN: u32,
    TNVMCAP: [16]u8,
    UNVMCAP: [16]u8,
    RPMBS: _RPMBS_e__Struct,
    EDSTT: u16,
    DSTO: u8,
    FWUG: u8,
    KAS: u16,
    HCTMA: _HCTMA_e__Struct,
    MNTMT: u16,
    MXTMT: u16,
    SANICAP: _SANICAP_e__Struct,
    HMMINDS: u32,
    HMMAXD: u16,
    NSETIDMAX: u16,
    ENDGIDMAX: u16,
    ANATT: u8,
    ANACAP: _ANACAP_e__Struct,
    ANAGRPMAX: u32,
    NANAGRPID: u32,
    PELS: u32,
    DomainId: u16,
    Reserved2: [10]u8,
    MEGCAP: [16]u8,
    TMPTHHA: u8,
    Reserved3: u8,
    CQT: u16,
    Reserved4: [124]u8,
    SQES: _SQES_e__Struct,
    CQES: _CQES_e__Struct,
    MAXCMD: u16,
    NN: u32,
    ONCS: _ONCS_e__Struct,
    FUSES: _FUSES_e__Struct,
    FNA: _FNA_e__Struct,
    VWC: _VWC_e__Struct,
    AWUN: u16,
    AWUPF: u16,
    NVSCC: _NVSCC_e__Struct,
    NWPC: _NWPC_e__Struct,
    ACWU: u16,
    CopyDescFormats: u16,
    SGLS: _SGLS_e__Struct,
    MNAN: u32,
    MAXDNA: [16]u8,
    MAXCNA: u32,
    Reserved6: [204]u8,
    SUBNQN: [256]u8,
    Reserved7: [768]u8,
    IOCCSZ: u32,
    IORCSZ: u32,
    ICDOFF: u16,
    FCATT: _FCATT_e__Struct,
    MSDBD: u8,
    OFCS: _OFCS_e__Struct,
    DCTYPE: u8,
    Reserved8: [241]u8,
    PDS: [32]NVME_POWER_STATE_DESC,
    VS: [1024]u8,
};
type
  NVME_POWER_STATE_DESC {.bycopy.} = object
    MP: uint16
    Reserved0: uint8
    _bitfield1: uint8
    ENLAT: uint32
    EXLAT: uint32
    _bitfield2: uint8
    _bitfield3: uint8
    _bitfield4: uint8
    _bitfield5: uint8
    IDLP: uint16
    _bitfield6: uint8
    Reserved7: uint8
    ACTP: uint16
    _bitfield7: uint8
    Reserved9: array[9, uint8]

  NVME_IDENTIFY_CONTROLLER_DATA {.bycopy.} = object
    VID: uint16
    SSVID: uint16
    SN: array[20, uint8]
    MN: array[40, uint8]
    FR: array[8, uint8]
    RAB: uint8
    IEEE: array[3, uint8]
    CMIC: _CMIC_e__Struct
    MDTS: uint8
    CNTLID: uint16
    VER: uint32
    RTD3R: uint32
    RTD3E: uint32
    OAES: _OAES_e__Struct
    CTRATT: _CTRATT_e__Struct
    RRLS: _RRLS_e__Struct
    Reserved0: array[9, uint8]
    CNTRLTYPE: uint8
    FGUID: array[16, uint8]
    CRDT1: uint16
    CRDT2: uint16
    CRDT3: uint16
    Reserved1: array[106, uint8]
    ReservedForManagement: array[13, uint8]
    NVMSR: uint8
    VWCI: uint8
    MEC: uint8
    OACS: _OACS_e__Struct
    ACL: uint8
    AERL: uint8
    FRMW: _FRMW_e__Struct
    LPA: _LPA_e__Struct
    ELPE: uint8
    NPSS: uint8
    AVSCC: _AVSCC_e__Struct
    APSTA: _APSTA_e__Struct
    WCTEMP: uint16
    CCTEMP: uint16
    MTFA: uint16
    HMPRE: uint32
    HMMIN: uint32
    TNVMCAP: array[16, uint8]
    UNVMCAP: array[16, uint8]
    RPMBS: _RPMBS_e__Struct
    EDSTT: uint16
    DSTO: uint8
    FWUG: uint8
    KAS: uint16
    HCTMA: _HCTMA_e__Struct
    MNTMT: uint16
    MXTMT: uint16
    SANICAP: _SANICAP_e__Struct
    HMMINDS: uint32
    HMMAXD: uint16
    NSETIDMAX: uint16
    ENDGIDMAX: uint16
    ANATT: uint8
    ANACAP: _ANACAP_e__Struct
    ANAGRPMAX: uint32
    NANAGRPID: uint32
    PELS: uint32
    DomainId: uint16
    Reserved2: array[10, uint8]
    MEGCAP: array[16, uint8]
    TMPTHHA: uint8
    Reserved3: uint8
    CQT: uint16
    Reserved4: array[124, uint8]
    SQES: _SQES_e__Struct
    CQES: _CQES_e__Struct
    MAXCMD: uint16
    NN: uint32
    ONCS: _ONCS_e__Struct
    FUSES: _FUSES_e__Struct
    FNA: _FNA_e__Struct
    VWC: _VWC_e__Struct
    AWUN: uint16
    AWUPF: uint16
    NVSCC: _NVSCC_e__Struct
    NWPC: _NWPC_e__Struct
    ACWU: uint16
    CopyDescFormats: uint16
    SGLS: _SGLS_e__Struct
    MNAN: uint32
    MAXDNA: array[16, uint8]
    MAXCNA: uint32
    Reserved6: array[204, uint8]
    SUBNQN: array[256, uint8]
    Reserved7: array[768, uint8]
    IOCCSZ: uint32
    IORCSZ: uint32
    ICDOFF: uint16
    FCATT: _FCATT_e__Struct
    MSDBD: uint8
    OFCS: _OFCS_e__Struct
    DCTYPE: uint8
    Reserved8: array[241, uint8]
    PDS: array[32, NVME_POWER_STATE_DESC]
    VS: array[1024, uint8]
struct NVME_POWER_STATE_DESC
{
    ushort MP;
    ubyte Reserved0;
    ubyte _bitfield1;
    uint ENLAT;
    uint EXLAT;
    ubyte _bitfield2;
    ubyte _bitfield3;
    ubyte _bitfield4;
    ubyte _bitfield5;
    ushort IDLP;
    ubyte _bitfield6;
    ubyte Reserved7;
    ushort ACTP;
    ubyte _bitfield7;
    ubyte[9] Reserved9;
}

struct NVME_IDENTIFY_CONTROLLER_DATA
{
    ushort VID;
    ushort SSVID;
    ubyte[20] SN;
    ubyte[40] MN;
    ubyte[8] FR;
    ubyte RAB;
    ubyte[3] IEEE;
    _CMIC_e__Struct CMIC;
    ubyte MDTS;
    ushort CNTLID;
    uint VER;
    uint RTD3R;
    uint RTD3E;
    _OAES_e__Struct OAES;
    _CTRATT_e__Struct CTRATT;
    _RRLS_e__Struct RRLS;
    ubyte[9] Reserved0;
    ubyte CNTRLTYPE;
    ubyte[16] FGUID;
    ushort CRDT1;
    ushort CRDT2;
    ushort CRDT3;
    ubyte[106] Reserved1;
    ubyte[13] ReservedForManagement;
    ubyte NVMSR;
    ubyte VWCI;
    ubyte MEC;
    _OACS_e__Struct OACS;
    ubyte ACL;
    ubyte AERL;
    _FRMW_e__Struct FRMW;
    _LPA_e__Struct LPA;
    ubyte ELPE;
    ubyte NPSS;
    _AVSCC_e__Struct AVSCC;
    _APSTA_e__Struct APSTA;
    ushort WCTEMP;
    ushort CCTEMP;
    ushort MTFA;
    uint HMPRE;
    uint HMMIN;
    ubyte[16] TNVMCAP;
    ubyte[16] UNVMCAP;
    _RPMBS_e__Struct RPMBS;
    ushort EDSTT;
    ubyte DSTO;
    ubyte FWUG;
    ushort KAS;
    _HCTMA_e__Struct HCTMA;
    ushort MNTMT;
    ushort MXTMT;
    _SANICAP_e__Struct SANICAP;
    uint HMMINDS;
    ushort HMMAXD;
    ushort NSETIDMAX;
    ushort ENDGIDMAX;
    ubyte ANATT;
    _ANACAP_e__Struct ANACAP;
    uint ANAGRPMAX;
    uint NANAGRPID;
    uint PELS;
    ushort DomainId;
    ubyte[10] Reserved2;
    ubyte[16] MEGCAP;
    ubyte TMPTHHA;
    ubyte Reserved3;
    ushort CQT;
    ubyte[124] Reserved4;
    _SQES_e__Struct SQES;
    _CQES_e__Struct CQES;
    ushort MAXCMD;
    uint NN;
    _ONCS_e__Struct ONCS;
    _FUSES_e__Struct FUSES;
    _FNA_e__Struct FNA;
    _VWC_e__Struct VWC;
    ushort AWUN;
    ushort AWUPF;
    _NVSCC_e__Struct NVSCC;
    _NWPC_e__Struct NWPC;
    ushort ACWU;
    ushort CopyDescFormats;
    _SGLS_e__Struct SGLS;
    uint MNAN;
    ubyte[16] MAXDNA;
    uint MAXCNA;
    ubyte[204] Reserved6;
    ubyte[256] SUBNQN;
    ubyte[768] Reserved7;
    uint IOCCSZ;
    uint IORCSZ;
    ushort ICDOFF;
    _FCATT_e__Struct FCATT;
    ubyte MSDBD;
    _OFCS_e__Struct OFCS;
    ubyte DCTYPE;
    ubyte[241] Reserved8;
    NVME_POWER_STATE_DESC[32] PDS;
    ubyte[1024] VS;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NVME_IDENTIFY_CONTROLLER_DATA サイズ: 4096 バイト(x64)
dim st, 1024    ; 4byte整数×1024(構造体サイズ 4096 / 4 切り上げ)
; VID : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; SSVID : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; SN : BYTE (+4, 20byte)  varptr(st)+4 を基点に操作(20byte:入れ子/配列)
; MN : BYTE (+24, 40byte)  varptr(st)+24 を基点に操作(40byte:入れ子/配列)
; FR : BYTE (+64, 8byte)  varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; RAB : BYTE (+72, 1byte)  poke st,72,値  /  値 = peek(st,72)
; IEEE : BYTE (+73, 3byte)  varptr(st)+73 を基点に操作(3byte:入れ子/配列)
; CMIC : _CMIC_e__Struct (+76, 1byte)  varptr(st)+76 を基点に操作(1byte:入れ子/配列)
; MDTS : BYTE (+77, 1byte)  poke st,77,値  /  値 = peek(st,77)
; CNTLID : WORD (+78, 2byte)  wpoke st,78,値  /  値 = wpeek(st,78)
; VER : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; RTD3R : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; RTD3E : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; OAES : _OAES_e__Struct (+92, 4byte)  varptr(st)+92 を基点に操作(4byte:入れ子/配列)
; CTRATT : _CTRATT_e__Struct (+96, 4byte)  varptr(st)+96 を基点に操作(4byte:入れ子/配列)
; RRLS : _RRLS_e__Struct (+100, 2byte)  varptr(st)+100 を基点に操作(2byte:入れ子/配列)
; Reserved0 : BYTE (+102, 9byte)  varptr(st)+102 を基点に操作(9byte:入れ子/配列)
; CNTRLTYPE : BYTE (+111, 1byte)  poke st,111,値  /  値 = peek(st,111)
; FGUID : BYTE (+112, 16byte)  varptr(st)+112 を基点に操作(16byte:入れ子/配列)
; CRDT1 : WORD (+128, 2byte)  wpoke st,128,値  /  値 = wpeek(st,128)
; CRDT2 : WORD (+130, 2byte)  wpoke st,130,値  /  値 = wpeek(st,130)
; CRDT3 : WORD (+132, 2byte)  wpoke st,132,値  /  値 = wpeek(st,132)
; Reserved1 : BYTE (+134, 106byte)  varptr(st)+134 を基点に操作(106byte:入れ子/配列)
; ReservedForManagement : BYTE (+240, 13byte)  varptr(st)+240 を基点に操作(13byte:入れ子/配列)
; NVMSR : BYTE (+253, 1byte)  poke st,253,値  /  値 = peek(st,253)
; VWCI : BYTE (+254, 1byte)  poke st,254,値  /  値 = peek(st,254)
; MEC : BYTE (+255, 1byte)  poke st,255,値  /  値 = peek(st,255)
; OACS : _OACS_e__Struct (+256, 2byte)  varptr(st)+256 を基点に操作(2byte:入れ子/配列)
; ACL : BYTE (+258, 1byte)  poke st,258,値  /  値 = peek(st,258)
; AERL : BYTE (+259, 1byte)  poke st,259,値  /  値 = peek(st,259)
; FRMW : _FRMW_e__Struct (+260, 1byte)  varptr(st)+260 を基点に操作(1byte:入れ子/配列)
; LPA : _LPA_e__Struct (+261, 1byte)  varptr(st)+261 を基点に操作(1byte:入れ子/配列)
; ELPE : BYTE (+262, 1byte)  poke st,262,値  /  値 = peek(st,262)
; NPSS : BYTE (+263, 1byte)  poke st,263,値  /  値 = peek(st,263)
; AVSCC : _AVSCC_e__Struct (+264, 1byte)  varptr(st)+264 を基点に操作(1byte:入れ子/配列)
; APSTA : _APSTA_e__Struct (+265, 1byte)  varptr(st)+265 を基点に操作(1byte:入れ子/配列)
; WCTEMP : WORD (+266, 2byte)  wpoke st,266,値  /  値 = wpeek(st,266)
; CCTEMP : WORD (+268, 2byte)  wpoke st,268,値  /  値 = wpeek(st,268)
; MTFA : WORD (+270, 2byte)  wpoke st,270,値  /  値 = wpeek(st,270)
; HMPRE : DWORD (+272, 4byte)  st.68 = 値  /  値 = st.68   (lpoke/lpeek も可)
; HMMIN : DWORD (+276, 4byte)  st.69 = 値  /  値 = st.69   (lpoke/lpeek も可)
; TNVMCAP : BYTE (+280, 16byte)  varptr(st)+280 を基点に操作(16byte:入れ子/配列)
; UNVMCAP : BYTE (+296, 16byte)  varptr(st)+296 を基点に操作(16byte:入れ子/配列)
; RPMBS : _RPMBS_e__Struct (+312, 4byte)  varptr(st)+312 を基点に操作(4byte:入れ子/配列)
; EDSTT : WORD (+316, 2byte)  wpoke st,316,値  /  値 = wpeek(st,316)
; DSTO : BYTE (+318, 1byte)  poke st,318,値  /  値 = peek(st,318)
; FWUG : BYTE (+319, 1byte)  poke st,319,値  /  値 = peek(st,319)
; KAS : WORD (+320, 2byte)  wpoke st,320,値  /  値 = wpeek(st,320)
; HCTMA : _HCTMA_e__Struct (+322, 2byte)  varptr(st)+322 を基点に操作(2byte:入れ子/配列)
; MNTMT : WORD (+324, 2byte)  wpoke st,324,値  /  値 = wpeek(st,324)
; MXTMT : WORD (+326, 2byte)  wpoke st,326,値  /  値 = wpeek(st,326)
; SANICAP : _SANICAP_e__Struct (+328, 4byte)  varptr(st)+328 を基点に操作(4byte:入れ子/配列)
; HMMINDS : DWORD (+332, 4byte)  st.83 = 値  /  値 = st.83   (lpoke/lpeek も可)
; HMMAXD : WORD (+336, 2byte)  wpoke st,336,値  /  値 = wpeek(st,336)
; NSETIDMAX : WORD (+338, 2byte)  wpoke st,338,値  /  値 = wpeek(st,338)
; ENDGIDMAX : WORD (+340, 2byte)  wpoke st,340,値  /  値 = wpeek(st,340)
; ANATT : BYTE (+342, 1byte)  poke st,342,値  /  値 = peek(st,342)
; ANACAP : _ANACAP_e__Struct (+343, 1byte)  varptr(st)+343 を基点に操作(1byte:入れ子/配列)
; ANAGRPMAX : DWORD (+344, 4byte)  st.86 = 値  /  値 = st.86   (lpoke/lpeek も可)
; NANAGRPID : DWORD (+348, 4byte)  st.87 = 値  /  値 = st.87   (lpoke/lpeek も可)
; PELS : DWORD (+352, 4byte)  st.88 = 値  /  値 = st.88   (lpoke/lpeek も可)
; DomainId : WORD (+356, 2byte)  wpoke st,356,値  /  値 = wpeek(st,356)
; Reserved2 : BYTE (+358, 10byte)  varptr(st)+358 を基点に操作(10byte:入れ子/配列)
; MEGCAP : BYTE (+368, 16byte)  varptr(st)+368 を基点に操作(16byte:入れ子/配列)
; TMPTHHA : BYTE (+384, 1byte)  poke st,384,値  /  値 = peek(st,384)
; Reserved3 : BYTE (+385, 1byte)  poke st,385,値  /  値 = peek(st,385)
; CQT : WORD (+386, 2byte)  wpoke st,386,値  /  値 = wpeek(st,386)
; Reserved4 : BYTE (+388, 124byte)  varptr(st)+388 を基点に操作(124byte:入れ子/配列)
; SQES : _SQES_e__Struct (+512, 1byte)  varptr(st)+512 を基点に操作(1byte:入れ子/配列)
; CQES : _CQES_e__Struct (+513, 1byte)  varptr(st)+513 を基点に操作(1byte:入れ子/配列)
; MAXCMD : WORD (+514, 2byte)  wpoke st,514,値  /  値 = wpeek(st,514)
; NN : DWORD (+516, 4byte)  st.129 = 値  /  値 = st.129   (lpoke/lpeek も可)
; ONCS : _ONCS_e__Struct (+520, 2byte)  varptr(st)+520 を基点に操作(2byte:入れ子/配列)
; FUSES : _FUSES_e__Struct (+522, 2byte)  varptr(st)+522 を基点に操作(2byte:入れ子/配列)
; FNA : _FNA_e__Struct (+524, 1byte)  varptr(st)+524 を基点に操作(1byte:入れ子/配列)
; VWC : _VWC_e__Struct (+525, 1byte)  varptr(st)+525 を基点に操作(1byte:入れ子/配列)
; AWUN : WORD (+526, 2byte)  wpoke st,526,値  /  値 = wpeek(st,526)
; AWUPF : WORD (+528, 2byte)  wpoke st,528,値  /  値 = wpeek(st,528)
; NVSCC : _NVSCC_e__Struct (+530, 1byte)  varptr(st)+530 を基点に操作(1byte:入れ子/配列)
; NWPC : _NWPC_e__Struct (+531, 1byte)  varptr(st)+531 を基点に操作(1byte:入れ子/配列)
; ACWU : WORD (+532, 2byte)  wpoke st,532,値  /  値 = wpeek(st,532)
; CopyDescFormats : WORD (+534, 2byte)  wpoke st,534,値  /  値 = wpeek(st,534)
; SGLS : _SGLS_e__Struct (+536, 4byte)  varptr(st)+536 を基点に操作(4byte:入れ子/配列)
; MNAN : DWORD (+540, 4byte)  st.135 = 値  /  値 = st.135   (lpoke/lpeek も可)
; MAXDNA : BYTE (+544, 16byte)  varptr(st)+544 を基点に操作(16byte:入れ子/配列)
; MAXCNA : DWORD (+560, 4byte)  st.140 = 値  /  値 = st.140   (lpoke/lpeek も可)
; Reserved6 : BYTE (+564, 204byte)  varptr(st)+564 を基点に操作(204byte:入れ子/配列)
; SUBNQN : BYTE (+768, 256byte)  varptr(st)+768 を基点に操作(256byte:入れ子/配列)
; Reserved7 : BYTE (+1024, 768byte)  varptr(st)+1024 を基点に操作(768byte:入れ子/配列)
; IOCCSZ : DWORD (+1792, 4byte)  st.448 = 値  /  値 = st.448   (lpoke/lpeek も可)
; IORCSZ : DWORD (+1796, 4byte)  st.449 = 値  /  値 = st.449   (lpoke/lpeek も可)
; ICDOFF : WORD (+1800, 2byte)  wpoke st,1800,値  /  値 = wpeek(st,1800)
; FCATT : _FCATT_e__Struct (+1802, 1byte)  varptr(st)+1802 を基点に操作(1byte:入れ子/配列)
; MSDBD : BYTE (+1803, 1byte)  poke st,1803,値  /  値 = peek(st,1803)
; OFCS : _OFCS_e__Struct (+1804, 2byte)  varptr(st)+1804 を基点に操作(2byte:入れ子/配列)
; DCTYPE : BYTE (+1806, 1byte)  poke st,1806,値  /  値 = peek(st,1806)
; Reserved8 : BYTE (+1807, 241byte)  varptr(st)+1807 を基点に操作(241byte:入れ子/配列)
; PDS : NVME_POWER_STATE_DESC (+2048, 1024byte)  varptr(st)+2048 を基点に操作(1024byte:入れ子/配列)
; VS : BYTE (+3072, 1024byte)  varptr(st)+3072 を基点に操作(1024byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global NVME_POWER_STATE_DESC
    #field short MP
    #field byte Reserved0
    #field byte _bitfield1
    #field int ENLAT
    #field int EXLAT
    #field byte _bitfield2
    #field byte _bitfield3
    #field byte _bitfield4
    #field byte _bitfield5
    #field short IDLP
    #field byte _bitfield6
    #field byte Reserved7
    #field short ACTP
    #field byte _bitfield7
    #field byte Reserved9 9
#endstruct

#defstruct global NVME_IDENTIFY_CONTROLLER_DATA
    #field short VID
    #field short SSVID
    #field byte SN 20
    #field byte MN 40
    #field byte FR 8
    #field byte RAB
    #field byte IEEE 3
    #field _CMIC_e__Struct CMIC
    #field byte MDTS
    #field short CNTLID
    #field int VER
    #field int RTD3R
    #field int RTD3E
    #field _OAES_e__Struct OAES
    #field _CTRATT_e__Struct CTRATT
    #field _RRLS_e__Struct RRLS
    #field byte Reserved0 9
    #field byte CNTRLTYPE
    #field byte FGUID 16
    #field short CRDT1
    #field short CRDT2
    #field short CRDT3
    #field byte Reserved1 106
    #field byte ReservedForManagement 13
    #field byte NVMSR
    #field byte VWCI
    #field byte MEC
    #field _OACS_e__Struct OACS
    #field byte ACL
    #field byte AERL
    #field _FRMW_e__Struct FRMW
    #field _LPA_e__Struct LPA
    #field byte ELPE
    #field byte NPSS
    #field _AVSCC_e__Struct AVSCC
    #field _APSTA_e__Struct APSTA
    #field short WCTEMP
    #field short CCTEMP
    #field short MTFA
    #field int HMPRE
    #field int HMMIN
    #field byte TNVMCAP 16
    #field byte UNVMCAP 16
    #field _RPMBS_e__Struct RPMBS
    #field short EDSTT
    #field byte DSTO
    #field byte FWUG
    #field short KAS
    #field _HCTMA_e__Struct HCTMA
    #field short MNTMT
    #field short MXTMT
    #field _SANICAP_e__Struct SANICAP
    #field int HMMINDS
    #field short HMMAXD
    #field short NSETIDMAX
    #field short ENDGIDMAX
    #field byte ANATT
    #field _ANACAP_e__Struct ANACAP
    #field int ANAGRPMAX
    #field int NANAGRPID
    #field int PELS
    #field short DomainId
    #field byte Reserved2 10
    #field byte MEGCAP 16
    #field byte TMPTHHA
    #field byte Reserved3
    #field short CQT
    #field byte Reserved4 124
    #field _SQES_e__Struct SQES
    #field _CQES_e__Struct CQES
    #field short MAXCMD
    #field int NN
    #field _ONCS_e__Struct ONCS
    #field _FUSES_e__Struct FUSES
    #field _FNA_e__Struct FNA
    #field _VWC_e__Struct VWC
    #field short AWUN
    #field short AWUPF
    #field _NVSCC_e__Struct NVSCC
    #field _NWPC_e__Struct NWPC
    #field short ACWU
    #field short CopyDescFormats
    #field _SGLS_e__Struct SGLS
    #field int MNAN
    #field byte MAXDNA 16
    #field int MAXCNA
    #field byte Reserved6 204
    #field byte SUBNQN 256
    #field byte Reserved7 768
    #field int IOCCSZ
    #field int IORCSZ
    #field short ICDOFF
    #field _FCATT_e__Struct FCATT
    #field byte MSDBD
    #field _OFCS_e__Struct OFCS
    #field byte DCTYPE
    #field byte Reserved8 241
    #field NVME_POWER_STATE_DESC PDS 32
    #field byte VS 1024
#endstruct

stdim st, NVME_IDENTIFY_CONTROLLER_DATA        ; NSTRUCT 変数を確保
st->VID = 100
mes "VID=" + st->VID