ホーム › Storage.FileSystem › CLS_INFORMATION
CLS_INFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| TotalAvailable | LONGLONG | 8 | +0 | +0 | ログに割り当て可能な総領域。バイト単位。 |
| CurrentAvailable | LONGLONG | 8 | +8 | +8 | 現在利用可能な領域。バイト単位。 |
| TotalReservation | LONGLONG | 8 | +16 | +16 | 予約済みの総領域。バイト単位。 |
| BaseFileSize | ULONGLONG | 8 | +24 | +24 | ベースログファイルのサイズ。バイト単位。 |
| ContainerSize | ULONGLONG | 8 | +32 | +32 | 各コンテナのサイズ。バイト単位。 |
| TotalContainers | DWORD | 4 | +40 | +40 | ログの総コンテナ数。 |
| FreeContainers | DWORD | 4 | +44 | +44 | 空きコンテナ数。 |
| TotalClients | DWORD | 4 | +48 | +48 | ログを使用するクライアントの数。 |
| Attributes | DWORD | 4 | +52 | +52 | ログの属性を示すフラグ。 |
| FlushThreshold | DWORD | 4 | +56 | +56 | 自動フラッシュを行うしきい値。バイト単位。 |
| SectorSize | DWORD | 4 | +60 | +60 | ログデバイスのセクタサイズ。バイト単位。 |
| MinArchiveTailLsn | CLS_LSN | 8 | +64 | +64 | アーカイブ末尾の最小LSN。 |
| BaseLsn | CLS_LSN | 8 | +72 | +72 | ログのベースLSN。 |
| LastFlushedLsn | CLS_LSN | 8 | +80 | +80 | 最後にフラッシュされたLSN。 |
| LastLsn | CLS_LSN | 8 | +88 | +88 | ログに書き込まれた最後のLSN。 |
| RestartLsn | CLS_LSN | 8 | +96 | +96 | 再起動時に使用するLSN。 |
| Identity | GUID | 16 | +104 | +104 | ログを一意に識別するGUID。 |
各言語での定義
#include <windows.h>
// CLS_LSN (x64 8 / x86 8 バイト)
typedef struct CLS_LSN {
ULONGLONG Internal;
} CLS_LSN;
// CLS_INFORMATION (x64 120 / x86 120 バイト)
typedef struct CLS_INFORMATION {
LONGLONG TotalAvailable;
LONGLONG CurrentAvailable;
LONGLONG TotalReservation;
ULONGLONG BaseFileSize;
ULONGLONG ContainerSize;
DWORD TotalContainers;
DWORD FreeContainers;
DWORD TotalClients;
DWORD Attributes;
DWORD FlushThreshold;
DWORD SectorSize;
CLS_LSN MinArchiveTailLsn;
CLS_LSN BaseLsn;
CLS_LSN LastFlushedLsn;
CLS_LSN LastLsn;
CLS_LSN RestartLsn;
GUID Identity;
} CLS_INFORMATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CLS_LSN
{
public ulong Internal;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CLS_INFORMATION
{
public long TotalAvailable;
public long CurrentAvailable;
public long TotalReservation;
public ulong BaseFileSize;
public ulong ContainerSize;
public uint TotalContainers;
public uint FreeContainers;
public uint TotalClients;
public uint Attributes;
public uint FlushThreshold;
public uint SectorSize;
public CLS_LSN MinArchiveTailLsn;
public CLS_LSN BaseLsn;
public CLS_LSN LastFlushedLsn;
public CLS_LSN LastLsn;
public CLS_LSN RestartLsn;
public Guid Identity;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CLS_LSN
Public Internal As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CLS_INFORMATION
Public TotalAvailable As Long
Public CurrentAvailable As Long
Public TotalReservation As Long
Public BaseFileSize As ULong
Public ContainerSize As ULong
Public TotalContainers As UInteger
Public FreeContainers As UInteger
Public TotalClients As UInteger
Public Attributes As UInteger
Public FlushThreshold As UInteger
Public SectorSize As UInteger
Public MinArchiveTailLsn As CLS_LSN
Public BaseLsn As CLS_LSN
Public LastFlushedLsn As CLS_LSN
Public LastLsn As CLS_LSN
Public RestartLsn As CLS_LSN
Public Identity As Guid
End Structureimport ctypes
from ctypes import wintypes
class CLS_LSN(ctypes.Structure):
_fields_ = [
("Internal", ctypes.c_ulonglong),
]
class CLS_INFORMATION(ctypes.Structure):
_fields_ = [
("TotalAvailable", ctypes.c_longlong),
("CurrentAvailable", ctypes.c_longlong),
("TotalReservation", ctypes.c_longlong),
("BaseFileSize", ctypes.c_ulonglong),
("ContainerSize", ctypes.c_ulonglong),
("TotalContainers", wintypes.DWORD),
("FreeContainers", wintypes.DWORD),
("TotalClients", wintypes.DWORD),
("Attributes", wintypes.DWORD),
("FlushThreshold", wintypes.DWORD),
("SectorSize", wintypes.DWORD),
("MinArchiveTailLsn", CLS_LSN),
("BaseLsn", CLS_LSN),
("LastFlushedLsn", CLS_LSN),
("LastLsn", CLS_LSN),
("RestartLsn", CLS_LSN),
("Identity", GUID),
]#[repr(C)]
pub struct CLS_LSN {
pub Internal: u64,
}
#[repr(C)]
pub struct CLS_INFORMATION {
pub TotalAvailable: i64,
pub CurrentAvailable: i64,
pub TotalReservation: i64,
pub BaseFileSize: u64,
pub ContainerSize: u64,
pub TotalContainers: u32,
pub FreeContainers: u32,
pub TotalClients: u32,
pub Attributes: u32,
pub FlushThreshold: u32,
pub SectorSize: u32,
pub MinArchiveTailLsn: CLS_LSN,
pub BaseLsn: CLS_LSN,
pub LastFlushedLsn: CLS_LSN,
pub LastLsn: CLS_LSN,
pub RestartLsn: CLS_LSN,
pub Identity: GUID,
}import "golang.org/x/sys/windows"
type CLS_LSN struct {
Internal uint64
}
type CLS_INFORMATION struct {
TotalAvailable int64
CurrentAvailable int64
TotalReservation int64
BaseFileSize uint64
ContainerSize uint64
TotalContainers uint32
FreeContainers uint32
TotalClients uint32
Attributes uint32
FlushThreshold uint32
SectorSize uint32
MinArchiveTailLsn CLS_LSN
BaseLsn CLS_LSN
LastFlushedLsn CLS_LSN
LastLsn CLS_LSN
RestartLsn CLS_LSN
Identity windows.GUID
}type
CLS_LSN = record
Internal: UInt64;
end;
CLS_INFORMATION = record
TotalAvailable: Int64;
CurrentAvailable: Int64;
TotalReservation: Int64;
BaseFileSize: UInt64;
ContainerSize: UInt64;
TotalContainers: DWORD;
FreeContainers: DWORD;
TotalClients: DWORD;
Attributes: DWORD;
FlushThreshold: DWORD;
SectorSize: DWORD;
MinArchiveTailLsn: CLS_LSN;
BaseLsn: CLS_LSN;
LastFlushedLsn: CLS_LSN;
LastLsn: CLS_LSN;
RestartLsn: CLS_LSN;
Identity: TGUID;
end;const CLS_LSN = extern struct {
Internal: u64,
};
const CLS_INFORMATION = extern struct {
TotalAvailable: i64,
CurrentAvailable: i64,
TotalReservation: i64,
BaseFileSize: u64,
ContainerSize: u64,
TotalContainers: u32,
FreeContainers: u32,
TotalClients: u32,
Attributes: u32,
FlushThreshold: u32,
SectorSize: u32,
MinArchiveTailLsn: CLS_LSN,
BaseLsn: CLS_LSN,
LastFlushedLsn: CLS_LSN,
LastLsn: CLS_LSN,
RestartLsn: CLS_LSN,
Identity: GUID,
};type
CLS_LSN {.bycopy.} = object
Internal: uint64
CLS_INFORMATION {.bycopy.} = object
TotalAvailable: int64
CurrentAvailable: int64
TotalReservation: int64
BaseFileSize: uint64
ContainerSize: uint64
TotalContainers: uint32
FreeContainers: uint32
TotalClients: uint32
Attributes: uint32
FlushThreshold: uint32
SectorSize: uint32
MinArchiveTailLsn: CLS_LSN
BaseLsn: CLS_LSN
LastFlushedLsn: CLS_LSN
LastLsn: CLS_LSN
RestartLsn: CLS_LSN
Identity: GUIDstruct CLS_LSN
{
ulong Internal;
}
struct CLS_INFORMATION
{
long TotalAvailable;
long CurrentAvailable;
long TotalReservation;
ulong BaseFileSize;
ulong ContainerSize;
uint TotalContainers;
uint FreeContainers;
uint TotalClients;
uint Attributes;
uint FlushThreshold;
uint SectorSize;
CLS_LSN MinArchiveTailLsn;
CLS_LSN BaseLsn;
CLS_LSN LastFlushedLsn;
CLS_LSN LastLsn;
CLS_LSN RestartLsn;
GUID Identity;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CLS_INFORMATION サイズ: 120 バイト(x64)
dim st, 30 ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; TotalAvailable : LONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; CurrentAvailable : LONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; TotalReservation : LONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; BaseFileSize : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ContainerSize : ULONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; TotalContainers : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; FreeContainers : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; TotalClients : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; Attributes : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; FlushThreshold : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; SectorSize : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; MinArchiveTailLsn : CLS_LSN (+64, 8byte) varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; BaseLsn : CLS_LSN (+72, 8byte) varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; LastFlushedLsn : CLS_LSN (+80, 8byte) varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; LastLsn : CLS_LSN (+88, 8byte) varptr(st)+88 を基点に操作(8byte:入れ子/配列)
; RestartLsn : CLS_LSN (+96, 8byte) varptr(st)+96 を基点に操作(8byte:入れ子/配列)
; Identity : GUID (+104, 16byte) varptr(st)+104 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global CLS_LSN
#field int64 Internal
#endstruct
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global CLS_INFORMATION
#field int64 TotalAvailable
#field int64 CurrentAvailable
#field int64 TotalReservation
#field int64 BaseFileSize
#field int64 ContainerSize
#field int TotalContainers
#field int FreeContainers
#field int TotalClients
#field int Attributes
#field int FlushThreshold
#field int SectorSize
#field CLS_LSN MinArchiveTailLsn
#field CLS_LSN BaseLsn
#field CLS_LSN LastFlushedLsn
#field CLS_LSN LastLsn
#field CLS_LSN RestartLsn
#field GUID Identity
#endstruct
stdim st, CLS_INFORMATION ; NSTRUCT 変数を確保
st->TotalAvailable = 100
mes "TotalAvailable=" + st->TotalAvailable