ホーム › System.Ioctl › TXFS_QUERY_RM_INFORMATION
TXFS_QUERY_RM_INFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| BytesRequired | DWORD | 4 | +0 | +0 | TmLogPath等の可変長データ格納に必要なバイト数。 |
| TailLsn | ULONGLONG | 8 | +8 | +8 | ログのテール(最も古い有効)ログシーケンス番号。 |
| CurrentLsn | ULONGLONG | 8 | +16 | +16 | 現在のログシーケンス番号。 |
| ArchiveTailLsn | ULONGLONG | 8 | +24 | +24 | アーカイブのテールログシーケンス番号。 |
| LogContainerSize | ULONGLONG | 8 | +32 | +32 | 各ログコンテナのサイズ(バイト)。 |
| HighestVirtualClock | LONGLONG | 8 | +40 | +40 | リソースマネージャの最高仮想クロック値。 |
| LogContainerCount | DWORD | 4 | +48 | +48 | 現在のログコンテナ数。 |
| LogContainerCountMax | DWORD | 4 | +52 | +52 | ログコンテナ数の上限。 |
| LogContainerCountMin | DWORD | 4 | +56 | +56 | ログコンテナ数の下限。 |
| LogGrowthIncrement | DWORD | 4 | +60 | +60 | ログ拡張時の増分(コンテナ数)。 |
| LogAutoShrinkPercentage | DWORD | 4 | +64 | +64 | ログ自動縮小をトリガする空き率のしきい値(%)。 |
| Flags | TXFS_RMF_LAGS | 4 | +68 | +68 | リソースマネージャの状態を示すフラグ。 |
| LoggingMode | WORD | 2 | +72 | +72 | ロギングモード(簡易/完全)を示す値。 |
| Reserved | WORD | 2 | +74 | +74 | 予約領域。0でなければならない。 |
| RmState | DWORD | 4 | +76 | +76 | リソースマネージャの現在の状態を示す値。 |
| LogCapacity | ULONGLONG | 8 | +80 | +80 | ログの総容量(バイト)。 |
| LogFree | ULONGLONG | 8 | +88 | +88 | ログの空き容量(バイト)。 |
| TopsSize | ULONGLONG | 8 | +96 | +96 | TOPS(Txfメタデータ)ストリームの総サイズ(バイト)。 |
| TopsUsed | ULONGLONG | 8 | +104 | +104 | TOPSストリームの使用済みサイズ(バイト)。 |
| TransactionCount | ULONGLONG | 8 | +112 | +112 | アクティブなトランザクション数。 |
| OnePCCount | ULONGLONG | 8 | +120 | +120 | 1フェーズコミット(1PC)が行われた回数。 |
| TwoPCCount | ULONGLONG | 8 | +128 | +128 | 2フェーズコミット(2PC)が行われた回数。 |
| NumberLogFileFull | ULONGLONG | 8 | +136 | +136 | ログファイルが満杯になった回数。 |
| OldestTransactionAge | ULONGLONG | 8 | +144 | +144 | 最も古いトランザクションの経過時間。 |
| RMName | GUID | 16 | +152 | +152 | リソースマネージャを識別するGUID。 |
| TmLogPathOffset | DWORD | 4 | +168 | +168 | 構造体先頭からTmLogPath文字列までのオフセット(バイト)。 |
各言語での定義
#include <windows.h>
// TXFS_QUERY_RM_INFORMATION (x64 176 / x86 176 バイト)
typedef struct TXFS_QUERY_RM_INFORMATION {
DWORD BytesRequired;
ULONGLONG TailLsn;
ULONGLONG CurrentLsn;
ULONGLONG ArchiveTailLsn;
ULONGLONG LogContainerSize;
LONGLONG HighestVirtualClock;
DWORD LogContainerCount;
DWORD LogContainerCountMax;
DWORD LogContainerCountMin;
DWORD LogGrowthIncrement;
DWORD LogAutoShrinkPercentage;
TXFS_RMF_LAGS Flags;
WORD LoggingMode;
WORD Reserved;
DWORD RmState;
ULONGLONG LogCapacity;
ULONGLONG LogFree;
ULONGLONG TopsSize;
ULONGLONG TopsUsed;
ULONGLONG TransactionCount;
ULONGLONG OnePCCount;
ULONGLONG TwoPCCount;
ULONGLONG NumberLogFileFull;
ULONGLONG OldestTransactionAge;
GUID RMName;
DWORD TmLogPathOffset;
} TXFS_QUERY_RM_INFORMATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct TXFS_QUERY_RM_INFORMATION
{
public uint BytesRequired;
public ulong TailLsn;
public ulong CurrentLsn;
public ulong ArchiveTailLsn;
public ulong LogContainerSize;
public long HighestVirtualClock;
public uint LogContainerCount;
public uint LogContainerCountMax;
public uint LogContainerCountMin;
public uint LogGrowthIncrement;
public uint LogAutoShrinkPercentage;
public uint Flags;
public ushort LoggingMode;
public ushort Reserved;
public uint RmState;
public ulong LogCapacity;
public ulong LogFree;
public ulong TopsSize;
public ulong TopsUsed;
public ulong TransactionCount;
public ulong OnePCCount;
public ulong TwoPCCount;
public ulong NumberLogFileFull;
public ulong OldestTransactionAge;
public Guid RMName;
public uint TmLogPathOffset;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure TXFS_QUERY_RM_INFORMATION
Public BytesRequired As UInteger
Public TailLsn As ULong
Public CurrentLsn As ULong
Public ArchiveTailLsn As ULong
Public LogContainerSize As ULong
Public HighestVirtualClock As Long
Public LogContainerCount As UInteger
Public LogContainerCountMax As UInteger
Public LogContainerCountMin As UInteger
Public LogGrowthIncrement As UInteger
Public LogAutoShrinkPercentage As UInteger
Public Flags As UInteger
Public LoggingMode As UShort
Public Reserved As UShort
Public RmState As UInteger
Public LogCapacity As ULong
Public LogFree As ULong
Public TopsSize As ULong
Public TopsUsed As ULong
Public TransactionCount As ULong
Public OnePCCount As ULong
Public TwoPCCount As ULong
Public NumberLogFileFull As ULong
Public OldestTransactionAge As ULong
Public RMName As Guid
Public TmLogPathOffset As UInteger
End Structureimport ctypes
from ctypes import wintypes
class TXFS_QUERY_RM_INFORMATION(ctypes.Structure):
_fields_ = [
("BytesRequired", wintypes.DWORD),
("TailLsn", ctypes.c_ulonglong),
("CurrentLsn", ctypes.c_ulonglong),
("ArchiveTailLsn", ctypes.c_ulonglong),
("LogContainerSize", ctypes.c_ulonglong),
("HighestVirtualClock", ctypes.c_longlong),
("LogContainerCount", wintypes.DWORD),
("LogContainerCountMax", wintypes.DWORD),
("LogContainerCountMin", wintypes.DWORD),
("LogGrowthIncrement", wintypes.DWORD),
("LogAutoShrinkPercentage", wintypes.DWORD),
("Flags", wintypes.DWORD),
("LoggingMode", ctypes.c_ushort),
("Reserved", ctypes.c_ushort),
("RmState", wintypes.DWORD),
("LogCapacity", ctypes.c_ulonglong),
("LogFree", ctypes.c_ulonglong),
("TopsSize", ctypes.c_ulonglong),
("TopsUsed", ctypes.c_ulonglong),
("TransactionCount", ctypes.c_ulonglong),
("OnePCCount", ctypes.c_ulonglong),
("TwoPCCount", ctypes.c_ulonglong),
("NumberLogFileFull", ctypes.c_ulonglong),
("OldestTransactionAge", ctypes.c_ulonglong),
("RMName", GUID),
("TmLogPathOffset", wintypes.DWORD),
]#[repr(C)]
pub struct TXFS_QUERY_RM_INFORMATION {
pub BytesRequired: u32,
pub TailLsn: u64,
pub CurrentLsn: u64,
pub ArchiveTailLsn: u64,
pub LogContainerSize: u64,
pub HighestVirtualClock: i64,
pub LogContainerCount: u32,
pub LogContainerCountMax: u32,
pub LogContainerCountMin: u32,
pub LogGrowthIncrement: u32,
pub LogAutoShrinkPercentage: u32,
pub Flags: u32,
pub LoggingMode: u16,
pub Reserved: u16,
pub RmState: u32,
pub LogCapacity: u64,
pub LogFree: u64,
pub TopsSize: u64,
pub TopsUsed: u64,
pub TransactionCount: u64,
pub OnePCCount: u64,
pub TwoPCCount: u64,
pub NumberLogFileFull: u64,
pub OldestTransactionAge: u64,
pub RMName: GUID,
pub TmLogPathOffset: u32,
}import "golang.org/x/sys/windows"
type TXFS_QUERY_RM_INFORMATION struct {
BytesRequired uint32
TailLsn uint64
CurrentLsn uint64
ArchiveTailLsn uint64
LogContainerSize uint64
HighestVirtualClock int64
LogContainerCount uint32
LogContainerCountMax uint32
LogContainerCountMin uint32
LogGrowthIncrement uint32
LogAutoShrinkPercentage uint32
Flags uint32
LoggingMode uint16
Reserved uint16
RmState uint32
LogCapacity uint64
LogFree uint64
TopsSize uint64
TopsUsed uint64
TransactionCount uint64
OnePCCount uint64
TwoPCCount uint64
NumberLogFileFull uint64
OldestTransactionAge uint64
RMName windows.GUID
TmLogPathOffset uint32
}type
TXFS_QUERY_RM_INFORMATION = record
BytesRequired: DWORD;
TailLsn: UInt64;
CurrentLsn: UInt64;
ArchiveTailLsn: UInt64;
LogContainerSize: UInt64;
HighestVirtualClock: Int64;
LogContainerCount: DWORD;
LogContainerCountMax: DWORD;
LogContainerCountMin: DWORD;
LogGrowthIncrement: DWORD;
LogAutoShrinkPercentage: DWORD;
Flags: DWORD;
LoggingMode: Word;
Reserved: Word;
RmState: DWORD;
LogCapacity: UInt64;
LogFree: UInt64;
TopsSize: UInt64;
TopsUsed: UInt64;
TransactionCount: UInt64;
OnePCCount: UInt64;
TwoPCCount: UInt64;
NumberLogFileFull: UInt64;
OldestTransactionAge: UInt64;
RMName: TGUID;
TmLogPathOffset: DWORD;
end;const TXFS_QUERY_RM_INFORMATION = extern struct {
BytesRequired: u32,
TailLsn: u64,
CurrentLsn: u64,
ArchiveTailLsn: u64,
LogContainerSize: u64,
HighestVirtualClock: i64,
LogContainerCount: u32,
LogContainerCountMax: u32,
LogContainerCountMin: u32,
LogGrowthIncrement: u32,
LogAutoShrinkPercentage: u32,
Flags: u32,
LoggingMode: u16,
Reserved: u16,
RmState: u32,
LogCapacity: u64,
LogFree: u64,
TopsSize: u64,
TopsUsed: u64,
TransactionCount: u64,
OnePCCount: u64,
TwoPCCount: u64,
NumberLogFileFull: u64,
OldestTransactionAge: u64,
RMName: GUID,
TmLogPathOffset: u32,
};type
TXFS_QUERY_RM_INFORMATION {.bycopy.} = object
BytesRequired: uint32
TailLsn: uint64
CurrentLsn: uint64
ArchiveTailLsn: uint64
LogContainerSize: uint64
HighestVirtualClock: int64
LogContainerCount: uint32
LogContainerCountMax: uint32
LogContainerCountMin: uint32
LogGrowthIncrement: uint32
LogAutoShrinkPercentage: uint32
Flags: uint32
LoggingMode: uint16
Reserved: uint16
RmState: uint32
LogCapacity: uint64
LogFree: uint64
TopsSize: uint64
TopsUsed: uint64
TransactionCount: uint64
OnePCCount: uint64
TwoPCCount: uint64
NumberLogFileFull: uint64
OldestTransactionAge: uint64
RMName: GUID
TmLogPathOffset: uint32struct TXFS_QUERY_RM_INFORMATION
{
uint BytesRequired;
ulong TailLsn;
ulong CurrentLsn;
ulong ArchiveTailLsn;
ulong LogContainerSize;
long HighestVirtualClock;
uint LogContainerCount;
uint LogContainerCountMax;
uint LogContainerCountMin;
uint LogGrowthIncrement;
uint LogAutoShrinkPercentage;
uint Flags;
ushort LoggingMode;
ushort Reserved;
uint RmState;
ulong LogCapacity;
ulong LogFree;
ulong TopsSize;
ulong TopsUsed;
ulong TransactionCount;
ulong OnePCCount;
ulong TwoPCCount;
ulong NumberLogFileFull;
ulong OldestTransactionAge;
GUID RMName;
uint TmLogPathOffset;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; TXFS_QUERY_RM_INFORMATION サイズ: 176 バイト(x64)
dim st, 44 ; 4byte整数×44(構造体サイズ 176 / 4 切り上げ)
; BytesRequired : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; TailLsn : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; CurrentLsn : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ArchiveTailLsn : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; LogContainerSize : ULONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; HighestVirtualClock : LONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; LogContainerCount : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; LogContainerCountMax : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; LogContainerCountMin : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; LogGrowthIncrement : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; LogAutoShrinkPercentage : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; Flags : TXFS_RMF_LAGS (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; LoggingMode : WORD (+72, 2byte) wpoke st,72,値 / 値 = wpeek(st,72)
; Reserved : WORD (+74, 2byte) wpoke st,74,値 / 値 = wpeek(st,74)
; RmState : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; LogCapacity : ULONGLONG (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; LogFree : ULONGLONG (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; TopsSize : ULONGLONG (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; TopsUsed : ULONGLONG (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; TransactionCount : ULONGLONG (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; OnePCCount : ULONGLONG (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; TwoPCCount : ULONGLONG (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; NumberLogFileFull : ULONGLONG (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; OldestTransactionAge : ULONGLONG (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; RMName : GUID (+152, 16byte) varptr(st)+152 を基点に操作(16byte:入れ子/配列)
; TmLogPathOffset : DWORD (+168, 4byte) st.42 = 値 / 値 = st.42 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global TXFS_QUERY_RM_INFORMATION
#field int BytesRequired
#field int64 TailLsn
#field int64 CurrentLsn
#field int64 ArchiveTailLsn
#field int64 LogContainerSize
#field int64 HighestVirtualClock
#field int LogContainerCount
#field int LogContainerCountMax
#field int LogContainerCountMin
#field int LogGrowthIncrement
#field int LogAutoShrinkPercentage
#field int Flags
#field short LoggingMode
#field short Reserved
#field int RmState
#field int64 LogCapacity
#field int64 LogFree
#field int64 TopsSize
#field int64 TopsUsed
#field int64 TransactionCount
#field int64 OnePCCount
#field int64 TwoPCCount
#field int64 NumberLogFileFull
#field int64 OldestTransactionAge
#field GUID RMName
#field int TmLogPathOffset
#endstruct
stdim st, TXFS_QUERY_RM_INFORMATION ; NSTRUCT 変数を確保
st->BytesRequired = 100
mes "BytesRequired=" + st->BytesRequired