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

USN_JOURNAL_DATA_V2

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

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

フィールド

フィールドサイズx64x86説明
UsnJournalIDULONGLONG8+0+0現在のジャーナル識別子です。ジャーナルには作成時に新しい識別子が割り当てられ、その存続期間中に新しい識別子が付け直されることがあります。NTFS ファイルシステムは、この識別子を整合性チェックに使用します。
FirstUsnLONGLONG8+8+8ジャーナルから読み取ることができる最初のレコードの番号です。
NextUsnLONGLONG8+16+16ジャーナルに次に書き込まれるレコードの番号です。
LowestValidUsnLONGLONG8+24+24このジャーナルインスタンスでジャーナルに書き込まれた最初のレコードです。ボリューム上のファイルまたはディレクトリを列挙すると、この値より小さい USN が返されることがあります (つまり、FirstUsn メンバーの値が LowestValidUsn メンバーの値より小さくなる場合があります)。その場合、最後の USN が書き込まれた後にジャーナルへ新しい識別子が付け直されています。このとき、LowestValidUsn はジャーナルの不連続を示している可能性があり、ボリューム上の一部またはすべてのファイルやディレクトリに対する変更が変更ジャーナルに記録されていないことがあります。
MaxUsnLONGLONG8+32+32変更ジャーナルがサポートする最大の USN です。NextUsn の値がこの値に近づいた場合、管理者は変更ジャーナルを削除する必要があります。
MaximumSizeULONGLONG8+40+40変更ジャーナルの目標最大サイズ (バイト単位) です。変更ジャーナルはこの値より大きくなることがありますが、その場合は次の NTFS ファイルシステムのチェックポイントでこの値未満に切り詰められます。
AllocationDeltaULONGLONG8+48+48メモリの割り当てまたは解放が行われるたびに、変更ジャーナルの末尾に追加され、先頭から削除されるディスクメモリのバイト数です。つまり、割り当てと解放はこのサイズ単位で行われます。このメンバーには、クラスターサイズの整数倍が妥当な値です。
MinSupportedMajorVersionWORD2+56+56ファイルシステムがサポートする USN 変更ジャーナルの最小バージョンです。
MaxSupportedMajorVersionWORD2+58+58ファイルシステムがサポートする USN 変更ジャーナルの最大バージョンです。
FlagsDWORD4+60+60

範囲追跡が有効になっているかどうかを示します。Flags メンバーに指定できる値は次のとおりです。

意味
0x00000000
ボリュームに対して範囲追跡は有効になっていません。
FLAG_USN_TRACK_MODIFIED_RANGES_ENABLE
0x00000001
ボリュームに対して範囲追跡が有効になっています。
RangeTrackChunkSizeULONGLONG8+64+64追跡される範囲の粒度です。Flags メンバーに FLAG_USN_TRACK_MODIFIED_RANGES_ENABLE を設定した場合にのみ有効です。
RangeTrackFileSizeThresholdLONGLONG8+72+72範囲の追跡を開始するファイルサイズのしきい値です。このサイズ以上のファイルが追跡の対象になります。Flags メンバーに FLAG_USN_TRACK_MODIFIED_RANGES_ENABLE を設定した場合にのみ有効です。

公式ドキュメント

更新シーケンス番号 (USN) 変更ジャーナル、そのレコード、および容量を表します。この構造体は FSCTL_QUERY_USN_JOURNAL 制御コードの出力バッファーです。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// USN_JOURNAL_DATA_V2  (x64 80 / x86 80 バイト)
typedef struct USN_JOURNAL_DATA_V2 {
    ULONGLONG UsnJournalID;
    LONGLONG FirstUsn;
    LONGLONG NextUsn;
    LONGLONG LowestValidUsn;
    LONGLONG MaxUsn;
    ULONGLONG MaximumSize;
    ULONGLONG AllocationDelta;
    WORD MinSupportedMajorVersion;
    WORD MaxSupportedMajorVersion;
    DWORD Flags;
    ULONGLONG RangeTrackChunkSize;
    LONGLONG RangeTrackFileSizeThreshold;
} USN_JOURNAL_DATA_V2;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct USN_JOURNAL_DATA_V2
{
    public ulong UsnJournalID;
    public long FirstUsn;
    public long NextUsn;
    public long LowestValidUsn;
    public long MaxUsn;
    public ulong MaximumSize;
    public ulong AllocationDelta;
    public ushort MinSupportedMajorVersion;
    public ushort MaxSupportedMajorVersion;
    public uint Flags;
    public ulong RangeTrackChunkSize;
    public long RangeTrackFileSizeThreshold;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure USN_JOURNAL_DATA_V2
    Public UsnJournalID As ULong
    Public FirstUsn As Long
    Public NextUsn As Long
    Public LowestValidUsn As Long
    Public MaxUsn As Long
    Public MaximumSize As ULong
    Public AllocationDelta As ULong
    Public MinSupportedMajorVersion As UShort
    Public MaxSupportedMajorVersion As UShort
    Public Flags As UInteger
    Public RangeTrackChunkSize As ULong
    Public RangeTrackFileSizeThreshold As Long
End Structure
import ctypes
from ctypes import wintypes

class USN_JOURNAL_DATA_V2(ctypes.Structure):
    _fields_ = [
        ("UsnJournalID", ctypes.c_ulonglong),
        ("FirstUsn", ctypes.c_longlong),
        ("NextUsn", ctypes.c_longlong),
        ("LowestValidUsn", ctypes.c_longlong),
        ("MaxUsn", ctypes.c_longlong),
        ("MaximumSize", ctypes.c_ulonglong),
        ("AllocationDelta", ctypes.c_ulonglong),
        ("MinSupportedMajorVersion", ctypes.c_ushort),
        ("MaxSupportedMajorVersion", ctypes.c_ushort),
        ("Flags", wintypes.DWORD),
        ("RangeTrackChunkSize", ctypes.c_ulonglong),
        ("RangeTrackFileSizeThreshold", ctypes.c_longlong),
    ]
#[repr(C)]
pub struct USN_JOURNAL_DATA_V2 {
    pub UsnJournalID: u64,
    pub FirstUsn: i64,
    pub NextUsn: i64,
    pub LowestValidUsn: i64,
    pub MaxUsn: i64,
    pub MaximumSize: u64,
    pub AllocationDelta: u64,
    pub MinSupportedMajorVersion: u16,
    pub MaxSupportedMajorVersion: u16,
    pub Flags: u32,
    pub RangeTrackChunkSize: u64,
    pub RangeTrackFileSizeThreshold: i64,
}
import "golang.org/x/sys/windows"

type USN_JOURNAL_DATA_V2 struct {
	UsnJournalID uint64
	FirstUsn int64
	NextUsn int64
	LowestValidUsn int64
	MaxUsn int64
	MaximumSize uint64
	AllocationDelta uint64
	MinSupportedMajorVersion uint16
	MaxSupportedMajorVersion uint16
	Flags uint32
	RangeTrackChunkSize uint64
	RangeTrackFileSizeThreshold int64
}
type
  USN_JOURNAL_DATA_V2 = record
    UsnJournalID: UInt64;
    FirstUsn: Int64;
    NextUsn: Int64;
    LowestValidUsn: Int64;
    MaxUsn: Int64;
    MaximumSize: UInt64;
    AllocationDelta: UInt64;
    MinSupportedMajorVersion: Word;
    MaxSupportedMajorVersion: Word;
    Flags: DWORD;
    RangeTrackChunkSize: UInt64;
    RangeTrackFileSizeThreshold: Int64;
  end;
const USN_JOURNAL_DATA_V2 = extern struct {
    UsnJournalID: u64,
    FirstUsn: i64,
    NextUsn: i64,
    LowestValidUsn: i64,
    MaxUsn: i64,
    MaximumSize: u64,
    AllocationDelta: u64,
    MinSupportedMajorVersion: u16,
    MaxSupportedMajorVersion: u16,
    Flags: u32,
    RangeTrackChunkSize: u64,
    RangeTrackFileSizeThreshold: i64,
};
type
  USN_JOURNAL_DATA_V2 {.bycopy.} = object
    UsnJournalID: uint64
    FirstUsn: int64
    NextUsn: int64
    LowestValidUsn: int64
    MaxUsn: int64
    MaximumSize: uint64
    AllocationDelta: uint64
    MinSupportedMajorVersion: uint16
    MaxSupportedMajorVersion: uint16
    Flags: uint32
    RangeTrackChunkSize: uint64
    RangeTrackFileSizeThreshold: int64
struct USN_JOURNAL_DATA_V2
{
    ulong UsnJournalID;
    long FirstUsn;
    long NextUsn;
    long LowestValidUsn;
    long MaxUsn;
    ulong MaximumSize;
    ulong AllocationDelta;
    ushort MinSupportedMajorVersion;
    ushort MaxSupportedMajorVersion;
    uint Flags;
    ulong RangeTrackChunkSize;
    long RangeTrackFileSizeThreshold;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; USN_JOURNAL_DATA_V2 サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; UsnJournalID : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; FirstUsn : LONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; NextUsn : LONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; LowestValidUsn : LONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; MaxUsn : LONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; MaximumSize : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; AllocationDelta : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; MinSupportedMajorVersion : WORD (+56, 2byte)  wpoke st,56,値  /  値 = wpeek(st,56)
; MaxSupportedMajorVersion : WORD (+58, 2byte)  wpoke st,58,値  /  値 = wpeek(st,58)
; Flags : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; RangeTrackChunkSize : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; RangeTrackFileSizeThreshold : LONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global USN_JOURNAL_DATA_V2
    #field int64 UsnJournalID
    #field int64 FirstUsn
    #field int64 NextUsn
    #field int64 LowestValidUsn
    #field int64 MaxUsn
    #field int64 MaximumSize
    #field int64 AllocationDelta
    #field short MinSupportedMajorVersion
    #field short MaxSupportedMajorVersion
    #field int Flags
    #field int64 RangeTrackChunkSize
    #field int64 RangeTrackFileSizeThreshold
#endstruct

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