ホーム › Storage.FileSystem › TXF_LOG_RECORD_WRITE
TXF_LOG_RECORD_WRITE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Version | WORD | 2 | +0 | +0 | ログレコードのバージョン番号。 |
| RecordType | WORD | 2 | +2 | +2 | ログレコードの種類。書き込みレコードを示す。 |
| RecordLength | DWORD | 4 | +4 | +4 | ログレコード全体のバイト長。 |
| Flags | DWORD | 4 | +8 | +8 | 書き込みに関するフラグ。 |
| TxfFileId | TXF_ID | 16 | +12 | +12 | 対象ファイルのTxFファイルID。 |
| KtmGuid | GUID | 16 | +28 | +28 | 関連するKTMトランザクションのGUID。 |
| ByteOffsetInFile | LONGLONG | 8 | +44 | +44 | ファイル内の書き込み開始オフセット。バイト単位。 |
| NumBytesWritten | DWORD | 4 | +52 | +52 | 書き込まれたバイト数。 |
| ByteOffsetInStructure | DWORD | 4 | +56 | +56 | 本構造体内のデータ部へのオフセット。バイト単位。 |
| FileNameLength | DWORD | 4 | +60 | +60 | ファイル名のバイト長。 |
| FileNameByteOffsetInStructure | DWORD | 4 | +64 | +64 | 本構造体内のファイル名へのオフセット。バイト単位。 |
各言語での定義
#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_WRITE (x64 68 / x86 68 バイト)
#pragma pack(push, 4)
typedef struct TXF_LOG_RECORD_WRITE {
WORD Version;
WORD RecordType;
DWORD RecordLength;
DWORD Flags;
TXF_ID TxfFileId;
GUID KtmGuid;
LONGLONG ByteOffsetInFile;
DWORD NumBytesWritten;
DWORD ByteOffsetInStructure;
DWORD FileNameLength;
DWORD FileNameByteOffsetInStructure;
} TXF_LOG_RECORD_WRITE;
#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_WRITE
{
public ushort Version;
public ushort RecordType;
public uint RecordLength;
public uint Flags;
public TXF_ID TxfFileId;
public Guid KtmGuid;
public long ByteOffsetInFile;
public uint NumBytesWritten;
public uint ByteOffsetInStructure;
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_WRITE
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 ByteOffsetInFile As Long
Public NumBytesWritten As UInteger
Public ByteOffsetInStructure As UInteger
Public FileNameLength As UInteger
Public FileNameByteOffsetInStructure As UInteger
End Structureimport ctypes
from ctypes import wintypes
class TXF_ID(ctypes.Structure):
_pack_ = 4
_fields_ = [
("Anonymous", _Anonymous_e__Struct),
]
class TXF_LOG_RECORD_WRITE(ctypes.Structure):
_pack_ = 4
_fields_ = [
("Version", ctypes.c_ushort),
("RecordType", ctypes.c_ushort),
("RecordLength", wintypes.DWORD),
("Flags", wintypes.DWORD),
("TxfFileId", TXF_ID),
("KtmGuid", GUID),
("ByteOffsetInFile", ctypes.c_longlong),
("NumBytesWritten", wintypes.DWORD),
("ByteOffsetInStructure", wintypes.DWORD),
("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_WRITE {
pub Version: u16,
pub RecordType: u16,
pub RecordLength: u32,
pub Flags: u32,
pub TxfFileId: TXF_ID,
pub KtmGuid: GUID,
pub ByteOffsetInFile: i64,
pub NumBytesWritten: u32,
pub ByteOffsetInStructure: u32,
pub FileNameLength: u32,
pub FileNameByteOffsetInStructure: u32,
}import "golang.org/x/sys/windows"
type TXF_ID struct {
Anonymous _Anonymous_e__Struct
}
type TXF_LOG_RECORD_WRITE struct {
Version uint16
RecordType uint16
RecordLength uint32
Flags uint32
TxfFileId TXF_ID
KtmGuid windows.GUID
ByteOffsetInFile int64
NumBytesWritten uint32
ByteOffsetInStructure uint32
FileNameLength uint32
FileNameByteOffsetInStructure uint32
}type
TXF_ID = packed record
Anonymous: _Anonymous_e__Struct;
end;
TXF_LOG_RECORD_WRITE = packed record
Version: Word;
RecordType: Word;
RecordLength: DWORD;
Flags: DWORD;
TxfFileId: TXF_ID;
KtmGuid: TGUID;
ByteOffsetInFile: Int64;
NumBytesWritten: DWORD;
ByteOffsetInStructure: DWORD;
FileNameLength: DWORD;
FileNameByteOffsetInStructure: DWORD;
end;const TXF_ID = extern struct {
Anonymous: _Anonymous_e__Struct,
};
const TXF_LOG_RECORD_WRITE = extern struct {
Version: u16,
RecordType: u16,
RecordLength: u32,
Flags: u32,
TxfFileId: TXF_ID,
KtmGuid: GUID,
ByteOffsetInFile: i64,
NumBytesWritten: u32,
ByteOffsetInStructure: u32,
FileNameLength: u32,
FileNameByteOffsetInStructure: u32,
};type
TXF_ID {.packed.} = object
Anonymous: _Anonymous_e__Struct
TXF_LOG_RECORD_WRITE {.packed.} = object
Version: uint16
RecordType: uint16
RecordLength: uint32
Flags: uint32
TxfFileId: TXF_ID
KtmGuid: GUID
ByteOffsetInFile: int64
NumBytesWritten: uint32
ByteOffsetInStructure: uint32
FileNameLength: uint32
FileNameByteOffsetInStructure: uint32align(4)
struct TXF_ID
{
_Anonymous_e__Struct Anonymous;
}
align(4)
struct TXF_LOG_RECORD_WRITE
{
ushort Version;
ushort RecordType;
uint RecordLength;
uint Flags;
TXF_ID TxfFileId;
GUID KtmGuid;
long ByteOffsetInFile;
uint NumBytesWritten;
uint ByteOffsetInStructure;
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_WRITE サイズ: 68 バイト(x64)
dim st, 17 ; 4byte整数×17(構造体サイズ 68 / 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:入れ子/配列)
; ByteOffsetInFile : LONGLONG (+44, 8byte) qpoke st,44,値 / qpeek(st,44) ※IronHSPのみ。3.7/3.8は lpoke st,44,下位 : lpoke st,48,上位
; NumBytesWritten : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; ByteOffsetInStructure : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; FileNameLength : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; FileNameByteOffsetInStructure : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (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_WRITE, pack=4
#field short Version
#field short RecordType
#field int RecordLength
#field int Flags
#field TXF_ID TxfFileId
#field GUID KtmGuid
#field int64 ByteOffsetInFile
#field int NumBytesWritten
#field int ByteOffsetInStructure
#field int FileNameLength
#field int FileNameByteOffsetInStructure
#endstruct
stdim st, TXF_LOG_RECORD_WRITE ; NSTRUCT 変数を確保
st->Version = 100
mes "Version=" + st->Version