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

NTFS_EXTENDED_VOLUME_DATA

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

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

フィールド

フィールドサイズx64x86説明
ByteCountDWORD4+0+0この拡張データのバイト数。
MajorVersionWORD2+4+4NTFSのメジャーバージョン。
MinorVersionWORD2+6+6NTFSのマイナーバージョン。
BytesPerPhysicalSectorDWORD4+8+8物理セクタあたりのバイト数。
LfsMajorVersionWORD2+12+12ログファイルシステム(LFS)のメジャーバージョン。
LfsMinorVersionWORD2+14+14ログファイルシステム(LFS)のマイナーバージョン。
MaxDeviceTrimExtentCountDWORD4+16+16デバイスのTRIM操作で扱える最大エクステント数。
MaxDeviceTrimByteCountDWORD4+20+20デバイスのTRIM操作で扱える最大バイト数。
MaxVolumeTrimExtentCountDWORD4+24+24ボリュームのTRIM操作で扱える最大エクステント数。
MaxVolumeTrimByteCountDWORD4+28+28

- BytesPerCluster

指定したボリューム上のクラスターあたりのバイト数です。この値はクラスターファクターとも呼ばれます。

- BytesPerFileRecordSegment

ファイルレコードセグメントのバイト数です。

- BytesPerSector

指定したボリューム上のセクターあたりのバイト数です。

- ClustersPerFileRecordSegment

ファイルレコードセグメント内のクラスター数です。

- FreeClusters

指定したボリューム内の空きクラスター数です。

- Mft2StartLcn

マスターファイルテーブルのミラーの開始論理クラスター番号です。

- MftStartLcn

マスターファイルテーブルの開始論理クラスター番号です。

- MftValidDataLength

マスターファイルテーブルの長さ (バイト単位) です。

- MftZoneEnd

マスターファイルテーブルゾーンの終了論理クラスター番号です。

- MftZoneStart

マスターファイルテーブルゾーンの開始論理クラスター番号です。

- NumberSectors

指定したボリューム内のセクター数です。

- TotalClusters

指定したボリューム内の使用中および空きクラスターの合計数です。

- TotalReserved

指定したボリューム内の予約済みクラスター数です。

- VolumeSerialNumber

ボリュームのシリアル番号です。これは、オペレーティングシステムによってボリュームメディアに割り当てられる一意の番号です。

公式ドキュメント

ボリュームデータを表します。この構造体は FSCTL_GET_NTFS_VOLUME_DATA 制御コードに渡されます。

解説(Remarks)

予約済みクラスターとは、Windows が後で使用するために予約されている空きクラスターです。

NTFS_VOLUME_DATA_BUFFER 構造体は、FSCTL_GET_NTFS_VOLUME_DATA によって返される基本的な情報を表します。拡張ボリューム情報を取得するには、NTFS_VOLUME_DATA_BUFFER 構造体と NTFS_EXTENDED_VOLUME_DATA 構造体を合わせたサイズのバッファーを渡します。成功すると、FSCTL_GET_NTFS_VOLUME_DATA が返すバッファーには、両方の構造体に関連付けられた情報が格納されます。NTFS_VOLUME_DATA_BUFFER 構造体は常にバッファーの先頭から格納され、その直後に NTFS_EXTENDED_VOLUME_DATA 構造体が続きます。NTFS_EXTENDED_VOLUME_DATA 構造体は次のように定義されています。

C++
typedef struct {
    ULONG ByteCount;
    USHORT MajorVersion;
    USHORT MinorVersion;
} NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA;
この構造体には、NTFS ボリュームのメジャーバージョンとマイナーバージョンの情報が格納されます。ByteCount メンバーは、FSCTL_GET_NTFS_VOLUME_DATA の呼び出しでこの構造体に使用された出力バッファーの合計バイト数を返します。渡されたバッファーがこの構造体を格納できる十分な大きさであれば、この値は sizeof(NTFS_EXTENDED_VOLUME_DATA) になります。そうでない場合、値は sizeof(NTFS_EXTENDED_VOLUME_DATA) より小さくなります。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// NTFS_EXTENDED_VOLUME_DATA  (x64 32 / x86 32 バイト)
typedef struct NTFS_EXTENDED_VOLUME_DATA {
    DWORD ByteCount;
    WORD MajorVersion;
    WORD MinorVersion;
    DWORD BytesPerPhysicalSector;
    WORD LfsMajorVersion;
    WORD LfsMinorVersion;
    DWORD MaxDeviceTrimExtentCount;
    DWORD MaxDeviceTrimByteCount;
    DWORD MaxVolumeTrimExtentCount;
    DWORD MaxVolumeTrimByteCount;
} NTFS_EXTENDED_VOLUME_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NTFS_EXTENDED_VOLUME_DATA
{
    public uint ByteCount;
    public ushort MajorVersion;
    public ushort MinorVersion;
    public uint BytesPerPhysicalSector;
    public ushort LfsMajorVersion;
    public ushort LfsMinorVersion;
    public uint MaxDeviceTrimExtentCount;
    public uint MaxDeviceTrimByteCount;
    public uint MaxVolumeTrimExtentCount;
    public uint MaxVolumeTrimByteCount;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NTFS_EXTENDED_VOLUME_DATA
    Public ByteCount As UInteger
    Public MajorVersion As UShort
    Public MinorVersion As UShort
    Public BytesPerPhysicalSector As UInteger
    Public LfsMajorVersion As UShort
    Public LfsMinorVersion As UShort
    Public MaxDeviceTrimExtentCount As UInteger
    Public MaxDeviceTrimByteCount As UInteger
    Public MaxVolumeTrimExtentCount As UInteger
    Public MaxVolumeTrimByteCount As UInteger
End Structure
import ctypes
from ctypes import wintypes

class NTFS_EXTENDED_VOLUME_DATA(ctypes.Structure):
    _fields_ = [
        ("ByteCount", wintypes.DWORD),
        ("MajorVersion", ctypes.c_ushort),
        ("MinorVersion", ctypes.c_ushort),
        ("BytesPerPhysicalSector", wintypes.DWORD),
        ("LfsMajorVersion", ctypes.c_ushort),
        ("LfsMinorVersion", ctypes.c_ushort),
        ("MaxDeviceTrimExtentCount", wintypes.DWORD),
        ("MaxDeviceTrimByteCount", wintypes.DWORD),
        ("MaxVolumeTrimExtentCount", wintypes.DWORD),
        ("MaxVolumeTrimByteCount", wintypes.DWORD),
    ]
#[repr(C)]
pub struct NTFS_EXTENDED_VOLUME_DATA {
    pub ByteCount: u32,
    pub MajorVersion: u16,
    pub MinorVersion: u16,
    pub BytesPerPhysicalSector: u32,
    pub LfsMajorVersion: u16,
    pub LfsMinorVersion: u16,
    pub MaxDeviceTrimExtentCount: u32,
    pub MaxDeviceTrimByteCount: u32,
    pub MaxVolumeTrimExtentCount: u32,
    pub MaxVolumeTrimByteCount: u32,
}
import "golang.org/x/sys/windows"

type NTFS_EXTENDED_VOLUME_DATA struct {
	ByteCount uint32
	MajorVersion uint16
	MinorVersion uint16
	BytesPerPhysicalSector uint32
	LfsMajorVersion uint16
	LfsMinorVersion uint16
	MaxDeviceTrimExtentCount uint32
	MaxDeviceTrimByteCount uint32
	MaxVolumeTrimExtentCount uint32
	MaxVolumeTrimByteCount uint32
}
type
  NTFS_EXTENDED_VOLUME_DATA = record
    ByteCount: DWORD;
    MajorVersion: Word;
    MinorVersion: Word;
    BytesPerPhysicalSector: DWORD;
    LfsMajorVersion: Word;
    LfsMinorVersion: Word;
    MaxDeviceTrimExtentCount: DWORD;
    MaxDeviceTrimByteCount: DWORD;
    MaxVolumeTrimExtentCount: DWORD;
    MaxVolumeTrimByteCount: DWORD;
  end;
const NTFS_EXTENDED_VOLUME_DATA = extern struct {
    ByteCount: u32,
    MajorVersion: u16,
    MinorVersion: u16,
    BytesPerPhysicalSector: u32,
    LfsMajorVersion: u16,
    LfsMinorVersion: u16,
    MaxDeviceTrimExtentCount: u32,
    MaxDeviceTrimByteCount: u32,
    MaxVolumeTrimExtentCount: u32,
    MaxVolumeTrimByteCount: u32,
};
type
  NTFS_EXTENDED_VOLUME_DATA {.bycopy.} = object
    ByteCount: uint32
    MajorVersion: uint16
    MinorVersion: uint16
    BytesPerPhysicalSector: uint32
    LfsMajorVersion: uint16
    LfsMinorVersion: uint16
    MaxDeviceTrimExtentCount: uint32
    MaxDeviceTrimByteCount: uint32
    MaxVolumeTrimExtentCount: uint32
    MaxVolumeTrimByteCount: uint32
struct NTFS_EXTENDED_VOLUME_DATA
{
    uint ByteCount;
    ushort MajorVersion;
    ushort MinorVersion;
    uint BytesPerPhysicalSector;
    ushort LfsMajorVersion;
    ushort LfsMinorVersion;
    uint MaxDeviceTrimExtentCount;
    uint MaxDeviceTrimByteCount;
    uint MaxVolumeTrimExtentCount;
    uint MaxVolumeTrimByteCount;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NTFS_EXTENDED_VOLUME_DATA サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; ByteCount : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; MajorVersion : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; MinorVersion : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; BytesPerPhysicalSector : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; LfsMajorVersion : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; LfsMinorVersion : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; MaxDeviceTrimExtentCount : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; MaxDeviceTrimByteCount : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; MaxVolumeTrimExtentCount : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; MaxVolumeTrimByteCount : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NTFS_EXTENDED_VOLUME_DATA
    #field int ByteCount
    #field short MajorVersion
    #field short MinorVersion
    #field int BytesPerPhysicalSector
    #field short LfsMajorVersion
    #field short LfsMinorVersion
    #field int MaxDeviceTrimExtentCount
    #field int MaxDeviceTrimByteCount
    #field int MaxVolumeTrimExtentCount
    #field int MaxVolumeTrimByteCount
#endstruct

stdim st, NTFS_EXTENDED_VOLUME_DATA        ; NSTRUCT 変数を確保
st->ByteCount = 100
mes "ByteCount=" + st->ByteCount