ホーム › System.Ioctl › REFS_SMR_VOLUME_INFO_OUTPUT
REFS_SMR_VOLUME_INFO_OUTPUT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Version | DWORD | 4 | +0 | +0 | この出力構造体のバージョン番号。 |
| Flags | DWORD | 4 | +4 | +4 | SMRボリューム情報に関するフラグ。 |
| SizeOfRandomlyWritableTier | LONGLONG | 8 | +8 | +8 | ランダム書き込み可能ティアのサイズ(バイト)。 |
| FreeSpaceInRandomlyWritableTier | LONGLONG | 8 | +16 | +16 | ランダム書き込み可能ティアの空き容量(バイト)。 |
| SizeofSMRTier | LONGLONG | 8 | +24 | +24 | SMR(瓦記録)ティアのサイズ(バイト)。 |
| FreeSpaceInSMRTier | LONGLONG | 8 | +32 | +32 | SMRティアの空き容量(バイト)。 |
| UsableFreeSpaceInSMRTier | LONGLONG | 8 | +40 | +40 | SMRティアで実際に利用可能な空き容量(バイト)。 |
| VolumeGcState | REFS_SMR_VOLUME_GC_STATE | 4 | +48 | +48 | ボリュームのガベージコレクション状態を示す列挙値。 |
| VolumeGcLastStatus | DWORD | 4 | +52 | +52 | 直近のガベージコレクションの結果ステータス。 |
| CurrentGcBandFillPercentage | DWORD | 4 | +56 | +56 | 現在GC対象バンドの充填率(%)。 |
| Unused | ULONGLONG | 48 | +64 | +64 | 未使用の予約領域。 |
各言語での定義
#include <windows.h>
// REFS_SMR_VOLUME_INFO_OUTPUT (x64 112 / x86 112 バイト)
typedef struct REFS_SMR_VOLUME_INFO_OUTPUT {
DWORD Version;
DWORD Flags;
LONGLONG SizeOfRandomlyWritableTier;
LONGLONG FreeSpaceInRandomlyWritableTier;
LONGLONG SizeofSMRTier;
LONGLONG FreeSpaceInSMRTier;
LONGLONG UsableFreeSpaceInSMRTier;
REFS_SMR_VOLUME_GC_STATE VolumeGcState;
DWORD VolumeGcLastStatus;
DWORD CurrentGcBandFillPercentage;
ULONGLONG Unused[6];
} REFS_SMR_VOLUME_INFO_OUTPUT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct REFS_SMR_VOLUME_INFO_OUTPUT
{
public uint Version;
public uint Flags;
public long SizeOfRandomlyWritableTier;
public long FreeSpaceInRandomlyWritableTier;
public long SizeofSMRTier;
public long FreeSpaceInSMRTier;
public long UsableFreeSpaceInSMRTier;
public int VolumeGcState;
public uint VolumeGcLastStatus;
public uint CurrentGcBandFillPercentage;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public ulong[] Unused;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure REFS_SMR_VOLUME_INFO_OUTPUT
Public Version As UInteger
Public Flags As UInteger
Public SizeOfRandomlyWritableTier As Long
Public FreeSpaceInRandomlyWritableTier As Long
Public SizeofSMRTier As Long
Public FreeSpaceInSMRTier As Long
Public UsableFreeSpaceInSMRTier As Long
Public VolumeGcState As Integer
Public VolumeGcLastStatus As UInteger
Public CurrentGcBandFillPercentage As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Public Unused() As ULong
End Structureimport ctypes
from ctypes import wintypes
class REFS_SMR_VOLUME_INFO_OUTPUT(ctypes.Structure):
_fields_ = [
("Version", wintypes.DWORD),
("Flags", wintypes.DWORD),
("SizeOfRandomlyWritableTier", ctypes.c_longlong),
("FreeSpaceInRandomlyWritableTier", ctypes.c_longlong),
("SizeofSMRTier", ctypes.c_longlong),
("FreeSpaceInSMRTier", ctypes.c_longlong),
("UsableFreeSpaceInSMRTier", ctypes.c_longlong),
("VolumeGcState", ctypes.c_int),
("VolumeGcLastStatus", wintypes.DWORD),
("CurrentGcBandFillPercentage", wintypes.DWORD),
("Unused", ctypes.c_ulonglong * 6),
]#[repr(C)]
pub struct REFS_SMR_VOLUME_INFO_OUTPUT {
pub Version: u32,
pub Flags: u32,
pub SizeOfRandomlyWritableTier: i64,
pub FreeSpaceInRandomlyWritableTier: i64,
pub SizeofSMRTier: i64,
pub FreeSpaceInSMRTier: i64,
pub UsableFreeSpaceInSMRTier: i64,
pub VolumeGcState: i32,
pub VolumeGcLastStatus: u32,
pub CurrentGcBandFillPercentage: u32,
pub Unused: [u64; 6],
}import "golang.org/x/sys/windows"
type REFS_SMR_VOLUME_INFO_OUTPUT struct {
Version uint32
Flags uint32
SizeOfRandomlyWritableTier int64
FreeSpaceInRandomlyWritableTier int64
SizeofSMRTier int64
FreeSpaceInSMRTier int64
UsableFreeSpaceInSMRTier int64
VolumeGcState int32
VolumeGcLastStatus uint32
CurrentGcBandFillPercentage uint32
Unused [6]uint64
}type
REFS_SMR_VOLUME_INFO_OUTPUT = record
Version: DWORD;
Flags: DWORD;
SizeOfRandomlyWritableTier: Int64;
FreeSpaceInRandomlyWritableTier: Int64;
SizeofSMRTier: Int64;
FreeSpaceInSMRTier: Int64;
UsableFreeSpaceInSMRTier: Int64;
VolumeGcState: Integer;
VolumeGcLastStatus: DWORD;
CurrentGcBandFillPercentage: DWORD;
Unused: array[0..5] of UInt64;
end;const REFS_SMR_VOLUME_INFO_OUTPUT = extern struct {
Version: u32,
Flags: u32,
SizeOfRandomlyWritableTier: i64,
FreeSpaceInRandomlyWritableTier: i64,
SizeofSMRTier: i64,
FreeSpaceInSMRTier: i64,
UsableFreeSpaceInSMRTier: i64,
VolumeGcState: i32,
VolumeGcLastStatus: u32,
CurrentGcBandFillPercentage: u32,
Unused: [6]u64,
};type
REFS_SMR_VOLUME_INFO_OUTPUT {.bycopy.} = object
Version: uint32
Flags: uint32
SizeOfRandomlyWritableTier: int64
FreeSpaceInRandomlyWritableTier: int64
SizeofSMRTier: int64
FreeSpaceInSMRTier: int64
UsableFreeSpaceInSMRTier: int64
VolumeGcState: int32
VolumeGcLastStatus: uint32
CurrentGcBandFillPercentage: uint32
Unused: array[6, uint64]struct REFS_SMR_VOLUME_INFO_OUTPUT
{
uint Version;
uint Flags;
long SizeOfRandomlyWritableTier;
long FreeSpaceInRandomlyWritableTier;
long SizeofSMRTier;
long FreeSpaceInSMRTier;
long UsableFreeSpaceInSMRTier;
int VolumeGcState;
uint VolumeGcLastStatus;
uint CurrentGcBandFillPercentage;
ulong[6] Unused;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; REFS_SMR_VOLUME_INFO_OUTPUT サイズ: 112 バイト(x64)
dim st, 28 ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; Version : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Flags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; SizeOfRandomlyWritableTier : LONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; FreeSpaceInRandomlyWritableTier : LONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; SizeofSMRTier : LONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; FreeSpaceInSMRTier : LONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; UsableFreeSpaceInSMRTier : LONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; VolumeGcState : REFS_SMR_VOLUME_GC_STATE (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; VolumeGcLastStatus : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; CurrentGcBandFillPercentage : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; Unused : ULONGLONG (+64, 48byte) varptr(st)+64 を基点に操作(48byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global REFS_SMR_VOLUME_INFO_OUTPUT
#field int Version
#field int Flags
#field int64 SizeOfRandomlyWritableTier
#field int64 FreeSpaceInRandomlyWritableTier
#field int64 SizeofSMRTier
#field int64 FreeSpaceInSMRTier
#field int64 UsableFreeSpaceInSMRTier
#field int VolumeGcState
#field int VolumeGcLastStatus
#field int CurrentGcBandFillPercentage
#field int64 Unused 6
#endstruct
stdim st, REFS_SMR_VOLUME_INFO_OUTPUT ; NSTRUCT 変数を確保
st->Version = 100
mes "Version=" + st->Version