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

READ_USN_JOURNAL_DATA_V0

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

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

フィールド

フィールドサイズx64x86説明
StartUsnLONGLONG8+0+0読み取りを開始するUSN。
ReasonMaskDWORD4+8+8対象とする変更理由を絞り込むビットマスク。
ReturnOnlyOnCloseDWORD4+12+12ファイルクローズ時のみレコードを返すかを示す値。
TimeoutULONGLONG8+16+16新規レコードを待機するタイムアウト時間。秒単位。
BytesToWaitForULONGLONG8+24+24待機を打ち切る前に蓄積を待つバイト数。
UsnJournalIDULONGLONG8+32+32対象USNジャーナルの識別子。

各言語での定義

#include <windows.h>

// READ_USN_JOURNAL_DATA_V0  (x64 40 / x86 40 バイト)
typedef struct READ_USN_JOURNAL_DATA_V0 {
    LONGLONG StartUsn;
    DWORD ReasonMask;
    DWORD ReturnOnlyOnClose;
    ULONGLONG Timeout;
    ULONGLONG BytesToWaitFor;
    ULONGLONG UsnJournalID;
} READ_USN_JOURNAL_DATA_V0;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct READ_USN_JOURNAL_DATA_V0
{
    public long StartUsn;
    public uint ReasonMask;
    public uint ReturnOnlyOnClose;
    public ulong Timeout;
    public ulong BytesToWaitFor;
    public ulong UsnJournalID;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure READ_USN_JOURNAL_DATA_V0
    Public StartUsn As Long
    Public ReasonMask As UInteger
    Public ReturnOnlyOnClose As UInteger
    Public Timeout As ULong
    Public BytesToWaitFor As ULong
    Public UsnJournalID As ULong
End Structure
import ctypes
from ctypes import wintypes

class READ_USN_JOURNAL_DATA_V0(ctypes.Structure):
    _fields_ = [
        ("StartUsn", ctypes.c_longlong),
        ("ReasonMask", wintypes.DWORD),
        ("ReturnOnlyOnClose", wintypes.DWORD),
        ("Timeout", ctypes.c_ulonglong),
        ("BytesToWaitFor", ctypes.c_ulonglong),
        ("UsnJournalID", ctypes.c_ulonglong),
    ]
#[repr(C)]
pub struct READ_USN_JOURNAL_DATA_V0 {
    pub StartUsn: i64,
    pub ReasonMask: u32,
    pub ReturnOnlyOnClose: u32,
    pub Timeout: u64,
    pub BytesToWaitFor: u64,
    pub UsnJournalID: u64,
}
import "golang.org/x/sys/windows"

type READ_USN_JOURNAL_DATA_V0 struct {
	StartUsn int64
	ReasonMask uint32
	ReturnOnlyOnClose uint32
	Timeout uint64
	BytesToWaitFor uint64
	UsnJournalID uint64
}
type
  READ_USN_JOURNAL_DATA_V0 = record
    StartUsn: Int64;
    ReasonMask: DWORD;
    ReturnOnlyOnClose: DWORD;
    Timeout: UInt64;
    BytesToWaitFor: UInt64;
    UsnJournalID: UInt64;
  end;
const READ_USN_JOURNAL_DATA_V0 = extern struct {
    StartUsn: i64,
    ReasonMask: u32,
    ReturnOnlyOnClose: u32,
    Timeout: u64,
    BytesToWaitFor: u64,
    UsnJournalID: u64,
};
type
  READ_USN_JOURNAL_DATA_V0 {.bycopy.} = object
    StartUsn: int64
    ReasonMask: uint32
    ReturnOnlyOnClose: uint32
    Timeout: uint64
    BytesToWaitFor: uint64
    UsnJournalID: uint64
struct READ_USN_JOURNAL_DATA_V0
{
    long StartUsn;
    uint ReasonMask;
    uint ReturnOnlyOnClose;
    ulong Timeout;
    ulong BytesToWaitFor;
    ulong UsnJournalID;
}

HSP用 定義

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

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

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