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

CLS_IO_STATISTICS

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

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

フィールド

フィールドサイズx64x86説明
hdrIoStatsCLS_IO_STATISTICS_HEADER16+0+0I/O統計情報のヘッダ部。
cFlushULONGLONG8+16+16フラッシュ操作の累計回数。
cbFlushULONGLONG8+24+24フラッシュにより書き込まれた累計バイト数。
cMetaFlushULONGLONG8+32+32メタデータフラッシュの累計回数。
cbMetaFlushULONGLONG8+40+40メタデータフラッシュで書き込まれた累計バイト数。

各言語での定義

#include <windows.h>

// CLS_IO_STATISTICS_HEADER  (x64 16 / x86 16 バイト)
typedef struct CLS_IO_STATISTICS_HEADER {
    BYTE ubMajorVersion;
    BYTE ubMinorVersion;
    CLFS_IOSTATS_CLASS eStatsClass;
    WORD cbLength;
    DWORD coffData;
} CLS_IO_STATISTICS_HEADER;

// CLS_IO_STATISTICS  (x64 48 / x86 48 バイト)
typedef struct CLS_IO_STATISTICS {
    CLS_IO_STATISTICS_HEADER hdrIoStats;
    ULONGLONG cFlush;
    ULONGLONG cbFlush;
    ULONGLONG cMetaFlush;
    ULONGLONG cbMetaFlush;
} CLS_IO_STATISTICS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CLS_IO_STATISTICS_HEADER
{
    public byte ubMajorVersion;
    public byte ubMinorVersion;
    public int eStatsClass;
    public ushort cbLength;
    public uint coffData;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CLS_IO_STATISTICS
{
    public CLS_IO_STATISTICS_HEADER hdrIoStats;
    public ulong cFlush;
    public ulong cbFlush;
    public ulong cMetaFlush;
    public ulong cbMetaFlush;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CLS_IO_STATISTICS_HEADER
    Public ubMajorVersion As Byte
    Public ubMinorVersion As Byte
    Public eStatsClass As Integer
    Public cbLength As UShort
    Public coffData As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CLS_IO_STATISTICS
    Public hdrIoStats As CLS_IO_STATISTICS_HEADER
    Public cFlush As ULong
    Public cbFlush As ULong
    Public cMetaFlush As ULong
    Public cbMetaFlush As ULong
End Structure
import ctypes
from ctypes import wintypes

class CLS_IO_STATISTICS_HEADER(ctypes.Structure):
    _fields_ = [
        ("ubMajorVersion", ctypes.c_ubyte),
        ("ubMinorVersion", ctypes.c_ubyte),
        ("eStatsClass", ctypes.c_int),
        ("cbLength", ctypes.c_ushort),
        ("coffData", wintypes.DWORD),
    ]

class CLS_IO_STATISTICS(ctypes.Structure):
    _fields_ = [
        ("hdrIoStats", CLS_IO_STATISTICS_HEADER),
        ("cFlush", ctypes.c_ulonglong),
        ("cbFlush", ctypes.c_ulonglong),
        ("cMetaFlush", ctypes.c_ulonglong),
        ("cbMetaFlush", ctypes.c_ulonglong),
    ]
#[repr(C)]
pub struct CLS_IO_STATISTICS_HEADER {
    pub ubMajorVersion: u8,
    pub ubMinorVersion: u8,
    pub eStatsClass: i32,
    pub cbLength: u16,
    pub coffData: u32,
}

#[repr(C)]
pub struct CLS_IO_STATISTICS {
    pub hdrIoStats: CLS_IO_STATISTICS_HEADER,
    pub cFlush: u64,
    pub cbFlush: u64,
    pub cMetaFlush: u64,
    pub cbMetaFlush: u64,
}
import "golang.org/x/sys/windows"

type CLS_IO_STATISTICS_HEADER struct {
	ubMajorVersion byte
	ubMinorVersion byte
	eStatsClass int32
	cbLength uint16
	coffData uint32
}

type CLS_IO_STATISTICS struct {
	hdrIoStats CLS_IO_STATISTICS_HEADER
	cFlush uint64
	cbFlush uint64
	cMetaFlush uint64
	cbMetaFlush uint64
}
type
  CLS_IO_STATISTICS_HEADER = record
    ubMajorVersion: Byte;
    ubMinorVersion: Byte;
    eStatsClass: Integer;
    cbLength: Word;
    coffData: DWORD;
  end;

  CLS_IO_STATISTICS = record
    hdrIoStats: CLS_IO_STATISTICS_HEADER;
    cFlush: UInt64;
    cbFlush: UInt64;
    cMetaFlush: UInt64;
    cbMetaFlush: UInt64;
  end;
const CLS_IO_STATISTICS_HEADER = extern struct {
    ubMajorVersion: u8,
    ubMinorVersion: u8,
    eStatsClass: i32,
    cbLength: u16,
    coffData: u32,
};

const CLS_IO_STATISTICS = extern struct {
    hdrIoStats: CLS_IO_STATISTICS_HEADER,
    cFlush: u64,
    cbFlush: u64,
    cMetaFlush: u64,
    cbMetaFlush: u64,
};
type
  CLS_IO_STATISTICS_HEADER {.bycopy.} = object
    ubMajorVersion: uint8
    ubMinorVersion: uint8
    eStatsClass: int32
    cbLength: uint16
    coffData: uint32

  CLS_IO_STATISTICS {.bycopy.} = object
    hdrIoStats: CLS_IO_STATISTICS_HEADER
    cFlush: uint64
    cbFlush: uint64
    cMetaFlush: uint64
    cbMetaFlush: uint64
struct CLS_IO_STATISTICS_HEADER
{
    ubyte ubMajorVersion;
    ubyte ubMinorVersion;
    int eStatsClass;
    ushort cbLength;
    uint coffData;
}

struct CLS_IO_STATISTICS
{
    CLS_IO_STATISTICS_HEADER hdrIoStats;
    ulong cFlush;
    ulong cbFlush;
    ulong cMetaFlush;
    ulong cbMetaFlush;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CLS_IO_STATISTICS サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; hdrIoStats : CLS_IO_STATISTICS_HEADER (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; cFlush : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; cbFlush : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; cMetaFlush : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; cbMetaFlush : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global CLS_IO_STATISTICS_HEADER
    #field byte ubMajorVersion
    #field byte ubMinorVersion
    #field int eStatsClass
    #field short cbLength
    #field int coffData
#endstruct

#defstruct global CLS_IO_STATISTICS
    #field CLS_IO_STATISTICS_HEADER hdrIoStats
    #field int64 cFlush
    #field int64 cbFlush
    #field int64 cMetaFlush
    #field int64 cbMetaFlush
#endstruct

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