Win32 API 日本語リファレンス
ホームStorage.FileSystem › TXF_LOG_RECORD_TRUNCATE

TXF_LOG_RECORD_TRUNCATE

構造体
サイズx64: 60 バイト / x86: 60 バイトパッキング4

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

フィールド

フィールドサイズx64x86説明
VersionWORD2+0+0ログレコードのバージョン番号。
RecordTypeWORD2+2+2ログレコードの種類。切り詰めレコードを示す。
RecordLengthDWORD4+4+4ログレコード全体のバイト長。
FlagsDWORD4+8+8切り詰めに関するフラグ。
TxfFileIdTXF_ID16+12+12対象ファイルのTxFファイルID。
KtmGuidGUID16+28+28関連するKTMトランザクションのGUID。
NewFileSizeLONGLONG8+44+44切り詰め後の新しいファイルサイズ。バイト単位。
FileNameLengthDWORD4+52+52ファイル名のバイト長。
FileNameByteOffsetInStructureDWORD4+56+56本構造体内のファイル名へのオフセット。バイト単位。

各言語での定義

#include <windows.h>

// TXF_ID  (x64 16 / x86 16 バイト)
#pragma pack(push, 4)
typedef struct TXF_ID {
    _Anonymous_e__Struct Anonymous;
} TXF_ID;
#pragma pack(pop)

// TXF_LOG_RECORD_TRUNCATE  (x64 60 / x86 60 バイト)
#pragma pack(push, 4)
typedef struct TXF_LOG_RECORD_TRUNCATE {
    WORD Version;
    WORD RecordType;
    DWORD RecordLength;
    DWORD Flags;
    TXF_ID TxfFileId;
    GUID KtmGuid;
    LONGLONG NewFileSize;
    DWORD FileNameLength;
    DWORD FileNameByteOffsetInStructure;
} TXF_LOG_RECORD_TRUNCATE;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct TXF_ID
{
    public _Anonymous_e__Struct Anonymous;
}

[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct TXF_LOG_RECORD_TRUNCATE
{
    public ushort Version;
    public ushort RecordType;
    public uint RecordLength;
    public uint Flags;
    public TXF_ID TxfFileId;
    public Guid KtmGuid;
    public long NewFileSize;
    public uint FileNameLength;
    public uint FileNameByteOffsetInStructure;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure TXF_ID
    Public Anonymous As _Anonymous_e__Struct
End Structure

<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure TXF_LOG_RECORD_TRUNCATE
    Public Version As UShort
    Public RecordType As UShort
    Public RecordLength As UInteger
    Public Flags As UInteger
    Public TxfFileId As TXF_ID
    Public KtmGuid As Guid
    Public NewFileSize As Long
    Public FileNameLength As UInteger
    Public FileNameByteOffsetInStructure As UInteger
End Structure
import ctypes
from ctypes import wintypes

class TXF_ID(ctypes.Structure):
    _pack_ = 4
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
    ]

class TXF_LOG_RECORD_TRUNCATE(ctypes.Structure):
    _pack_ = 4
    _fields_ = [
        ("Version", ctypes.c_ushort),
        ("RecordType", ctypes.c_ushort),
        ("RecordLength", wintypes.DWORD),
        ("Flags", wintypes.DWORD),
        ("TxfFileId", TXF_ID),
        ("KtmGuid", GUID),
        ("NewFileSize", ctypes.c_longlong),
        ("FileNameLength", wintypes.DWORD),
        ("FileNameByteOffsetInStructure", wintypes.DWORD),
    ]
#[repr(C, packed(4))]
pub struct TXF_ID {
    pub Anonymous: _Anonymous_e__Struct,
}

#[repr(C, packed(4))]
pub struct TXF_LOG_RECORD_TRUNCATE {
    pub Version: u16,
    pub RecordType: u16,
    pub RecordLength: u32,
    pub Flags: u32,
    pub TxfFileId: TXF_ID,
    pub KtmGuid: GUID,
    pub NewFileSize: i64,
    pub FileNameLength: u32,
    pub FileNameByteOffsetInStructure: u32,
}
import "golang.org/x/sys/windows"

type TXF_ID struct {
	Anonymous _Anonymous_e__Struct
}

type TXF_LOG_RECORD_TRUNCATE struct {
	Version uint16
	RecordType uint16
	RecordLength uint32
	Flags uint32
	TxfFileId TXF_ID
	KtmGuid windows.GUID
	NewFileSize int64
	FileNameLength uint32
	FileNameByteOffsetInStructure uint32
}
type
  TXF_ID = packed record
    Anonymous: _Anonymous_e__Struct;
  end;

  TXF_LOG_RECORD_TRUNCATE = packed record
    Version: Word;
    RecordType: Word;
    RecordLength: DWORD;
    Flags: DWORD;
    TxfFileId: TXF_ID;
    KtmGuid: TGUID;
    NewFileSize: Int64;
    FileNameLength: DWORD;
    FileNameByteOffsetInStructure: DWORD;
  end;
const TXF_ID = extern struct {
    Anonymous: _Anonymous_e__Struct,
};

const TXF_LOG_RECORD_TRUNCATE = extern struct {
    Version: u16,
    RecordType: u16,
    RecordLength: u32,
    Flags: u32,
    TxfFileId: TXF_ID,
    KtmGuid: GUID,
    NewFileSize: i64,
    FileNameLength: u32,
    FileNameByteOffsetInStructure: u32,
};
type
  TXF_ID {.packed.} = object
    Anonymous: _Anonymous_e__Struct

  TXF_LOG_RECORD_TRUNCATE {.packed.} = object
    Version: uint16
    RecordType: uint16
    RecordLength: uint32
    Flags: uint32
    TxfFileId: TXF_ID
    KtmGuid: GUID
    NewFileSize: int64
    FileNameLength: uint32
    FileNameByteOffsetInStructure: uint32
align(4)
struct TXF_ID
{
    _Anonymous_e__Struct Anonymous;
}

align(4)
struct TXF_LOG_RECORD_TRUNCATE
{
    ushort Version;
    ushort RecordType;
    uint RecordLength;
    uint Flags;
    TXF_ID TxfFileId;
    GUID KtmGuid;
    long NewFileSize;
    uint FileNameLength;
    uint FileNameByteOffsetInStructure;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; TXF_LOG_RECORD_TRUNCATE サイズ: 60 バイト(x64)
dim st, 15    ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; Version : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; RecordType : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; RecordLength : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Flags : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; TxfFileId : TXF_ID (+12, 16byte)  varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; KtmGuid : GUID (+28, 16byte)  varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; NewFileSize : LONGLONG (+44, 8byte)  qpoke st,44,値 / qpeek(st,44)  ※IronHSPのみ。3.7/3.8は lpoke st,44,下位 : lpoke st,48,上位
; FileNameLength : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; FileNameByteOffsetInStructure : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global TXF_ID, pack=4
    #field _Anonymous_e__Struct Anonymous
#endstruct

#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global TXF_LOG_RECORD_TRUNCATE, pack=4
    #field short Version
    #field short RecordType
    #field int RecordLength
    #field int Flags
    #field TXF_ID TxfFileId
    #field GUID KtmGuid
    #field int64 NewFileSize
    #field int FileNameLength
    #field int FileNameByteOffsetInStructure
#endstruct

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