ホーム › System.Ioctl › NTFS_EXTENDED_VOLUME_DATA
NTFS_EXTENDED_VOLUME_DATA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ByteCount | DWORD | 4 | +0 | +0 | この拡張データのバイト数。 |
| MajorVersion | WORD | 2 | +4 | +4 | NTFSのメジャーバージョン。 |
| MinorVersion | WORD | 2 | +6 | +6 | NTFSのマイナーバージョン。 |
| BytesPerPhysicalSector | DWORD | 4 | +8 | +8 | 物理セクタあたりのバイト数。 |
| LfsMajorVersion | WORD | 2 | +12 | +12 | ログファイルシステム(LFS)のメジャーバージョン。 |
| LfsMinorVersion | WORD | 2 | +14 | +14 | ログファイルシステム(LFS)のマイナーバージョン。 |
| MaxDeviceTrimExtentCount | DWORD | 4 | +16 | +16 | デバイスのTRIM操作で扱える最大エクステント数。 |
| MaxDeviceTrimByteCount | DWORD | 4 | +20 | +20 | デバイスのTRIM操作で扱える最大バイト数。 |
| MaxVolumeTrimExtentCount | DWORD | 4 | +24 | +24 | ボリュームのTRIM操作で扱える最大エクステント数。 |
| MaxVolumeTrimByteCount | DWORD | 4 | +28 | +28 | ボリュームのTRIM操作で扱える最大バイト数。 |
各言語での定義
#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 Structureimport 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: uint32struct 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