ホーム › Storage.Nvme › NVME_SET_ATTRIBUTES_ENTRY
NVME_SET_ATTRIBUTES_ENTRY
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Identifier | WORD | 2 | +0 | +0 | NVMセットを一意に識別するNVMセット識別子。 |
| ENDGID | WORD | 2 | +2 | +2 | このセットが属するエンデュランスグループの識別子。 |
| Reserved1 | DWORD | 4 | +4 | +4 | 予約領域。将来拡張用で0とする。 |
| Random4KBReadTypical | DWORD | 4 | +8 | +8 | 4KBランダム読み取りの代表的レイテンシ。単位はナノ秒、0は未報告。 |
| OptimalWriteSize | DWORD | 4 | +12 | +12 | 最適な書き込みサイズ。論理ブロック単位で表す。 |
| TotalCapacity | BYTE | 16 | +16 | +16 | このNVMセットの総容量。バイト単位の128ビット値である。 |
| UnallocatedCapacity | BYTE | 16 | +32 | +32 | 未割り当て容量。バイト単位の128ビット値である。 |
| Reserved2 | BYTE | 80 | +48 | +48 | 予約領域。将来拡張用で0とする。 |
各言語での定義
#include <windows.h>
// NVME_SET_ATTRIBUTES_ENTRY (x64 128 / x86 128 バイト)
typedef struct NVME_SET_ATTRIBUTES_ENTRY {
WORD Identifier;
WORD ENDGID;
DWORD Reserved1;
DWORD Random4KBReadTypical;
DWORD OptimalWriteSize;
BYTE TotalCapacity[16];
BYTE UnallocatedCapacity[16];
BYTE Reserved2[80];
} NVME_SET_ATTRIBUTES_ENTRY;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NVME_SET_ATTRIBUTES_ENTRY
{
public ushort Identifier;
public ushort ENDGID;
public uint Reserved1;
public uint Random4KBReadTypical;
public uint OptimalWriteSize;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] TotalCapacity;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] UnallocatedCapacity;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 80)] public byte[] Reserved2;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NVME_SET_ATTRIBUTES_ENTRY
Public Identifier As UShort
Public ENDGID As UShort
Public Reserved1 As UInteger
Public Random4KBReadTypical As UInteger
Public OptimalWriteSize As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public TotalCapacity() As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public UnallocatedCapacity() As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=80)> Public Reserved2() As Byte
End Structureimport ctypes
from ctypes import wintypes
class NVME_SET_ATTRIBUTES_ENTRY(ctypes.Structure):
_fields_ = [
("Identifier", ctypes.c_ushort),
("ENDGID", ctypes.c_ushort),
("Reserved1", wintypes.DWORD),
("Random4KBReadTypical", wintypes.DWORD),
("OptimalWriteSize", wintypes.DWORD),
("TotalCapacity", ctypes.c_ubyte * 16),
("UnallocatedCapacity", ctypes.c_ubyte * 16),
("Reserved2", ctypes.c_ubyte * 80),
]#[repr(C)]
pub struct NVME_SET_ATTRIBUTES_ENTRY {
pub Identifier: u16,
pub ENDGID: u16,
pub Reserved1: u32,
pub Random4KBReadTypical: u32,
pub OptimalWriteSize: u32,
pub TotalCapacity: [u8; 16],
pub UnallocatedCapacity: [u8; 16],
pub Reserved2: [u8; 80],
}import "golang.org/x/sys/windows"
type NVME_SET_ATTRIBUTES_ENTRY struct {
Identifier uint16
ENDGID uint16
Reserved1 uint32
Random4KBReadTypical uint32
OptimalWriteSize uint32
TotalCapacity [16]byte
UnallocatedCapacity [16]byte
Reserved2 [80]byte
}type
NVME_SET_ATTRIBUTES_ENTRY = record
Identifier: Word;
ENDGID: Word;
Reserved1: DWORD;
Random4KBReadTypical: DWORD;
OptimalWriteSize: DWORD;
TotalCapacity: array[0..15] of Byte;
UnallocatedCapacity: array[0..15] of Byte;
Reserved2: array[0..79] of Byte;
end;const NVME_SET_ATTRIBUTES_ENTRY = extern struct {
Identifier: u16,
ENDGID: u16,
Reserved1: u32,
Random4KBReadTypical: u32,
OptimalWriteSize: u32,
TotalCapacity: [16]u8,
UnallocatedCapacity: [16]u8,
Reserved2: [80]u8,
};type
NVME_SET_ATTRIBUTES_ENTRY {.bycopy.} = object
Identifier: uint16
ENDGID: uint16
Reserved1: uint32
Random4KBReadTypical: uint32
OptimalWriteSize: uint32
TotalCapacity: array[16, uint8]
UnallocatedCapacity: array[16, uint8]
Reserved2: array[80, uint8]struct NVME_SET_ATTRIBUTES_ENTRY
{
ushort Identifier;
ushort ENDGID;
uint Reserved1;
uint Random4KBReadTypical;
uint OptimalWriteSize;
ubyte[16] TotalCapacity;
ubyte[16] UnallocatedCapacity;
ubyte[80] Reserved2;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NVME_SET_ATTRIBUTES_ENTRY サイズ: 128 バイト(x64)
dim st, 32 ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; Identifier : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; ENDGID : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; Reserved1 : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; Random4KBReadTypical : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; OptimalWriteSize : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; TotalCapacity : BYTE (+16, 16byte) varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; UnallocatedCapacity : BYTE (+32, 16byte) varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; Reserved2 : BYTE (+48, 80byte) varptr(st)+48 を基点に操作(80byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NVME_SET_ATTRIBUTES_ENTRY
#field short Identifier
#field short ENDGID
#field int Reserved1
#field int Random4KBReadTypical
#field int OptimalWriteSize
#field byte TotalCapacity 16
#field byte UnallocatedCapacity 16
#field byte Reserved2 80
#endstruct
stdim st, NVME_SET_ATTRIBUTES_ENTRY ; NSTRUCT 変数を確保
st->Identifier = 100
mes "Identifier=" + st->Identifier