ホーム › System.Ioctl › DISK_HISTOGRAM
DISK_HISTOGRAM
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| DiskSize | LONGLONG | 8 | +0 | +0 | ディスクのサイズ。バイト単位。 |
| Start | LONGLONG | 8 | +8 | +8 | ヒストグラム対象範囲の開始オフセット。 |
| End | LONGLONG | 8 | +16 | +16 | ヒストグラム対象範囲の終了オフセット。 |
| Average | LONGLONG | 8 | +24 | +24 | 全I/Oの平均値。 |
| AverageRead | LONGLONG | 8 | +32 | +32 | 読み取りI/Oの平均値。 |
| AverageWrite | LONGLONG | 8 | +40 | +40 | 書き込みI/Oの平均値。 |
| Granularity | DWORD | 4 | +48 | +48 | 各バケットが表す範囲の粒度。 |
| Size | DWORD | 4 | +52 | +52 | ヒストグラムのサイズ。 |
| ReadCount | DWORD | 4 | +56 | +56 | 総読み取り回数。 |
| WriteCount | DWORD | 4 | +60 | +60 | 総書き込み回数。 |
| Histogram | HISTOGRAM_BUCKET* | 8/4 | +64 | +64 | HISTOGRAM_BUCKET配列へのポインタ。 |
各言語での定義
#include <windows.h>
// DISK_HISTOGRAM (x64 72 / x86 72 バイト)
typedef struct DISK_HISTOGRAM {
LONGLONG DiskSize;
LONGLONG Start;
LONGLONG End;
LONGLONG Average;
LONGLONG AverageRead;
LONGLONG AverageWrite;
DWORD Granularity;
DWORD Size;
DWORD ReadCount;
DWORD WriteCount;
HISTOGRAM_BUCKET* Histogram;
} DISK_HISTOGRAM;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DISK_HISTOGRAM
{
public long DiskSize;
public long Start;
public long End;
public long Average;
public long AverageRead;
public long AverageWrite;
public uint Granularity;
public uint Size;
public uint ReadCount;
public uint WriteCount;
public IntPtr Histogram;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DISK_HISTOGRAM
Public DiskSize As Long
Public Start As Long
Public End As Long
Public Average As Long
Public AverageRead As Long
Public AverageWrite As Long
Public Granularity As UInteger
Public Size As UInteger
Public ReadCount As UInteger
Public WriteCount As UInteger
Public Histogram As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class DISK_HISTOGRAM(ctypes.Structure):
_fields_ = [
("DiskSize", ctypes.c_longlong),
("Start", ctypes.c_longlong),
("End", ctypes.c_longlong),
("Average", ctypes.c_longlong),
("AverageRead", ctypes.c_longlong),
("AverageWrite", ctypes.c_longlong),
("Granularity", wintypes.DWORD),
("Size", wintypes.DWORD),
("ReadCount", wintypes.DWORD),
("WriteCount", wintypes.DWORD),
("Histogram", ctypes.c_void_p),
]#[repr(C)]
pub struct DISK_HISTOGRAM {
pub DiskSize: i64,
pub Start: i64,
pub End: i64,
pub Average: i64,
pub AverageRead: i64,
pub AverageWrite: i64,
pub Granularity: u32,
pub Size: u32,
pub ReadCount: u32,
pub WriteCount: u32,
pub Histogram: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type DISK_HISTOGRAM struct {
DiskSize int64
Start int64
End int64
Average int64
AverageRead int64
AverageWrite int64
Granularity uint32
Size uint32
ReadCount uint32
WriteCount uint32
Histogram uintptr
}type
DISK_HISTOGRAM = record
DiskSize: Int64;
Start: Int64;
End: Int64;
Average: Int64;
AverageRead: Int64;
AverageWrite: Int64;
Granularity: DWORD;
Size: DWORD;
ReadCount: DWORD;
WriteCount: DWORD;
Histogram: Pointer;
end;const DISK_HISTOGRAM = extern struct {
DiskSize: i64,
Start: i64,
End: i64,
Average: i64,
AverageRead: i64,
AverageWrite: i64,
Granularity: u32,
Size: u32,
ReadCount: u32,
WriteCount: u32,
Histogram: ?*anyopaque,
};type
DISK_HISTOGRAM {.bycopy.} = object
DiskSize: int64
Start: int64
End: int64
Average: int64
AverageRead: int64
AverageWrite: int64
Granularity: uint32
Size: uint32
ReadCount: uint32
WriteCount: uint32
Histogram: pointerstruct DISK_HISTOGRAM
{
long DiskSize;
long Start;
long End;
long Average;
long AverageRead;
long AverageWrite;
uint Granularity;
uint Size;
uint ReadCount;
uint WriteCount;
void* Histogram;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DISK_HISTOGRAM サイズ: 72 バイト(x86)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; DiskSize : LONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; Start : LONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; End : LONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; Average : LONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; AverageRead : LONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; AverageWrite : LONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; Granularity : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; Size : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; ReadCount : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; WriteCount : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; Histogram : HISTOGRAM_BUCKET* (+64, 4byte) varptr(st)+64 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DISK_HISTOGRAM サイズ: 72 バイト(x64)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; DiskSize : LONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; Start : LONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; End : LONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; Average : LONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; AverageRead : LONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; AverageWrite : LONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; Granularity : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; Size : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; ReadCount : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; WriteCount : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; Histogram : HISTOGRAM_BUCKET* (+64, 8byte) varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DISK_HISTOGRAM
#field int64 DiskSize
#field int64 Start
#field int64 End
#field int64 Average
#field int64 AverageRead
#field int64 AverageWrite
#field int Granularity
#field int Size
#field int ReadCount
#field int WriteCount
#field intptr Histogram
#endstruct
stdim st, DISK_HISTOGRAM ; NSTRUCT 変数を確保
st->DiskSize = 100
mes "DiskSize=" + st->DiskSize