NVME_IDENTIFY_NAMESPACE_DATA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| NSZE | ULONGLONG | 8 | +0 | +0 | ネームスペースの合計サイズを論理ブロック単位で示します。 サイズ n のネームスペースは、論理ブロック アドレス (LBA) |
| NCAP | ULONGLONG | 8 | +8 | +8 | 任意の時点でネームスペース内に割り当て可能な論理ブロックの最大数を示します。 論理ブロック数はフォーマット済みの LBA サイズに基づきます。このフィールドは、ネームスペースがフォーマットされる前は未定義です。 NCAP フィールドはシン プロビジョニングの場合に使用され、ネームスペース サイズ (NSZE) 以下の値を報告します。 スペア LBA はこのフィールドには含まれません。ネームスペース容量 (NCAP) の値が |
| NUSE | ULONGLONG | 8 | +16 | +16 | 現在ネームスペース内に割り当てられている論理ブロック数を示します。 このフィールドの値は、ネームスペース容量 NCAP フィールドの値以下です。 論理ブロック数はフォーマット済みの LBA サイズに基づきます。NVM コマンド セットを使用する場合: 論理ブロックは、Write コマンドまたは Write Uncorrectable コマンドによって書き込まれたときに割り当てられます。論理ブロックは Dataset Management コマンドを使用して割り当て解除できます。 製品がシン プロビジョニング環境を対象としていない場合、コントローラーは常に NCAP の値と等しい NUSE の値を報告することがあります。 |
| NSFEAT | _NSFEAT_e__Struct | 1 | +24 | +24 | ネームスペースの機能を定義するフィールドを含む Namespace Features (NSFEAT) 構造体です。 |
| NLBAF | BYTE | 1 | +25 | +25 | ネームスペースがサポートする LBA データ サイズとメタデータ サイズの組み合わせの数を定義します。 LBA フォーマットは順番に (0 から始まって) 割り当てられ、連続して配置されます。これは 0 を基点とする値です。サポートされていることを示せる LBA フォーマットの最大数は 16 です。 サポートされる LBA フォーマットは LBAF フィールド (このデータ構造体のバイト 128 – 191) に示されます。メタデータは、LBA の一部として転送されるか (アプリケーションに公開される LBA サイズが大きくなる拡張 LBA が作成されます)、または別個の連続したデータ バッファーとして転送されます。メタデータを LBA と別個のメタデータ バッファーに分割することはできません。 コントローラーでの ECC 効率のため、ソフトウェアおよびコントローラーは 4KB 以上の LBA サイズへ移行することが推奨されます。メタデータを提供する場合は、エンドツーエンドのデータ保護を利用できるように、論理ブロックあたり少なくとも 8 バイトを提供することが推奨されます。 |
| FLBAS | _FLBAS_e__Struct | 1 | +26 | +26 | ネームスペースがフォーマットされた際の LBA データ サイズとメタデータ サイズの組み合わせを示すフィールドを含む Formatted LBA Size (FLBAS) 構造体です。 |
| MC | _MC_e__Struct | 1 | +27 | +27 | メタデータに関する機能を示すフィールドを含む Metadata Capabilities (MC) 構造体です。 |
| DPC | _DPC_e__Struct | 1 | +28 | +28 | エンドツーエンドのデータ保護機能に関する機能を示すフィールドを含む End-to-end Data Protection Capabilities (DPC) 構造体です。 このフィールドでは複数のビットが設定される場合があります。 |
| DPS | _DPS_e__Struct | 1 | +29 | +29 | エンドツーエンドのデータ保護機能の Type 設定を示すフィールドを含む End-to-end Data Protection Type Settings (DPS) 構造体です。 |
| NMIC | _NMIC_e__Struct | 1 | +30 | +30 | ネームスペースのマルチパス I/O およびネームスペース共有の機能を指定するフィールドを含む Namespace Multi-path I/O and Namespace Sharing Capabilities (NMIC) 構造体です。 |
| RESCAP | NVM_RESERVATION_CAPABILITIES | 1 | +31 | +31 | ネームスペースのリザベーション機能を指定するフィールドを含む Reservation Capabilities (RESCAP) 構造体です。 このフィールドの値が |
| FPI | _FPI_e__Struct | 1 | +32 | +32 | フォーマット操作の進行中に、ネームスペースのうちフォーマットが残っている割合を示すフィールドを含む Format Progress Indicator (FPI) 構造体です。 |
| DLFEAT | _DLFEAT_e__Struct | 1 | +33 | +33 | デアロケート(TRIM)後の読み出し動作を示す構造体。 |
| NAWUN | WORD | 2 | +34 | +34 | 通常動作中に NVM へアトミックに書き込まれることが保証される書き込み操作の、ネームスペース固有のサイズを示します。 値が |
| NAWUPF | WORD | 2 | +36 | +36 | 電源障害またはエラー状態の発生時に NVM へアトミックに書き込まれることが保証される書き込み操作の、ネームスペース固有のサイズを示します。 値が |
| NACWU | WORD | 2 | +38 | +38 | Compare and Write の fused コマンドについて NVM へアトミックに書き込まれることが保証される書き込み操作の、ネームスペース固有のサイズを示します。 値が |
| NABSN | WORD | 2 | +40 | +40 | NAWUN の値に対応する、このネームスペースのアトミック境界サイズを示します。 このフィールドは論理ブロック単位で指定されます。アトミック境界をまたぐこのネームスペースへの書き込みは、他の読み取りコマンドや書き込みコマンドとの関係において NVM 上でアトミックであることが保証されません。 値が |
| NABO | WORD | 2 | +42 | +42 | このネームスペース上で最初のアトミック境界が開始する論理ブロック アドレス (LBA) を示します。 NABSN および NABSPF フィールドが |
| NABSPF | WORD | 2 | +44 | +44 | Namespace Atomic Write Unit Power Fail の値に対応する、このネームスペース固有のアトミック境界サイズを示します。 このフィールドは論理ブロック単位で指定されます。アトミック境界をまたぐこのネームスペースへの書き込みは、他の読み取りコマンドや書き込みコマンドとの関係においてアトミックであることが保証されず、対応する論理ブロックをその後読み取ったときに返されるデータについても保証はありません。 値が |
| NOIOB | WORD | 2 | +46 | +46 | Namespace Optimal IO Boundary (NOIOB) を示します。 |
| NVMCAP | BYTE | 16 | +48 | +48 | このネームスペースに割り当てられた NVM の合計サイズを示します。 このフィールドの値はバイト単位です。このフィールドは、Namespace Management コマンドおよび Namespace Attachment コマンドがサポートされている場合にサポートされます。 注: このフィールドは、論理ブロック サイズとネームスペース サイズ (NSZE) フィールドの積とは一致しない場合があります。シン プロビジョニングやその他の設定 (耐久性など) により、このフィールドは報告される NSZE より大きくなることも小さくなることもあります。 |
| NPWG | WORD | 2 | +64 | +64 | 推奨書き込み粒度(論理ブロック数)。 |
| NPWA | WORD | 2 | +66 | +66 | 推奨書き込みアラインメント(論理ブロック数)。 |
| NPDG | WORD | 2 | +68 | +68 | 推奨デアロケート粒度(論理ブロック数)。 |
| NPDA | WORD | 2 | +70 | +70 | 推奨デアロケートアラインメント(論理ブロック数)。 |
| NOWS | WORD | 2 | +72 | +72 | 最適書き込みサイズ(論理ブロック数)。 |
| MSSRL | WORD | 2 | +74 | +74 | コピーコマンド1ソースあたりの最大ソース範囲長。 |
| MCL | DWORD | 4 | +76 | +76 | コピーコマンドの最大コピー長。 |
| MSRC | BYTE | 1 | +80 | +80 | コピーコマンドの最大ソース範囲数から1を引いた値。 |
| Reserved2 | BYTE | 11 | +81 | +81 | 予約済みのフィールドです。 |
| ANAGRPID | DWORD | 4 | +92 | +92 | このネームスペースが属するANAグループの識別子。 |
| Reserved3 | BYTE | 3 | +96 | +96 | バイト 192:383A は予約済みです。 |
| NSATTR | _NSATTR_e__Struct | 1 | +99 | +99 | ネームスペース属性(書き込み保護等)を示す構造体。 |
| NVMSETID | WORD | 2 | +100 | +100 | 関連付けられた NVM Set 識別子 (NVMSETID) を示します。 |
| ENDGID | WORD | 2 | +102 | +102 | 関連付けられた Endurance Group 識別子 (ENDGID) を示します。 |
| NGUID | BYTE | 16 | +104 | +104 | グローバルに一意であり、ネームスペースの作成時にそのネームスペースへ割り当てられる 128 ビットの値を格納します。 Namespace Globally Unique Identifier (NGUID) フィールドはネームスペースの存続期間を通じて固定されており、ネームスペース操作やコントローラー操作 (コントローラー リセットやネームスペースのフォーマットなど) をまたいで保持されます。 このフィールドは EUI-64 ベースの 16 バイト指定子形式を使用します。
詳細については IEEE EUI-64 のガイドラインを参照してください。コントローラーは、ネームスペースの作成時に、このフィールドまたは EUI64 フィールドにグローバルに一意なネームスペース識別子を指定してください。 |
| EUI64 | BYTE | 8 | +120 | +120 | グローバルに一意であり、ネームスペースの作成時にそのネームスペースへ割り当てられる 64 ビットの IEEE Extended Unique Identifier (EUI-64) を格納します。 EUI64 フィールドはネームスペースの存続期間を通じて固定されており、ネームスペース操作やコントローラー操作 (コントローラー リセットやネームスペースのフォーマットなど) をまたいで保持されます。 EUI-64 は、IEEE Registration Authority によって割り当てられた 24 ビットまたは 36 ビットの company_id 値と、対応する組織によって割り当てられた拡張識別子を連結したものです。詳細については IEEE EUI-64 のガイドラインを参照してください。 コントローラーは、ネームスペースの作成時に、このフィールドまたは NGUID フィールドにグローバルに一意なネームスペース識別子を指定してください。コントローラーがグローバルに一意な 64 ビット識別子を割り当てられない場合、このフィールドは |
| LBAF | NVME_LBA_FORMAT | 256 | +128 | +128 | 16 個の NVME_LBA_FORMAT 構造体の配列を格納します。配列内の各構造体は LBA フォーマットを指定し、それがコントローラーによってサポートされていることを示します。 配列内での構造体の 0 から始まる位置は LBA フォーマットの名前に対応しており、LBA フォーマット 0 (LBAF0) が位置 0、LBA フォーマット 1 (LBAF1) が位置 1、以下同様に、LBA フォーマット 15 (LBAF15) が位置 15 になります。 |
| VS | BYTE | 3712 | +384 | +384 | このバイト範囲 (384:4095) はベンダー固有 (VS) の用途に割り当てられています。 |
構造体: _NSFEAT_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
構造体: _FLBAS_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
構造体: _MC_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
構造体: _DPC_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
構造体: _DPS_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
構造体: _NMIC_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
構造体: _FPI_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
構造体: _DLFEAT_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
構造体: _NSATTR_e__Struct x64 1B / x86 1B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| _bitfield | BYTE | 1 | +0 | +0 |
公式ドキュメント
特定のネームスペースに固有の機能と設定を示す値を格納します。
すべてのネームスペースに共通する機能と設定は、ネームスペース識別子が 0xFFFFFFFF のネームスペースに対する NVME_IDENTIFY_NAMESPACE_DATA データ構造体に格納されます。
nvme.h ヘッダー ファイルは、値が 0xFFFFFFFF の定数 NVME_NAMESPACE_ALL を定義しています。
コントローラーが Namespace Management をサポートしており、NVME_COMMAND 構造体のネームスペース識別子 (NSID) フィールドが NVME_NAMESPACE_ALL に設定されている場合、コントローラーはすべてのネームスペースに共通の機能を指定する NVME_IDENTIFY_NAMESPACE_DATA データ構造体を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 Structureimport 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 非対応)。必要に応じ手動でアクセス。