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

NVME_IDENTIFY_NAMESPACE_DATA

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

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

フィールド

フィールドサイズx64x86説明
NSZEULONGLONG8+0+0ネームスペースのサイズ(論理ブロック数)。
NCAPULONGLONG8+8+8ネームスペースの容量(割り当て可能な論理ブロック数)。
NUSEULONGLONG8+16+16ネームスペースで現在使用中の論理ブロック数。
NSFEAT_NSFEAT_e__Struct1+24+24ネームスペースの機能フラグ(シンプロビジョニング等)を表す構造体。
NLBAFBYTE1+25+25サポートするLBAフォーマット数から1を引いた値。
FLBAS_FLBAS_e__Struct1+26+26現在使用中のLBAフォーマットおよびメタデータ配置を示す構造体。
MC_MC_e__Struct1+27+27メタデータ機能(分離/拡張LBA)の対応を示す構造体。
DPC_DPC_e__Struct1+28+28エンドツーエンドデータ保護機能の対応を示す構造体。
DPS_DPS_e__Struct1+29+29現在のデータ保護設定(保護種別・位置)を示す構造体。
NMIC_NMIC_e__Struct1+30+30マルチパス/共有(マルチコントローラ)機能を示す構造体。
RESCAPNVM_RESERVATION_CAPABILITIES1+31+31予約機能の対応種別を示すNVM_RESERVATION_CAPABILITIES。
FPI_FPI_e__Struct1+32+32フォーマット進捗インジケータ(残り割合等)を示す構造体。
DLFEAT_DLFEAT_e__Struct1+33+33デアロケート(TRIM)後の読み出し動作を示す構造体。
NAWUNWORD2+34+34ネームスペース単位のアトミック書き込みユニット(通常)。
NAWUPFWORD2+36+36ネームスペース単位のアトミック書き込みユニット(電源断時)。
NACWUWORD2+38+38ネームスペース単位のアトミック比較書き込みユニット。
NABSNWORD2+40+40アトミック境界サイズ(通常)。
NABOWORD2+42+42アトミック境界オフセット。
NABSPFWORD2+44+44アトミック境界サイズ(電源断時)。
NOIOBWORD2+46+46最適なI/O境界(論理ブロック数)。
NVMCAPBYTE16+48+48ネームスペースのNVM容量(バイト、128ビット)。
NPWGWORD2+64+64推奨書き込み粒度(論理ブロック数)。
NPWAWORD2+66+66推奨書き込みアラインメント(論理ブロック数)。
NPDGWORD2+68+68推奨デアロケート粒度(論理ブロック数)。
NPDAWORD2+70+70推奨デアロケートアラインメント(論理ブロック数)。
NOWSWORD2+72+72最適書き込みサイズ(論理ブロック数)。
MSSRLWORD2+74+74コピーコマンド1ソースあたりの最大ソース範囲長。
MCLDWORD4+76+76コピーコマンドの最大コピー長。
MSRCBYTE1+80+80コピーコマンドの最大ソース範囲数から1を引いた値。
Reserved2BYTE11+81+81予約領域。未使用。
ANAGRPIDDWORD4+92+92このネームスペースが属するANAグループの識別子。
Reserved3BYTE3+96+96予約領域。未使用。
NSATTR_NSATTR_e__Struct1+99+99ネームスペース属性(書き込み保護等)を示す構造体。
NVMSETIDWORD2+100+100このネームスペースが属するNVMセットの識別子。
ENDGIDWORD2+102+102このネームスペースが属するエンデュアランスグループの識別子。
NGUIDBYTE16+104+104ネームスペースのグローバル一意識別子(16バイト)。
EUI64BYTE8+120+120IEEE拡張一意識別子(8バイト)。
LBAFNVME_LBA_FORMAT256+128+128サポートする各LBAフォーマット記述子を並べたNVME_LBA_FORMAT配列。
VSBYTE3712+384+384ベンダ固有領域を表す固定長バイト配列。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

各言語での定義

#include <windows.h>

// NVM_RESERVATION_CAPABILITIES  (x64 1 / x86 1 バイト)
typedef struct NVM_RESERVATION_CAPABILITIES {
    _Anonymous_e__Struct Anonymous;
    BYTE AsUchar;
} NVM_RESERVATION_CAPABILITIES;

// NVME_LBA_FORMAT  (x64 4 / x86 4 バイト)
typedef struct NVME_LBA_FORMAT {
    _Anonymous_e__Struct Anonymous;
    DWORD AsUlong;
} NVME_LBA_FORMAT;

// NVME_IDENTIFY_NAMESPACE_DATA  (x64 4096 / x86 4096 バイト)
typedef struct NVME_IDENTIFY_NAMESPACE_DATA {
    ULONGLONG NSZE;
    ULONGLONG NCAP;
    ULONGLONG NUSE;
    _NSFEAT_e__Struct NSFEAT;
    BYTE NLBAF;
    _FLBAS_e__Struct FLBAS;
    _MC_e__Struct MC;
    _DPC_e__Struct DPC;
    _DPS_e__Struct DPS;
    _NMIC_e__Struct NMIC;
    NVM_RESERVATION_CAPABILITIES RESCAP;
    _FPI_e__Struct FPI;
    _DLFEAT_e__Struct DLFEAT;
    WORD NAWUN;
    WORD NAWUPF;
    WORD NACWU;
    WORD NABSN;
    WORD NABO;
    WORD NABSPF;
    WORD NOIOB;
    BYTE NVMCAP[16];
    WORD NPWG;
    WORD NPWA;
    WORD NPDG;
    WORD NPDA;
    WORD NOWS;
    WORD MSSRL;
    DWORD MCL;
    BYTE MSRC;
    BYTE Reserved2[11];
    DWORD ANAGRPID;
    BYTE Reserved3[3];
    _NSATTR_e__Struct NSATTR;
    WORD NVMSETID;
    WORD ENDGID;
    BYTE NGUID[16];
    BYTE EUI64[8];
    NVME_LBA_FORMAT LBAF[64];
    BYTE VS[3712];
} NVME_IDENTIFY_NAMESPACE_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NVM_RESERVATION_CAPABILITIES
{
    public _Anonymous_e__Struct Anonymous;
    public byte AsUchar;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NVME_LBA_FORMAT
{
    public _Anonymous_e__Struct Anonymous;
    public uint AsUlong;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NVME_IDENTIFY_NAMESPACE_DATA
{
    public ulong NSZE;
    public ulong NCAP;
    public ulong NUSE;
    public _NSFEAT_e__Struct NSFEAT;
    public byte NLBAF;
    public _FLBAS_e__Struct FLBAS;
    public _MC_e__Struct MC;
    public _DPC_e__Struct DPC;
    public _DPS_e__Struct DPS;
    public _NMIC_e__Struct NMIC;
    public NVM_RESERVATION_CAPABILITIES RESCAP;
    public _FPI_e__Struct FPI;
    public _DLFEAT_e__Struct DLFEAT;
    public ushort NAWUN;
    public ushort NAWUPF;
    public ushort NACWU;
    public ushort NABSN;
    public ushort NABO;
    public ushort NABSPF;
    public ushort NOIOB;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] NVMCAP;
    public ushort NPWG;
    public ushort NPWA;
    public ushort NPDG;
    public ushort NPDA;
    public ushort NOWS;
    public ushort MSSRL;
    public uint MCL;
    public byte MSRC;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)] public byte[] Reserved2;
    public uint ANAGRPID;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] Reserved3;
    public _NSATTR_e__Struct NSATTR;
    public ushort NVMSETID;
    public ushort ENDGID;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] NGUID;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] EUI64;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public NVME_LBA_FORMAT[] LBAF;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3712)] public byte[] VS;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NVM_RESERVATION_CAPABILITIES
    Public Anonymous As _Anonymous_e__Struct
    Public AsUchar As Byte
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NVME_LBA_FORMAT
    Public Anonymous As _Anonymous_e__Struct
    Public AsUlong As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NVME_IDENTIFY_NAMESPACE_DATA
    Public NSZE As ULong
    Public NCAP As ULong
    Public NUSE As ULong
    Public NSFEAT As _NSFEAT_e__Struct
    Public NLBAF As Byte
    Public FLBAS As _FLBAS_e__Struct
    Public MC As _MC_e__Struct
    Public DPC As _DPC_e__Struct
    Public DPS As _DPS_e__Struct
    Public NMIC As _NMIC_e__Struct
    Public RESCAP As NVM_RESERVATION_CAPABILITIES
    Public FPI As _FPI_e__Struct
    Public DLFEAT As _DLFEAT_e__Struct
    Public NAWUN As UShort
    Public NAWUPF As UShort
    Public NACWU As UShort
    Public NABSN As UShort
    Public NABO As UShort
    Public NABSPF As UShort
    Public NOIOB As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public NVMCAP() As Byte
    Public NPWG As UShort
    Public NPWA As UShort
    Public NPDG As UShort
    Public NPDA As UShort
    Public NOWS As UShort
    Public MSSRL As UShort
    Public MCL As UInteger
    Public MSRC As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=11)> Public Reserved2() As Byte
    Public ANAGRPID As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public Reserved3() As Byte
    Public NSATTR As _NSATTR_e__Struct
    Public NVMSETID As UShort
    Public ENDGID As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public NGUID() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public EUI64() As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> Public LBAF() As NVME_LBA_FORMAT
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3712)> Public VS() As Byte
End Structure
import ctypes
from ctypes import wintypes

class NVM_RESERVATION_CAPABILITIES(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUchar", ctypes.c_ubyte),
    ]

class NVME_LBA_FORMAT(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUlong", wintypes.DWORD),
    ]

class NVME_IDENTIFY_NAMESPACE_DATA(ctypes.Structure):
    _fields_ = [
        ("NSZE", ctypes.c_ulonglong),
        ("NCAP", ctypes.c_ulonglong),
        ("NUSE", ctypes.c_ulonglong),
        ("NSFEAT", _NSFEAT_e__Struct),
        ("NLBAF", ctypes.c_ubyte),
        ("FLBAS", _FLBAS_e__Struct),
        ("MC", _MC_e__Struct),
        ("DPC", _DPC_e__Struct),
        ("DPS", _DPS_e__Struct),
        ("NMIC", _NMIC_e__Struct),
        ("RESCAP", NVM_RESERVATION_CAPABILITIES),
        ("FPI", _FPI_e__Struct),
        ("DLFEAT", _DLFEAT_e__Struct),
        ("NAWUN", ctypes.c_ushort),
        ("NAWUPF", ctypes.c_ushort),
        ("NACWU", ctypes.c_ushort),
        ("NABSN", ctypes.c_ushort),
        ("NABO", ctypes.c_ushort),
        ("NABSPF", ctypes.c_ushort),
        ("NOIOB", ctypes.c_ushort),
        ("NVMCAP", ctypes.c_ubyte * 16),
        ("NPWG", ctypes.c_ushort),
        ("NPWA", ctypes.c_ushort),
        ("NPDG", ctypes.c_ushort),
        ("NPDA", ctypes.c_ushort),
        ("NOWS", ctypes.c_ushort),
        ("MSSRL", ctypes.c_ushort),
        ("MCL", wintypes.DWORD),
        ("MSRC", ctypes.c_ubyte),
        ("Reserved2", ctypes.c_ubyte * 11),
        ("ANAGRPID", wintypes.DWORD),
        ("Reserved3", ctypes.c_ubyte * 3),
        ("NSATTR", _NSATTR_e__Struct),
        ("NVMSETID", ctypes.c_ushort),
        ("ENDGID", ctypes.c_ushort),
        ("NGUID", ctypes.c_ubyte * 16),
        ("EUI64", ctypes.c_ubyte * 8),
        ("LBAF", NVME_LBA_FORMAT * 64),
        ("VS", ctypes.c_ubyte * 3712),
    ]
#[repr(C)]
pub struct NVM_RESERVATION_CAPABILITIES {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUchar: u8,
}

#[repr(C)]
pub struct NVME_LBA_FORMAT {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUlong: u32,
}

#[repr(C)]
pub struct NVME_IDENTIFY_NAMESPACE_DATA {
    pub NSZE: u64,
    pub NCAP: u64,
    pub NUSE: u64,
    pub NSFEAT: _NSFEAT_e__Struct,
    pub NLBAF: u8,
    pub FLBAS: _FLBAS_e__Struct,
    pub MC: _MC_e__Struct,
    pub DPC: _DPC_e__Struct,
    pub DPS: _DPS_e__Struct,
    pub NMIC: _NMIC_e__Struct,
    pub RESCAP: NVM_RESERVATION_CAPABILITIES,
    pub FPI: _FPI_e__Struct,
    pub DLFEAT: _DLFEAT_e__Struct,
    pub NAWUN: u16,
    pub NAWUPF: u16,
    pub NACWU: u16,
    pub NABSN: u16,
    pub NABO: u16,
    pub NABSPF: u16,
    pub NOIOB: u16,
    pub NVMCAP: [u8; 16],
    pub NPWG: u16,
    pub NPWA: u16,
    pub NPDG: u16,
    pub NPDA: u16,
    pub NOWS: u16,
    pub MSSRL: u16,
    pub MCL: u32,
    pub MSRC: u8,
    pub Reserved2: [u8; 11],
    pub ANAGRPID: u32,
    pub Reserved3: [u8; 3],
    pub NSATTR: _NSATTR_e__Struct,
    pub NVMSETID: u16,
    pub ENDGID: u16,
    pub NGUID: [u8; 16],
    pub EUI64: [u8; 8],
    pub LBAF: [NVME_LBA_FORMAT; 64],
    pub VS: [u8; 3712],
}
import "golang.org/x/sys/windows"

type NVM_RESERVATION_CAPABILITIES struct {
	Anonymous _Anonymous_e__Struct
	AsUchar byte
}

type NVME_LBA_FORMAT struct {
	Anonymous _Anonymous_e__Struct
	AsUlong uint32
}

type NVME_IDENTIFY_NAMESPACE_DATA struct {
	NSZE uint64
	NCAP uint64
	NUSE uint64
	NSFEAT _NSFEAT_e__Struct
	NLBAF byte
	FLBAS _FLBAS_e__Struct
	MC _MC_e__Struct
	DPC _DPC_e__Struct
	DPS _DPS_e__Struct
	NMIC _NMIC_e__Struct
	RESCAP NVM_RESERVATION_CAPABILITIES
	FPI _FPI_e__Struct
	DLFEAT _DLFEAT_e__Struct
	NAWUN uint16
	NAWUPF uint16
	NACWU uint16
	NABSN uint16
	NABO uint16
	NABSPF uint16
	NOIOB uint16
	NVMCAP [16]byte
	NPWG uint16
	NPWA uint16
	NPDG uint16
	NPDA uint16
	NOWS uint16
	MSSRL uint16
	MCL uint32
	MSRC byte
	Reserved2 [11]byte
	ANAGRPID uint32
	Reserved3 [3]byte
	NSATTR _NSATTR_e__Struct
	NVMSETID uint16
	ENDGID uint16
	NGUID [16]byte
	EUI64 [8]byte
	LBAF [64]NVME_LBA_FORMAT
	VS [3712]byte
}
type
  NVM_RESERVATION_CAPABILITIES = record
    Anonymous: _Anonymous_e__Struct;
    AsUchar: Byte;
  end;

  NVME_LBA_FORMAT = record
    Anonymous: _Anonymous_e__Struct;
    AsUlong: DWORD;
  end;

  NVME_IDENTIFY_NAMESPACE_DATA = record
    NSZE: UInt64;
    NCAP: UInt64;
    NUSE: UInt64;
    NSFEAT: _NSFEAT_e__Struct;
    NLBAF: Byte;
    FLBAS: _FLBAS_e__Struct;
    MC: _MC_e__Struct;
    DPC: _DPC_e__Struct;
    DPS: _DPS_e__Struct;
    NMIC: _NMIC_e__Struct;
    RESCAP: NVM_RESERVATION_CAPABILITIES;
    FPI: _FPI_e__Struct;
    DLFEAT: _DLFEAT_e__Struct;
    NAWUN: Word;
    NAWUPF: Word;
    NACWU: Word;
    NABSN: Word;
    NABO: Word;
    NABSPF: Word;
    NOIOB: Word;
    NVMCAP: array[0..15] of Byte;
    NPWG: Word;
    NPWA: Word;
    NPDG: Word;
    NPDA: Word;
    NOWS: Word;
    MSSRL: Word;
    MCL: DWORD;
    MSRC: Byte;
    Reserved2: array[0..10] of Byte;
    ANAGRPID: DWORD;
    Reserved3: array[0..2] of Byte;
    NSATTR: _NSATTR_e__Struct;
    NVMSETID: Word;
    ENDGID: Word;
    NGUID: array[0..15] of Byte;
    EUI64: array[0..7] of Byte;
    LBAF: array[0..63] of NVME_LBA_FORMAT;
    VS: array[0..3711] of Byte;
  end;
const NVM_RESERVATION_CAPABILITIES = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUchar: u8,
};

const NVME_LBA_FORMAT = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUlong: u32,
};

const NVME_IDENTIFY_NAMESPACE_DATA = extern struct {
    NSZE: u64,
    NCAP: u64,
    NUSE: u64,
    NSFEAT: _NSFEAT_e__Struct,
    NLBAF: u8,
    FLBAS: _FLBAS_e__Struct,
    MC: _MC_e__Struct,
    DPC: _DPC_e__Struct,
    DPS: _DPS_e__Struct,
    NMIC: _NMIC_e__Struct,
    RESCAP: NVM_RESERVATION_CAPABILITIES,
    FPI: _FPI_e__Struct,
    DLFEAT: _DLFEAT_e__Struct,
    NAWUN: u16,
    NAWUPF: u16,
    NACWU: u16,
    NABSN: u16,
    NABO: u16,
    NABSPF: u16,
    NOIOB: u16,
    NVMCAP: [16]u8,
    NPWG: u16,
    NPWA: u16,
    NPDG: u16,
    NPDA: u16,
    NOWS: u16,
    MSSRL: u16,
    MCL: u32,
    MSRC: u8,
    Reserved2: [11]u8,
    ANAGRPID: u32,
    Reserved3: [3]u8,
    NSATTR: _NSATTR_e__Struct,
    NVMSETID: u16,
    ENDGID: u16,
    NGUID: [16]u8,
    EUI64: [8]u8,
    LBAF: [64]NVME_LBA_FORMAT,
    VS: [3712]u8,
};
type
  NVM_RESERVATION_CAPABILITIES {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUchar: uint8

  NVME_LBA_FORMAT {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUlong: uint32

  NVME_IDENTIFY_NAMESPACE_DATA {.bycopy.} = object
    NSZE: uint64
    NCAP: uint64
    NUSE: uint64
    NSFEAT: _NSFEAT_e__Struct
    NLBAF: uint8
    FLBAS: _FLBAS_e__Struct
    MC: _MC_e__Struct
    DPC: _DPC_e__Struct
    DPS: _DPS_e__Struct
    NMIC: _NMIC_e__Struct
    RESCAP: NVM_RESERVATION_CAPABILITIES
    FPI: _FPI_e__Struct
    DLFEAT: _DLFEAT_e__Struct
    NAWUN: uint16
    NAWUPF: uint16
    NACWU: uint16
    NABSN: uint16
    NABO: uint16
    NABSPF: uint16
    NOIOB: uint16
    NVMCAP: array[16, uint8]
    NPWG: uint16
    NPWA: uint16
    NPDG: uint16
    NPDA: uint16
    NOWS: uint16
    MSSRL: uint16
    MCL: uint32
    MSRC: uint8
    Reserved2: array[11, uint8]
    ANAGRPID: uint32
    Reserved3: array[3, uint8]
    NSATTR: _NSATTR_e__Struct
    NVMSETID: uint16
    ENDGID: uint16
    NGUID: array[16, uint8]
    EUI64: array[8, uint8]
    LBAF: array[64, NVME_LBA_FORMAT]
    VS: array[3712, uint8]
struct NVM_RESERVATION_CAPABILITIES
{
    _Anonymous_e__Struct Anonymous;
    ubyte AsUchar;
}

struct NVME_LBA_FORMAT
{
    _Anonymous_e__Struct Anonymous;
    uint AsUlong;
}

struct NVME_IDENTIFY_NAMESPACE_DATA
{
    ulong NSZE;
    ulong NCAP;
    ulong NUSE;
    _NSFEAT_e__Struct NSFEAT;
    ubyte NLBAF;
    _FLBAS_e__Struct FLBAS;
    _MC_e__Struct MC;
    _DPC_e__Struct DPC;
    _DPS_e__Struct DPS;
    _NMIC_e__Struct NMIC;
    NVM_RESERVATION_CAPABILITIES RESCAP;
    _FPI_e__Struct FPI;
    _DLFEAT_e__Struct DLFEAT;
    ushort NAWUN;
    ushort NAWUPF;
    ushort NACWU;
    ushort NABSN;
    ushort NABO;
    ushort NABSPF;
    ushort NOIOB;
    ubyte[16] NVMCAP;
    ushort NPWG;
    ushort NPWA;
    ushort NPDG;
    ushort NPDA;
    ushort NOWS;
    ushort MSSRL;
    uint MCL;
    ubyte MSRC;
    ubyte[11] Reserved2;
    uint ANAGRPID;
    ubyte[3] Reserved3;
    _NSATTR_e__Struct NSATTR;
    ushort NVMSETID;
    ushort ENDGID;
    ubyte[16] NGUID;
    ubyte[8] EUI64;
    NVME_LBA_FORMAT[64] LBAF;
    ubyte[3712] 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_NAMESPACE_DATA サイズ: 4096 バイト(x64)
dim st, 1024    ; 4byte整数×1024(構造体サイズ 4096 / 4 切り上げ)
; NSZE : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; NCAP : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; NUSE : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; NSFEAT : _NSFEAT_e__Struct (+24, 1byte)  varptr(st)+24 を基点に操作(1byte:入れ子/配列)
; NLBAF : BYTE (+25, 1byte)  poke st,25,値  /  値 = peek(st,25)
; FLBAS : _FLBAS_e__Struct (+26, 1byte)  varptr(st)+26 を基点に操作(1byte:入れ子/配列)
; MC : _MC_e__Struct (+27, 1byte)  varptr(st)+27 を基点に操作(1byte:入れ子/配列)
; DPC : _DPC_e__Struct (+28, 1byte)  varptr(st)+28 を基点に操作(1byte:入れ子/配列)
; DPS : _DPS_e__Struct (+29, 1byte)  varptr(st)+29 を基点に操作(1byte:入れ子/配列)
; NMIC : _NMIC_e__Struct (+30, 1byte)  varptr(st)+30 を基点に操作(1byte:入れ子/配列)
; RESCAP : NVM_RESERVATION_CAPABILITIES (+31, 1byte)  varptr(st)+31 を基点に操作(1byte:入れ子/配列)
; FPI : _FPI_e__Struct (+32, 1byte)  varptr(st)+32 を基点に操作(1byte:入れ子/配列)
; DLFEAT : _DLFEAT_e__Struct (+33, 1byte)  varptr(st)+33 を基点に操作(1byte:入れ子/配列)
; NAWUN : WORD (+34, 2byte)  wpoke st,34,値  /  値 = wpeek(st,34)
; NAWUPF : WORD (+36, 2byte)  wpoke st,36,値  /  値 = wpeek(st,36)
; NACWU : WORD (+38, 2byte)  wpoke st,38,値  /  値 = wpeek(st,38)
; NABSN : WORD (+40, 2byte)  wpoke st,40,値  /  値 = wpeek(st,40)
; NABO : WORD (+42, 2byte)  wpoke st,42,値  /  値 = wpeek(st,42)
; NABSPF : WORD (+44, 2byte)  wpoke st,44,値  /  値 = wpeek(st,44)
; NOIOB : WORD (+46, 2byte)  wpoke st,46,値  /  値 = wpeek(st,46)
; NVMCAP : BYTE (+48, 16byte)  varptr(st)+48 を基点に操作(16byte:入れ子/配列)
; NPWG : WORD (+64, 2byte)  wpoke st,64,値  /  値 = wpeek(st,64)
; NPWA : WORD (+66, 2byte)  wpoke st,66,値  /  値 = wpeek(st,66)
; NPDG : WORD (+68, 2byte)  wpoke st,68,値  /  値 = wpeek(st,68)
; NPDA : WORD (+70, 2byte)  wpoke st,70,値  /  値 = wpeek(st,70)
; NOWS : WORD (+72, 2byte)  wpoke st,72,値  /  値 = wpeek(st,72)
; MSSRL : WORD (+74, 2byte)  wpoke st,74,値  /  値 = wpeek(st,74)
; MCL : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; MSRC : BYTE (+80, 1byte)  poke st,80,値  /  値 = peek(st,80)
; Reserved2 : BYTE (+81, 11byte)  varptr(st)+81 を基点に操作(11byte:入れ子/配列)
; ANAGRPID : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; Reserved3 : BYTE (+96, 3byte)  varptr(st)+96 を基点に操作(3byte:入れ子/配列)
; NSATTR : _NSATTR_e__Struct (+99, 1byte)  varptr(st)+99 を基点に操作(1byte:入れ子/配列)
; NVMSETID : WORD (+100, 2byte)  wpoke st,100,値  /  値 = wpeek(st,100)
; ENDGID : WORD (+102, 2byte)  wpoke st,102,値  /  値 = wpeek(st,102)
; NGUID : BYTE (+104, 16byte)  varptr(st)+104 を基点に操作(16byte:入れ子/配列)
; EUI64 : BYTE (+120, 8byte)  varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; LBAF : NVME_LBA_FORMAT (+128, 256byte)  varptr(st)+128 を基点に操作(256byte:入れ子/配列)
; VS : BYTE (+384, 3712byte)  varptr(st)+384 を基点に操作(3712byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NVME_IDENTIFY_NAMESPACE_DATA
    #field int64 NSZE
    #field int64 NCAP
    #field int64 NUSE
    #field _NSFEAT_e__Struct NSFEAT
    #field byte NLBAF
    #field _FLBAS_e__Struct FLBAS
    #field _MC_e__Struct MC
    #field _DPC_e__Struct DPC
    #field _DPS_e__Struct DPS
    #field _NMIC_e__Struct NMIC
    #field byte RESCAP 1
    #field _FPI_e__Struct FPI
    #field _DLFEAT_e__Struct DLFEAT
    #field short NAWUN
    #field short NAWUPF
    #field short NACWU
    #field short NABSN
    #field short NABO
    #field short NABSPF
    #field short NOIOB
    #field byte NVMCAP 16
    #field short NPWG
    #field short NPWA
    #field short NPDG
    #field short NPDA
    #field short NOWS
    #field short MSSRL
    #field int MCL
    #field byte MSRC
    #field byte Reserved2 11
    #field int ANAGRPID
    #field byte Reserved3 3
    #field _NSATTR_e__Struct NSATTR
    #field short NVMSETID
    #field short ENDGID
    #field byte NGUID 16
    #field byte EUI64 8
    #field byte LBAF 256
    #field byte VS 3712
#endstruct

stdim st, NVME_IDENTIFY_NAMESPACE_DATA        ; NSTRUCT 変数を確保
st->NSZE = 100
mes "NSZE=" + st->NSZE
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。