Win32 API 日本語リファレンス
ホームSystem.Ioctl › REFS_VOLUME_DATA_BUFFER

REFS_VOLUME_DATA_BUFFER

構造体
サイズx64: 152 バイト / x86: 152 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
ByteCountDWORD4+0+0この構造体のバイト数。
MajorVersionDWORD4+4+4ReFSのメジャーバージョン。
MinorVersionDWORD4+8+8ReFSのマイナーバージョン。
BytesPerPhysicalSectorDWORD4+12+12物理セクタあたりのバイト数。
VolumeSerialNumberLONGLONG8+16+16ボリュームのシリアル番号。
NumberSectorsLONGLONG8+24+24ボリュームの総セクタ数。
TotalClustersLONGLONG8+32+32ボリュームの総クラスタ数。
FreeClustersLONGLONG8+40+40空きクラスタ数。
TotalReservedLONGLONG8+48+48予約済みクラスタ数。
BytesPerSectorDWORD4+56+561セクタあたりのバイト数。
BytesPerClusterDWORD4+60+601クラスタあたりのバイト数。
MaximumSizeOfResidentFileLONGLONG8+64+64常駐(レジデント)ファイルとして格納できる最大サイズ。
FastTierDataFillRatioWORD2+72+72高速ティアのデータ充填率。
SlowTierDataFillRatioWORD2+74+74低速ティアのデータ充填率。
DestagesFastTierToSlowTierRateDWORD4+76+76高速ティアから低速ティアへのデステージ速度。
MetadataChecksumTypeWORD2+80+80メタデータのチェックサム種別。
Reserved0BYTE6+82+82予約領域。ゼロを設定する。
DriverMajorVersionDWORD4+88+88ReFSドライバのメジャーバージョン。
DriverMinorVersionDWORD4+92+92ReFSドライバのマイナーバージョン。
ReservedLONGLONG56+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 Structure
import 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