ホーム › System.Ioctl › REFS_VOLUME_DATA_BUFFER
REFS_VOLUME_DATA_BUFFER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ByteCount | DWORD | 4 | +0 | +0 | この構造体のバイト数。 |
| MajorVersion | DWORD | 4 | +4 | +4 | ReFSのメジャーバージョン。 |
| MinorVersion | DWORD | 4 | +8 | +8 | ReFSのマイナーバージョン。 |
| BytesPerPhysicalSector | DWORD | 4 | +12 | +12 | 物理セクタあたりのバイト数。 |
| VolumeSerialNumber | LONGLONG | 8 | +16 | +16 | ボリュームのシリアル番号。 |
| NumberSectors | LONGLONG | 8 | +24 | +24 | ボリュームの総セクタ数。 |
| TotalClusters | LONGLONG | 8 | +32 | +32 | ボリュームの総クラスタ数。 |
| FreeClusters | LONGLONG | 8 | +40 | +40 | 空きクラスタ数。 |
| TotalReserved | LONGLONG | 8 | +48 | +48 | 予約済みクラスタ数。 |
| BytesPerSector | DWORD | 4 | +56 | +56 | 1セクタあたりのバイト数。 |
| BytesPerCluster | DWORD | 4 | +60 | +60 | 1クラスタあたりのバイト数。 |
| MaximumSizeOfResidentFile | LONGLONG | 8 | +64 | +64 | 常駐(レジデント)ファイルとして格納できる最大サイズ。 |
| FastTierDataFillRatio | WORD | 2 | +72 | +72 | 高速ティアのデータ充填率。 |
| SlowTierDataFillRatio | WORD | 2 | +74 | +74 | 低速ティアのデータ充填率。 |
| DestagesFastTierToSlowTierRate | DWORD | 4 | +76 | +76 | 高速ティアから低速ティアへのデステージ速度。 |
| MetadataChecksumType | WORD | 2 | +80 | +80 | メタデータのチェックサム種別。 |
| Reserved0 | BYTE | 6 | +82 | +82 | 予約領域。ゼロを設定する。 |
| DriverMajorVersion | DWORD | 4 | +88 | +88 | ReFSドライバのメジャーバージョン。 |
| DriverMinorVersion | DWORD | 4 | +92 | +92 | ReFSドライバのマイナーバージョン。 |
| Reserved | LONGLONG | 56 | +96 | +96 | 予約領域。ゼロを設定する。 |
各言語での定義
#include <windows.h>
// REFS_VOLUME_DATA_BUFFER (x64 152 / x86 152 バイト)
typedef struct REFS_VOLUME_DATA_BUFFER {
DWORD ByteCount;
DWORD MajorVersion;
DWORD MinorVersion;
DWORD BytesPerPhysicalSector;
LONGLONG VolumeSerialNumber;
LONGLONG NumberSectors;
LONGLONG TotalClusters;
LONGLONG FreeClusters;
LONGLONG TotalReserved;
DWORD BytesPerSector;
DWORD BytesPerCluster;
LONGLONG MaximumSizeOfResidentFile;
WORD FastTierDataFillRatio;
WORD SlowTierDataFillRatio;
DWORD DestagesFastTierToSlowTierRate;
WORD MetadataChecksumType;
BYTE Reserved0[6];
DWORD DriverMajorVersion;
DWORD DriverMinorVersion;
LONGLONG Reserved[7];
} REFS_VOLUME_DATA_BUFFER;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct REFS_VOLUME_DATA_BUFFER
{
public uint ByteCount;
public uint MajorVersion;
public uint MinorVersion;
public uint BytesPerPhysicalSector;
public long VolumeSerialNumber;
public long NumberSectors;
public long TotalClusters;
public long FreeClusters;
public long TotalReserved;
public uint BytesPerSector;
public uint BytesPerCluster;
public long MaximumSizeOfResidentFile;
public ushort FastTierDataFillRatio;
public ushort SlowTierDataFillRatio;
public uint DestagesFastTierToSlowTierRate;
public ushort MetadataChecksumType;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] Reserved0;
public uint DriverMajorVersion;
public uint DriverMinorVersion;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] public long[] Reserved;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure REFS_VOLUME_DATA_BUFFER
Public ByteCount As UInteger
Public MajorVersion As UInteger
Public MinorVersion As UInteger
Public BytesPerPhysicalSector As UInteger
Public VolumeSerialNumber As Long
Public NumberSectors As Long
Public TotalClusters As Long
Public FreeClusters As Long
Public TotalReserved As Long
Public BytesPerSector As UInteger
Public BytesPerCluster As UInteger
Public MaximumSizeOfResidentFile As Long
Public FastTierDataFillRatio As UShort
Public SlowTierDataFillRatio As UShort
Public DestagesFastTierToSlowTierRate As UInteger
Public MetadataChecksumType As UShort
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Public Reserved0() As Byte
Public DriverMajorVersion As UInteger
Public DriverMinorVersion As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=7)> Public Reserved() As Long
End Structureimport ctypes
from ctypes import wintypes
class REFS_VOLUME_DATA_BUFFER(ctypes.Structure):
_fields_ = [
("ByteCount", wintypes.DWORD),
("MajorVersion", wintypes.DWORD),
("MinorVersion", wintypes.DWORD),
("BytesPerPhysicalSector", wintypes.DWORD),
("VolumeSerialNumber", ctypes.c_longlong),
("NumberSectors", ctypes.c_longlong),
("TotalClusters", ctypes.c_longlong),
("FreeClusters", ctypes.c_longlong),
("TotalReserved", ctypes.c_longlong),
("BytesPerSector", wintypes.DWORD),
("BytesPerCluster", wintypes.DWORD),
("MaximumSizeOfResidentFile", ctypes.c_longlong),
("FastTierDataFillRatio", ctypes.c_ushort),
("SlowTierDataFillRatio", ctypes.c_ushort),
("DestagesFastTierToSlowTierRate", wintypes.DWORD),
("MetadataChecksumType", ctypes.c_ushort),
("Reserved0", ctypes.c_ubyte * 6),
("DriverMajorVersion", wintypes.DWORD),
("DriverMinorVersion", wintypes.DWORD),
("Reserved", ctypes.c_longlong * 7),
]#[repr(C)]
pub struct REFS_VOLUME_DATA_BUFFER {
pub ByteCount: u32,
pub MajorVersion: u32,
pub MinorVersion: u32,
pub BytesPerPhysicalSector: u32,
pub VolumeSerialNumber: i64,
pub NumberSectors: i64,
pub TotalClusters: i64,
pub FreeClusters: i64,
pub TotalReserved: i64,
pub BytesPerSector: u32,
pub BytesPerCluster: u32,
pub MaximumSizeOfResidentFile: i64,
pub FastTierDataFillRatio: u16,
pub SlowTierDataFillRatio: u16,
pub DestagesFastTierToSlowTierRate: u32,
pub MetadataChecksumType: u16,
pub Reserved0: [u8; 6],
pub DriverMajorVersion: u32,
pub DriverMinorVersion: u32,
pub Reserved: [i64; 7],
}import "golang.org/x/sys/windows"
type REFS_VOLUME_DATA_BUFFER struct {
ByteCount uint32
MajorVersion uint32
MinorVersion uint32
BytesPerPhysicalSector uint32
VolumeSerialNumber int64
NumberSectors int64
TotalClusters int64
FreeClusters int64
TotalReserved int64
BytesPerSector uint32
BytesPerCluster uint32
MaximumSizeOfResidentFile int64
FastTierDataFillRatio uint16
SlowTierDataFillRatio uint16
DestagesFastTierToSlowTierRate uint32
MetadataChecksumType uint16
Reserved0 [6]byte
DriverMajorVersion uint32
DriverMinorVersion uint32
Reserved [7]int64
}type
REFS_VOLUME_DATA_BUFFER = record
ByteCount: DWORD;
MajorVersion: DWORD;
MinorVersion: DWORD;
BytesPerPhysicalSector: DWORD;
VolumeSerialNumber: Int64;
NumberSectors: Int64;
TotalClusters: Int64;
FreeClusters: Int64;
TotalReserved: Int64;
BytesPerSector: DWORD;
BytesPerCluster: DWORD;
MaximumSizeOfResidentFile: Int64;
FastTierDataFillRatio: Word;
SlowTierDataFillRatio: Word;
DestagesFastTierToSlowTierRate: DWORD;
MetadataChecksumType: Word;
Reserved0: array[0..5] of Byte;
DriverMajorVersion: DWORD;
DriverMinorVersion: DWORD;
Reserved: array[0..6] of Int64;
end;const REFS_VOLUME_DATA_BUFFER = extern struct {
ByteCount: u32,
MajorVersion: u32,
MinorVersion: u32,
BytesPerPhysicalSector: u32,
VolumeSerialNumber: i64,
NumberSectors: i64,
TotalClusters: i64,
FreeClusters: i64,
TotalReserved: i64,
BytesPerSector: u32,
BytesPerCluster: u32,
MaximumSizeOfResidentFile: i64,
FastTierDataFillRatio: u16,
SlowTierDataFillRatio: u16,
DestagesFastTierToSlowTierRate: u32,
MetadataChecksumType: u16,
Reserved0: [6]u8,
DriverMajorVersion: u32,
DriverMinorVersion: u32,
Reserved: [7]i64,
};type
REFS_VOLUME_DATA_BUFFER {.bycopy.} = object
ByteCount: uint32
MajorVersion: uint32
MinorVersion: uint32
BytesPerPhysicalSector: uint32
VolumeSerialNumber: int64
NumberSectors: int64
TotalClusters: int64
FreeClusters: int64
TotalReserved: int64
BytesPerSector: uint32
BytesPerCluster: uint32
MaximumSizeOfResidentFile: int64
FastTierDataFillRatio: uint16
SlowTierDataFillRatio: uint16
DestagesFastTierToSlowTierRate: uint32
MetadataChecksumType: uint16
Reserved0: array[6, uint8]
DriverMajorVersion: uint32
DriverMinorVersion: uint32
Reserved: array[7, int64]struct REFS_VOLUME_DATA_BUFFER
{
uint ByteCount;
uint MajorVersion;
uint MinorVersion;
uint BytesPerPhysicalSector;
long VolumeSerialNumber;
long NumberSectors;
long TotalClusters;
long FreeClusters;
long TotalReserved;
uint BytesPerSector;
uint BytesPerCluster;
long MaximumSizeOfResidentFile;
ushort FastTierDataFillRatio;
ushort SlowTierDataFillRatio;
uint DestagesFastTierToSlowTierRate;
ushort MetadataChecksumType;
ubyte[6] Reserved0;
uint DriverMajorVersion;
uint DriverMinorVersion;
long[7] Reserved;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; REFS_VOLUME_DATA_BUFFER サイズ: 152 バイト(x64)
dim st, 38 ; 4byte整数×38(構造体サイズ 152 / 4 切り上げ)
; ByteCount : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; MajorVersion : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; MinorVersion : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; BytesPerPhysicalSector : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; VolumeSerialNumber : LONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; NumberSectors : LONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; TotalClusters : LONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; FreeClusters : LONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; TotalReserved : LONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; BytesPerSector : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; BytesPerCluster : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; MaximumSizeOfResidentFile : LONGLONG (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; FastTierDataFillRatio : WORD (+72, 2byte) wpoke st,72,値 / 値 = wpeek(st,72)
; SlowTierDataFillRatio : WORD (+74, 2byte) wpoke st,74,値 / 値 = wpeek(st,74)
; DestagesFastTierToSlowTierRate : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; MetadataChecksumType : WORD (+80, 2byte) wpoke st,80,値 / 値 = wpeek(st,80)
; Reserved0 : BYTE (+82, 6byte) varptr(st)+82 を基点に操作(6byte:入れ子/配列)
; DriverMajorVersion : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; DriverMinorVersion : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; Reserved : LONGLONG (+96, 56byte) varptr(st)+96 を基点に操作(56byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global REFS_VOLUME_DATA_BUFFER
#field int ByteCount
#field int MajorVersion
#field int MinorVersion
#field int BytesPerPhysicalSector
#field int64 VolumeSerialNumber
#field int64 NumberSectors
#field int64 TotalClusters
#field int64 FreeClusters
#field int64 TotalReserved
#field int BytesPerSector
#field int BytesPerCluster
#field int64 MaximumSizeOfResidentFile
#field short FastTierDataFillRatio
#field short SlowTierDataFillRatio
#field int DestagesFastTierToSlowTierRate
#field short MetadataChecksumType
#field byte Reserved0 6
#field int DriverMajorVersion
#field int DriverMinorVersion
#field int64 Reserved 7
#endstruct
stdim st, REFS_VOLUME_DATA_BUFFER ; NSTRUCT 変数を確保
st->ByteCount = 100
mes "ByteCount=" + st->ByteCount