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

CLS_INFORMATION

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

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

フィールド

フィールドサイズx64x86説明
TotalAvailableLONGLONG8+0+0ログに割り当て可能な総領域。バイト単位。
CurrentAvailableLONGLONG8+8+8現在利用可能な領域。バイト単位。
TotalReservationLONGLONG8+16+16予約済みの総領域。バイト単位。
BaseFileSizeULONGLONG8+24+24ベースログファイルのサイズ。バイト単位。
ContainerSizeULONGLONG8+32+32各コンテナのサイズ。バイト単位。
TotalContainersDWORD4+40+40ログの総コンテナ数。
FreeContainersDWORD4+44+44空きコンテナ数。
TotalClientsDWORD4+48+48ログを使用するクライアントの数。
AttributesDWORD4+52+52ログの属性を示すフラグ。
FlushThresholdDWORD4+56+56自動フラッシュを行うしきい値。バイト単位。
SectorSizeDWORD4+60+60ログデバイスのセクタサイズ。バイト単位。
MinArchiveTailLsnCLS_LSN8+64+64アーカイブ末尾の最小LSN。
BaseLsnCLS_LSN8+72+72ログのベースLSN。
LastFlushedLsnCLS_LSN8+80+80最後にフラッシュされたLSN。
LastLsnCLS_LSN8+88+88ログに書き込まれた最後のLSN。
RestartLsnCLS_LSN8+96+96再起動時に使用するLSN。
IdentityGUID16+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 Structure
import 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: GUID
struct 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