ホーム › System.Ioctl › USN_JOURNAL_DATA_V2
USN_JOURNAL_DATA_V2
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| UsnJournalID | ULONGLONG | 8 | +0 | +0 | USN変更ジャーナルを一意に識別する64ビットID。ジャーナル削除・再作成で変化する。 |
| FirstUsn | LONGLONG | 8 | +8 | +8 | ジャーナル内で利用可能な最初のUSN番号。これより前のレコードは破棄済みである。 |
| NextUsn | LONGLONG | 8 | +16 | +16 | 次に割り当てられるUSN番号。現時点のジャーナル末尾位置を示す。 |
| LowestValidUsn | LONGLONG | 8 | +24 | +24 | 現ジャーナルインスタンスで有効な最小のUSN。これ未満は無効である。 |
| MaxUsn | LONGLONG | 8 | +32 | +32 | このボリュームで割り当て可能なUSNの最大値。到達するとジャーナル再作成が必要となる。 |
| MaximumSize | ULONGLONG | 8 | +40 | +40 | ジャーナルが保持する最大サイズ(バイト)。超過分は古いレコードから削除される。 |
| AllocationDelta | ULONGLONG | 8 | +48 | +48 | ジャーナル拡張時に追加し縮小時に削除するサイズ単位(バイト)。 |
| MinSupportedMajorVersion | WORD | 2 | +56 | +56 | システムがサポートするUSNレコードの最小メジャーバージョン。 |
| MaxSupportedMajorVersion | WORD | 2 | +58 | +58 | システムがサポートするUSNレコードの最大メジャーバージョン。 |
| Flags | DWORD | 4 | +60 | +60 | ジャーナルのオプションフラグ。レンジトラッキング有効化(USN_TRACK_MODIFIED_RANGES_ENABLE)などを示す。 |
| RangeTrackChunkSize | ULONGLONG | 8 | +64 | +64 | レンジトラッキングで変更を集約する単位サイズ(バイト)。 |
| RangeTrackFileSizeThreshold | LONGLONG | 8 | +72 | +72 | レンジトラッキングを適用する対象ファイルの最小サイズしきい値(バイト)。 |
各言語での定義
#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 Structureimport 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: int64struct 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