ホーム › Storage.Nvme › NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3
NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| MediaUnitsWritten | BYTE | 16 | +0 | +0 | メディアへの書き込み量(128ビット)。OCP仕様規定の単位。 |
| MediaUnitsRead | BYTE | 16 | +16 | +16 | メディアからの読み取り量(128ビット)。 |
| BadUserNANDBlockCount | _BadUserNANDBlockCount_e__Struct | 8 | +32 | +32 | ユーザ領域の不良NANDブロック数(生値と正規化値)。 |
| BadSystemNANDBlockCount | _BadSystemNANDBlockCount_e__Struct | 8 | +40 | +40 | システム領域の不良NANDブロック数(生値と正規化値)。 |
| XORRecoveryCount | ULONGLONG | 8 | +48 | +48 | XORによるデータ復旧の実行回数。 |
| UnrecoverableReadErrorCount | ULONGLONG | 8 | +56 | +56 | 回復不能な読み取りエラーの累積数。 |
| SoftECCErrorCount | ULONGLONG | 8 | +64 | +64 | ソフトECCエラーの累積数。 |
| EndToEndCorrectionCounts | _EndToEndCorrectionCounts_e__Struct | 8 | +72 | +72 | エンドツーエンド検査の検出/訂正カウント。 |
| PercentageSystemDataUsed | BYTE | 1 | +80 | +80 | システムデータ領域の消耗率。百分率で表す。 |
| RefreshCount | BYTE | 7 | +81 | +81 | リフレッシュ動作の実行回数。 |
| UserDataEraseCounts | _UserDataEraseCounts_e__Struct | 8 | +88 | +88 | ユーザデータ消去の最小/最大カウント。 |
| ThermalThrottling | _ThermalThrottling_e__Struct | 2 | +96 | +96 | サーマルスロットリングの状態と発生回数。 |
| DSSDSpecVersion | _DSSDSpecVersion_e__Struct | 6 | +98 | +98 | 準拠するDatacenter SSD仕様のバージョン情報。 |
| PCIeCorrectableErrorCount | ULONGLONG | 8 | +104 | +104 | PCIe訂正可能エラーの累積数。 |
| IncompleteShutdownCount | DWORD | 4 | +112 | +112 | 不完全シャットダウンの発生回数。 |
| Reserved1 | DWORD | 4 | +116 | +116 | 予約領域。将来拡張用で0とする。 |
| PercentageFreeBlocks | BYTE | 1 | +120 | +120 | 空きブロックの割合。百分率で表す。 |
| Reserved2 | BYTE | 7 | +121 | +121 | 予約領域。将来拡張用で0とする。 |
| CapacitorHealth | WORD | 2 | +128 | +128 | 電源バックアップ用コンデンサの健全性。 |
| NvmeErrata | BYTE | 1 | +130 | +130 | 適用されているNVMeエラータのバージョン。 |
| Reserved3 | BYTE | 5 | +131 | +131 | 予約領域。将来拡張用で0とする。 |
| UnalignedIOCount | ULONGLONG | 8 | +136 | +136 | アライメント外I/Oの累積数。 |
| SecurityVersionNumber | ULONGLONG | 8 | +144 | +144 | セキュリティバージョン番号。 |
| NUSE | ULONGLONG | 8 | +152 | +152 | 名前空間で使用中の論理ブロック数。 |
| PLPStartCount | BYTE | 16 | +160 | +160 | 電源喪失保護の起動回数(128ビット)。 |
| EnduranceEstimate | BYTE | 16 | +176 | +176 | 推定耐久度。書き込み可能総量の見積もりである。 |
| PCIeLinkRetrainingCount | ULONGLONG | 8 | +192 | +192 | PCIeリンク再トレーニングの発生回数。 |
| PowerStateChangeCount | ULONGLONG | 8 | +200 | +200 | 電源状態遷移の発生回数。 |
| Reserved4 | BYTE | 286 | +208 | +208 | 予約領域。将来拡張用で0とする。 |
| LogPageVersionNumber | WORD | 2 | +494 | +494 | このログページの版数。 |
| LogPageGUID | GUID | 16 | +496 | +496 | ログページを識別する16バイトGUID。 |
構造体: _BadUserNANDBlockCount_e__Struct x64 8B / x86 8B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| RawCount | BYTE | 6 | +0 | +0 |
| Normalized | BYTE | 2 | +6 | +6 |
構造体: _BadSystemNANDBlockCount_e__Struct x64 8B / x86 8B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| RawCount | BYTE | 6 | +0 | +0 |
| Normalized | BYTE | 2 | +6 | +6 |
構造体: _EndToEndCorrectionCounts_e__Struct x64 8B / x86 8B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| DetectedCounts | DWORD | 4 | +0 | +0 |
| CorrectedCounts | DWORD | 4 | +4 | +4 |
構造体: _UserDataEraseCounts_e__Struct x64 8B / x86 8B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| MaximumCount | DWORD | 4 | +0 | +0 |
| MinimumCount | DWORD | 4 | +4 | +4 |
構造体: _ThermalThrottling_e__Struct x64 2B / x86 2B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| EventCount | BYTE | 1 | +0 | +0 |
| Status | BYTE | 1 | +1 | +1 |
構造体: _DSSDSpecVersion_e__Struct x64 6B / x86 6B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| Errata | BYTE | 1 | +0 | +0 |
| PointVersion | WORD | 2 | +1 | +1 |
| MinorVersion | WORD | 2 | +3 | +3 |
| MajorVersion | BYTE | 1 | +5 | +5 |
各言語での定義
#include <windows.h>
// NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 (x64 512 / x86 512 バイト)
#pragma pack(push, 1)
typedef struct NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 {
BYTE MediaUnitsWritten[16];
BYTE MediaUnitsRead[16];
_BadUserNANDBlockCount_e__Struct BadUserNANDBlockCount;
_BadSystemNANDBlockCount_e__Struct BadSystemNANDBlockCount;
ULONGLONG XORRecoveryCount;
ULONGLONG UnrecoverableReadErrorCount;
ULONGLONG SoftECCErrorCount;
_EndToEndCorrectionCounts_e__Struct EndToEndCorrectionCounts;
BYTE PercentageSystemDataUsed;
BYTE RefreshCount[7];
_UserDataEraseCounts_e__Struct UserDataEraseCounts;
_ThermalThrottling_e__Struct ThermalThrottling;
_DSSDSpecVersion_e__Struct DSSDSpecVersion;
ULONGLONG PCIeCorrectableErrorCount;
DWORD IncompleteShutdownCount;
DWORD Reserved1;
BYTE PercentageFreeBlocks;
BYTE Reserved2[7];
WORD CapacitorHealth;
BYTE NvmeErrata;
BYTE Reserved3[5];
ULONGLONG UnalignedIOCount;
ULONGLONG SecurityVersionNumber;
ULONGLONG NUSE;
BYTE PLPStartCount[16];
BYTE EnduranceEstimate[16];
ULONGLONG PCIeLinkRetrainingCount;
ULONGLONG PowerStateChangeCount;
BYTE Reserved4[286];
WORD LogPageVersionNumber;
GUID LogPageGUID;
} NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] MediaUnitsWritten;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] MediaUnitsRead;
public _BadUserNANDBlockCount_e__Struct BadUserNANDBlockCount;
public _BadSystemNANDBlockCount_e__Struct BadSystemNANDBlockCount;
public ulong XORRecoveryCount;
public ulong UnrecoverableReadErrorCount;
public ulong SoftECCErrorCount;
public _EndToEndCorrectionCounts_e__Struct EndToEndCorrectionCounts;
public byte PercentageSystemDataUsed;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] public byte[] RefreshCount;
public _UserDataEraseCounts_e__Struct UserDataEraseCounts;
public _ThermalThrottling_e__Struct ThermalThrottling;
public _DSSDSpecVersion_e__Struct DSSDSpecVersion;
public ulong PCIeCorrectableErrorCount;
public uint IncompleteShutdownCount;
public uint Reserved1;
public byte PercentageFreeBlocks;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] public byte[] Reserved2;
public ushort CapacitorHealth;
public byte NvmeErrata;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] public byte[] Reserved3;
public ulong UnalignedIOCount;
public ulong SecurityVersionNumber;
public ulong NUSE;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] PLPStartCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] EnduranceEstimate;
public ulong PCIeLinkRetrainingCount;
public ulong PowerStateChangeCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 286)] public byte[] Reserved4;
public ushort LogPageVersionNumber;
public Guid LogPageGUID;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public MediaUnitsWritten() As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public MediaUnitsRead() As Byte
Public BadUserNANDBlockCount As _BadUserNANDBlockCount_e__Struct
Public BadSystemNANDBlockCount As _BadSystemNANDBlockCount_e__Struct
Public XORRecoveryCount As ULong
Public UnrecoverableReadErrorCount As ULong
Public SoftECCErrorCount As ULong
Public EndToEndCorrectionCounts As _EndToEndCorrectionCounts_e__Struct
Public PercentageSystemDataUsed As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=7)> Public RefreshCount() As Byte
Public UserDataEraseCounts As _UserDataEraseCounts_e__Struct
Public ThermalThrottling As _ThermalThrottling_e__Struct
Public DSSDSpecVersion As _DSSDSpecVersion_e__Struct
Public PCIeCorrectableErrorCount As ULong
Public IncompleteShutdownCount As UInteger
Public Reserved1 As UInteger
Public PercentageFreeBlocks As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=7)> Public Reserved2() As Byte
Public CapacitorHealth As UShort
Public NvmeErrata As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)> Public Reserved3() As Byte
Public UnalignedIOCount As ULong
Public SecurityVersionNumber As ULong
Public NUSE As ULong
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public PLPStartCount() As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public EnduranceEstimate() As Byte
Public PCIeLinkRetrainingCount As ULong
Public PowerStateChangeCount As ULong
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=286)> Public Reserved4() As Byte
Public LogPageVersionNumber As UShort
Public LogPageGUID As Guid
End Structureimport ctypes
from ctypes import wintypes
class NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3(ctypes.Structure):
_pack_ = 1
_fields_ = [
("MediaUnitsWritten", ctypes.c_ubyte * 16),
("MediaUnitsRead", ctypes.c_ubyte * 16),
("BadUserNANDBlockCount", _BadUserNANDBlockCount_e__Struct),
("BadSystemNANDBlockCount", _BadSystemNANDBlockCount_e__Struct),
("XORRecoveryCount", ctypes.c_ulonglong),
("UnrecoverableReadErrorCount", ctypes.c_ulonglong),
("SoftECCErrorCount", ctypes.c_ulonglong),
("EndToEndCorrectionCounts", _EndToEndCorrectionCounts_e__Struct),
("PercentageSystemDataUsed", ctypes.c_ubyte),
("RefreshCount", ctypes.c_ubyte * 7),
("UserDataEraseCounts", _UserDataEraseCounts_e__Struct),
("ThermalThrottling", _ThermalThrottling_e__Struct),
("DSSDSpecVersion", _DSSDSpecVersion_e__Struct),
("PCIeCorrectableErrorCount", ctypes.c_ulonglong),
("IncompleteShutdownCount", wintypes.DWORD),
("Reserved1", wintypes.DWORD),
("PercentageFreeBlocks", ctypes.c_ubyte),
("Reserved2", ctypes.c_ubyte * 7),
("CapacitorHealth", ctypes.c_ushort),
("NvmeErrata", ctypes.c_ubyte),
("Reserved3", ctypes.c_ubyte * 5),
("UnalignedIOCount", ctypes.c_ulonglong),
("SecurityVersionNumber", ctypes.c_ulonglong),
("NUSE", ctypes.c_ulonglong),
("PLPStartCount", ctypes.c_ubyte * 16),
("EnduranceEstimate", ctypes.c_ubyte * 16),
("PCIeLinkRetrainingCount", ctypes.c_ulonglong),
("PowerStateChangeCount", ctypes.c_ulonglong),
("Reserved4", ctypes.c_ubyte * 286),
("LogPageVersionNumber", ctypes.c_ushort),
("LogPageGUID", GUID),
]#[repr(C, packed(1))]
pub struct NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 {
pub MediaUnitsWritten: [u8; 16],
pub MediaUnitsRead: [u8; 16],
pub BadUserNANDBlockCount: _BadUserNANDBlockCount_e__Struct,
pub BadSystemNANDBlockCount: _BadSystemNANDBlockCount_e__Struct,
pub XORRecoveryCount: u64,
pub UnrecoverableReadErrorCount: u64,
pub SoftECCErrorCount: u64,
pub EndToEndCorrectionCounts: _EndToEndCorrectionCounts_e__Struct,
pub PercentageSystemDataUsed: u8,
pub RefreshCount: [u8; 7],
pub UserDataEraseCounts: _UserDataEraseCounts_e__Struct,
pub ThermalThrottling: _ThermalThrottling_e__Struct,
pub DSSDSpecVersion: _DSSDSpecVersion_e__Struct,
pub PCIeCorrectableErrorCount: u64,
pub IncompleteShutdownCount: u32,
pub Reserved1: u32,
pub PercentageFreeBlocks: u8,
pub Reserved2: [u8; 7],
pub CapacitorHealth: u16,
pub NvmeErrata: u8,
pub Reserved3: [u8; 5],
pub UnalignedIOCount: u64,
pub SecurityVersionNumber: u64,
pub NUSE: u64,
pub PLPStartCount: [u8; 16],
pub EnduranceEstimate: [u8; 16],
pub PCIeLinkRetrainingCount: u64,
pub PowerStateChangeCount: u64,
pub Reserved4: [u8; 286],
pub LogPageVersionNumber: u16,
pub LogPageGUID: GUID,
}import "golang.org/x/sys/windows"
type NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 struct {
MediaUnitsWritten [16]byte
MediaUnitsRead [16]byte
BadUserNANDBlockCount _BadUserNANDBlockCount_e__Struct
BadSystemNANDBlockCount _BadSystemNANDBlockCount_e__Struct
XORRecoveryCount uint64
UnrecoverableReadErrorCount uint64
SoftECCErrorCount uint64
EndToEndCorrectionCounts _EndToEndCorrectionCounts_e__Struct
PercentageSystemDataUsed byte
RefreshCount [7]byte
UserDataEraseCounts _UserDataEraseCounts_e__Struct
ThermalThrottling _ThermalThrottling_e__Struct
DSSDSpecVersion _DSSDSpecVersion_e__Struct
PCIeCorrectableErrorCount uint64
IncompleteShutdownCount uint32
Reserved1 uint32
PercentageFreeBlocks byte
Reserved2 [7]byte
CapacitorHealth uint16
NvmeErrata byte
Reserved3 [5]byte
UnalignedIOCount uint64
SecurityVersionNumber uint64
NUSE uint64
PLPStartCount [16]byte
EnduranceEstimate [16]byte
PCIeLinkRetrainingCount uint64
PowerStateChangeCount uint64
Reserved4 [286]byte
LogPageVersionNumber uint16
LogPageGUID windows.GUID
}type
NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 = packed record
MediaUnitsWritten: array[0..15] of Byte;
MediaUnitsRead: array[0..15] of Byte;
BadUserNANDBlockCount: _BadUserNANDBlockCount_e__Struct;
BadSystemNANDBlockCount: _BadSystemNANDBlockCount_e__Struct;
XORRecoveryCount: UInt64;
UnrecoverableReadErrorCount: UInt64;
SoftECCErrorCount: UInt64;
EndToEndCorrectionCounts: _EndToEndCorrectionCounts_e__Struct;
PercentageSystemDataUsed: Byte;
RefreshCount: array[0..6] of Byte;
UserDataEraseCounts: _UserDataEraseCounts_e__Struct;
ThermalThrottling: _ThermalThrottling_e__Struct;
DSSDSpecVersion: _DSSDSpecVersion_e__Struct;
PCIeCorrectableErrorCount: UInt64;
IncompleteShutdownCount: DWORD;
Reserved1: DWORD;
PercentageFreeBlocks: Byte;
Reserved2: array[0..6] of Byte;
CapacitorHealth: Word;
NvmeErrata: Byte;
Reserved3: array[0..4] of Byte;
UnalignedIOCount: UInt64;
SecurityVersionNumber: UInt64;
NUSE: UInt64;
PLPStartCount: array[0..15] of Byte;
EnduranceEstimate: array[0..15] of Byte;
PCIeLinkRetrainingCount: UInt64;
PowerStateChangeCount: UInt64;
Reserved4: array[0..285] of Byte;
LogPageVersionNumber: Word;
LogPageGUID: TGUID;
end;const NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 = extern struct {
MediaUnitsWritten: [16]u8,
MediaUnitsRead: [16]u8,
BadUserNANDBlockCount: _BadUserNANDBlockCount_e__Struct,
BadSystemNANDBlockCount: _BadSystemNANDBlockCount_e__Struct,
XORRecoveryCount: u64,
UnrecoverableReadErrorCount: u64,
SoftECCErrorCount: u64,
EndToEndCorrectionCounts: _EndToEndCorrectionCounts_e__Struct,
PercentageSystemDataUsed: u8,
RefreshCount: [7]u8,
UserDataEraseCounts: _UserDataEraseCounts_e__Struct,
ThermalThrottling: _ThermalThrottling_e__Struct,
DSSDSpecVersion: _DSSDSpecVersion_e__Struct,
PCIeCorrectableErrorCount: u64,
IncompleteShutdownCount: u32,
Reserved1: u32,
PercentageFreeBlocks: u8,
Reserved2: [7]u8,
CapacitorHealth: u16,
NvmeErrata: u8,
Reserved3: [5]u8,
UnalignedIOCount: u64,
SecurityVersionNumber: u64,
NUSE: u64,
PLPStartCount: [16]u8,
EnduranceEstimate: [16]u8,
PCIeLinkRetrainingCount: u64,
PowerStateChangeCount: u64,
Reserved4: [286]u8,
LogPageVersionNumber: u16,
LogPageGUID: GUID,
};type
NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 {.packed.} = object
MediaUnitsWritten: array[16, uint8]
MediaUnitsRead: array[16, uint8]
BadUserNANDBlockCount: _BadUserNANDBlockCount_e__Struct
BadSystemNANDBlockCount: _BadSystemNANDBlockCount_e__Struct
XORRecoveryCount: uint64
UnrecoverableReadErrorCount: uint64
SoftECCErrorCount: uint64
EndToEndCorrectionCounts: _EndToEndCorrectionCounts_e__Struct
PercentageSystemDataUsed: uint8
RefreshCount: array[7, uint8]
UserDataEraseCounts: _UserDataEraseCounts_e__Struct
ThermalThrottling: _ThermalThrottling_e__Struct
DSSDSpecVersion: _DSSDSpecVersion_e__Struct
PCIeCorrectableErrorCount: uint64
IncompleteShutdownCount: uint32
Reserved1: uint32
PercentageFreeBlocks: uint8
Reserved2: array[7, uint8]
CapacitorHealth: uint16
NvmeErrata: uint8
Reserved3: array[5, uint8]
UnalignedIOCount: uint64
SecurityVersionNumber: uint64
NUSE: uint64
PLPStartCount: array[16, uint8]
EnduranceEstimate: array[16, uint8]
PCIeLinkRetrainingCount: uint64
PowerStateChangeCount: uint64
Reserved4: array[286, uint8]
LogPageVersionNumber: uint16
LogPageGUID: GUIDalign(1)
struct NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3
{
ubyte[16] MediaUnitsWritten;
ubyte[16] MediaUnitsRead;
_BadUserNANDBlockCount_e__Struct BadUserNANDBlockCount;
_BadSystemNANDBlockCount_e__Struct BadSystemNANDBlockCount;
ulong XORRecoveryCount;
ulong UnrecoverableReadErrorCount;
ulong SoftECCErrorCount;
_EndToEndCorrectionCounts_e__Struct EndToEndCorrectionCounts;
ubyte PercentageSystemDataUsed;
ubyte[7] RefreshCount;
_UserDataEraseCounts_e__Struct UserDataEraseCounts;
_ThermalThrottling_e__Struct ThermalThrottling;
_DSSDSpecVersion_e__Struct DSSDSpecVersion;
ulong PCIeCorrectableErrorCount;
uint IncompleteShutdownCount;
uint Reserved1;
ubyte PercentageFreeBlocks;
ubyte[7] Reserved2;
ushort CapacitorHealth;
ubyte NvmeErrata;
ubyte[5] Reserved3;
ulong UnalignedIOCount;
ulong SecurityVersionNumber;
ulong NUSE;
ubyte[16] PLPStartCount;
ubyte[16] EnduranceEstimate;
ulong PCIeLinkRetrainingCount;
ulong PowerStateChangeCount;
ubyte[286] Reserved4;
ushort LogPageVersionNumber;
GUID LogPageGUID;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 サイズ: 512 バイト(x64)
dim st, 128 ; 4byte整数×128(構造体サイズ 512 / 4 切り上げ)
; MediaUnitsWritten : BYTE (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; MediaUnitsRead : BYTE (+16, 16byte) varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; BadUserNANDBlockCount : _BadUserNANDBlockCount_e__Struct (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; BadSystemNANDBlockCount : _BadSystemNANDBlockCount_e__Struct (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; XORRecoveryCount : ULONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; UnrecoverableReadErrorCount : ULONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; SoftECCErrorCount : ULONGLONG (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; EndToEndCorrectionCounts : _EndToEndCorrectionCounts_e__Struct (+72, 8byte) varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; PercentageSystemDataUsed : BYTE (+80, 1byte) poke st,80,値 / 値 = peek(st,80)
; RefreshCount : BYTE (+81, 7byte) varptr(st)+81 を基点に操作(7byte:入れ子/配列)
; UserDataEraseCounts : _UserDataEraseCounts_e__Struct (+88, 8byte) varptr(st)+88 を基点に操作(8byte:入れ子/配列)
; ThermalThrottling : _ThermalThrottling_e__Struct (+96, 2byte) varptr(st)+96 を基点に操作(2byte:入れ子/配列)
; DSSDSpecVersion : _DSSDSpecVersion_e__Struct (+98, 6byte) varptr(st)+98 を基点に操作(6byte:入れ子/配列)
; PCIeCorrectableErrorCount : ULONGLONG (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; IncompleteShutdownCount : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; Reserved1 : DWORD (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; PercentageFreeBlocks : BYTE (+120, 1byte) poke st,120,値 / 値 = peek(st,120)
; Reserved2 : BYTE (+121, 7byte) varptr(st)+121 を基点に操作(7byte:入れ子/配列)
; CapacitorHealth : WORD (+128, 2byte) wpoke st,128,値 / 値 = wpeek(st,128)
; NvmeErrata : BYTE (+130, 1byte) poke st,130,値 / 値 = peek(st,130)
; Reserved3 : BYTE (+131, 5byte) varptr(st)+131 を基点に操作(5byte:入れ子/配列)
; UnalignedIOCount : ULONGLONG (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; SecurityVersionNumber : ULONGLONG (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; NUSE : ULONGLONG (+152, 8byte) qpoke st,152,値 / qpeek(st,152) ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; PLPStartCount : BYTE (+160, 16byte) varptr(st)+160 を基点に操作(16byte:入れ子/配列)
; EnduranceEstimate : BYTE (+176, 16byte) varptr(st)+176 を基点に操作(16byte:入れ子/配列)
; PCIeLinkRetrainingCount : ULONGLONG (+192, 8byte) qpoke st,192,値 / qpeek(st,192) ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; PowerStateChangeCount : ULONGLONG (+200, 8byte) qpoke st,200,値 / qpeek(st,200) ※IronHSPのみ。3.7/3.8は lpoke st,200,下位 : lpoke st,204,上位
; Reserved4 : BYTE (+208, 286byte) varptr(st)+208 を基点に操作(286byte:入れ子/配列)
; LogPageVersionNumber : WORD (+494, 2byte) wpoke st,494,値 / 値 = wpeek(st,494)
; LogPageGUID : GUID (+496, 16byte) varptr(st)+496 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3, pack=1
#field byte MediaUnitsWritten 16
#field byte MediaUnitsRead 16
#field _BadUserNANDBlockCount_e__Struct BadUserNANDBlockCount
#field _BadSystemNANDBlockCount_e__Struct BadSystemNANDBlockCount
#field int64 XORRecoveryCount
#field int64 UnrecoverableReadErrorCount
#field int64 SoftECCErrorCount
#field _EndToEndCorrectionCounts_e__Struct EndToEndCorrectionCounts
#field byte PercentageSystemDataUsed
#field byte RefreshCount 7
#field _UserDataEraseCounts_e__Struct UserDataEraseCounts
#field _ThermalThrottling_e__Struct ThermalThrottling
#field _DSSDSpecVersion_e__Struct DSSDSpecVersion
#field int64 PCIeCorrectableErrorCount
#field int IncompleteShutdownCount
#field int Reserved1
#field byte PercentageFreeBlocks
#field byte Reserved2 7
#field short CapacitorHealth
#field byte NvmeErrata
#field byte Reserved3 5
#field int64 UnalignedIOCount
#field int64 SecurityVersionNumber
#field int64 NUSE
#field byte PLPStartCount 16
#field byte EnduranceEstimate 16
#field int64 PCIeLinkRetrainingCount
#field int64 PowerStateChangeCount
#field byte Reserved4 286
#field short LogPageVersionNumber
#field GUID LogPageGUID
#endstruct
stdim st, NVME_OCP_DEVICE_SMART_INFORMATION_LOG_V3 ; NSTRUCT 変数を確保
st->XORRecoveryCount = 100
mes "XORRecoveryCount=" + st->XORRecoveryCount