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

MFT_ENUM_DATA_V1

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

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

フィールド

フィールドサイズx64x86説明
StartFileReferenceNumberULONGLONG8+0+0列挙を開始するファイル参照番号(FRN)。
LowUsnLONGLONG8+8+8列挙対象とするUSNの下限。
HighUsnLONGLONG8+16+16列挙対象とするUSNの上限。
MinMajorVersionWORD2+24+24受け入れ可能なUSNレコードの最小メジャーバージョン。
MaxMajorVersionWORD2+26+26受け入れ可能なUSNレコードの最大メジャーバージョン。

各言語での定義

#include <windows.h>

// MFT_ENUM_DATA_V1  (x64 32 / x86 32 バイト)
typedef struct MFT_ENUM_DATA_V1 {
    ULONGLONG StartFileReferenceNumber;
    LONGLONG LowUsn;
    LONGLONG HighUsn;
    WORD MinMajorVersion;
    WORD MaxMajorVersion;
} MFT_ENUM_DATA_V1;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MFT_ENUM_DATA_V1
{
    public ulong StartFileReferenceNumber;
    public long LowUsn;
    public long HighUsn;
    public ushort MinMajorVersion;
    public ushort MaxMajorVersion;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MFT_ENUM_DATA_V1
    Public StartFileReferenceNumber As ULong
    Public LowUsn As Long
    Public HighUsn As Long
    Public MinMajorVersion As UShort
    Public MaxMajorVersion As UShort
End Structure
import ctypes
from ctypes import wintypes

class MFT_ENUM_DATA_V1(ctypes.Structure):
    _fields_ = [
        ("StartFileReferenceNumber", ctypes.c_ulonglong),
        ("LowUsn", ctypes.c_longlong),
        ("HighUsn", ctypes.c_longlong),
        ("MinMajorVersion", ctypes.c_ushort),
        ("MaxMajorVersion", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct MFT_ENUM_DATA_V1 {
    pub StartFileReferenceNumber: u64,
    pub LowUsn: i64,
    pub HighUsn: i64,
    pub MinMajorVersion: u16,
    pub MaxMajorVersion: u16,
}
import "golang.org/x/sys/windows"

type MFT_ENUM_DATA_V1 struct {
	StartFileReferenceNumber uint64
	LowUsn int64
	HighUsn int64
	MinMajorVersion uint16
	MaxMajorVersion uint16
}
type
  MFT_ENUM_DATA_V1 = record
    StartFileReferenceNumber: UInt64;
    LowUsn: Int64;
    HighUsn: Int64;
    MinMajorVersion: Word;
    MaxMajorVersion: Word;
  end;
const MFT_ENUM_DATA_V1 = extern struct {
    StartFileReferenceNumber: u64,
    LowUsn: i64,
    HighUsn: i64,
    MinMajorVersion: u16,
    MaxMajorVersion: u16,
};
type
  MFT_ENUM_DATA_V1 {.bycopy.} = object
    StartFileReferenceNumber: uint64
    LowUsn: int64
    HighUsn: int64
    MinMajorVersion: uint16
    MaxMajorVersion: uint16
struct MFT_ENUM_DATA_V1
{
    ulong StartFileReferenceNumber;
    long LowUsn;
    long HighUsn;
    ushort MinMajorVersion;
    ushort MaxMajorVersion;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MFT_ENUM_DATA_V1 サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; StartFileReferenceNumber : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; LowUsn : LONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; HighUsn : LONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; MinMajorVersion : WORD (+24, 2byte)  wpoke st,24,値  /  値 = wpeek(st,24)
; MaxMajorVersion : WORD (+26, 2byte)  wpoke st,26,値  /  値 = wpeek(st,26)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MFT_ENUM_DATA_V1
    #field int64 StartFileReferenceNumber
    #field int64 LowUsn
    #field int64 HighUsn
    #field short MinMajorVersion
    #field short MaxMajorVersion
#endstruct

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