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

VDS_HINTS

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

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

フィールド

フィールドサイズx64x86説明
ullHintMaskULONGLONG8+0+0どのヒントフィールドが有効かを示す64ビットビットマスク。
ullExpectedMaximumSizeULONGLONG8+8+8想定される最大サイズをバイト単位で示すヒント。
ulOptimalReadSizeDWORD4+16+16最適な読み取りサイズをバイト単位で示すヒント。
ulOptimalReadAlignmentDWORD4+20+20最適な読み取りアライメントをバイト単位で示すヒント。
ulOptimalWriteSizeDWORD4+24+24最適な書き込みサイズをバイト単位で示すヒント。
ulOptimalWriteAlignmentDWORD4+28+28最適な書き込みアライメントをバイト単位で示すヒント。
ulMaximumDriveCountDWORD4+32+32使用する最大ドライブ数のヒント。
ulStripeSizeDWORD4+36+36ストライプサイズをバイト単位で示すヒント。
bFastCrashRecoveryRequiredBOOL4+40+40高速クラッシュ回復が必要か否かを示すBOOL値。
bMostlyReadsBOOL4+44+44主に読み取り負荷か否かを示すBOOL値。
bOptimizeForSequentialReadsBOOL4+48+48シーケンシャル読み取り最適化を行うか否かを示すBOOL値。
bOptimizeForSequentialWritesBOOL4+52+52シーケンシャル書き込み最適化を行うか否かを示すBOOL値。
bRemapEnabledBOOL4+56+56不良ブロックの再マッピングを有効にするか否かを示すBOOL値。
bReadBackVerifyEnabledBOOL4+60+60書き込み後の読み戻し検証を有効にするか否かを示すBOOL値。
bWriteThroughCachingEnabledBOOL4+64+64ライトスルーキャッシュを有効にするか否かを示すBOOL値。
bHardwareChecksumEnabledBOOL4+68+68ハードウェアチェックサムを有効にするか否かを示すBOOL値。
bIsYankableBOOL4+72+72ホットスワップ(引き抜き可能)対応か否かを示すBOOL値。
sRebuildPrioritySHORT2+76+76アレイ再構築の優先度を示す符号付き値。

各言語での定義

#include <windows.h>

// VDS_HINTS  (x64 80 / x86 80 バイト)
typedef struct VDS_HINTS {
    ULONGLONG ullHintMask;
    ULONGLONG ullExpectedMaximumSize;
    DWORD ulOptimalReadSize;
    DWORD ulOptimalReadAlignment;
    DWORD ulOptimalWriteSize;
    DWORD ulOptimalWriteAlignment;
    DWORD ulMaximumDriveCount;
    DWORD ulStripeSize;
    BOOL bFastCrashRecoveryRequired;
    BOOL bMostlyReads;
    BOOL bOptimizeForSequentialReads;
    BOOL bOptimizeForSequentialWrites;
    BOOL bRemapEnabled;
    BOOL bReadBackVerifyEnabled;
    BOOL bWriteThroughCachingEnabled;
    BOOL bHardwareChecksumEnabled;
    BOOL bIsYankable;
    SHORT sRebuildPriority;
} VDS_HINTS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VDS_HINTS
{
    public ulong ullHintMask;
    public ulong ullExpectedMaximumSize;
    public uint ulOptimalReadSize;
    public uint ulOptimalReadAlignment;
    public uint ulOptimalWriteSize;
    public uint ulOptimalWriteAlignment;
    public uint ulMaximumDriveCount;
    public uint ulStripeSize;
    [MarshalAs(UnmanagedType.Bool)] public bool bFastCrashRecoveryRequired;
    [MarshalAs(UnmanagedType.Bool)] public bool bMostlyReads;
    [MarshalAs(UnmanagedType.Bool)] public bool bOptimizeForSequentialReads;
    [MarshalAs(UnmanagedType.Bool)] public bool bOptimizeForSequentialWrites;
    [MarshalAs(UnmanagedType.Bool)] public bool bRemapEnabled;
    [MarshalAs(UnmanagedType.Bool)] public bool bReadBackVerifyEnabled;
    [MarshalAs(UnmanagedType.Bool)] public bool bWriteThroughCachingEnabled;
    [MarshalAs(UnmanagedType.Bool)] public bool bHardwareChecksumEnabled;
    [MarshalAs(UnmanagedType.Bool)] public bool bIsYankable;
    public short sRebuildPriority;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VDS_HINTS
    Public ullHintMask As ULong
    Public ullExpectedMaximumSize As ULong
    Public ulOptimalReadSize As UInteger
    Public ulOptimalReadAlignment As UInteger
    Public ulOptimalWriteSize As UInteger
    Public ulOptimalWriteAlignment As UInteger
    Public ulMaximumDriveCount As UInteger
    Public ulStripeSize As UInteger
    <MarshalAs(UnmanagedType.Bool)> Public bFastCrashRecoveryRequired As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bMostlyReads As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bOptimizeForSequentialReads As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bOptimizeForSequentialWrites As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bRemapEnabled As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bReadBackVerifyEnabled As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bWriteThroughCachingEnabled As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bHardwareChecksumEnabled As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bIsYankable As Boolean
    Public sRebuildPriority As Short
End Structure
import ctypes
from ctypes import wintypes

class VDS_HINTS(ctypes.Structure):
    _fields_ = [
        ("ullHintMask", ctypes.c_ulonglong),
        ("ullExpectedMaximumSize", ctypes.c_ulonglong),
        ("ulOptimalReadSize", wintypes.DWORD),
        ("ulOptimalReadAlignment", wintypes.DWORD),
        ("ulOptimalWriteSize", wintypes.DWORD),
        ("ulOptimalWriteAlignment", wintypes.DWORD),
        ("ulMaximumDriveCount", wintypes.DWORD),
        ("ulStripeSize", wintypes.DWORD),
        ("bFastCrashRecoveryRequired", wintypes.BOOL),
        ("bMostlyReads", wintypes.BOOL),
        ("bOptimizeForSequentialReads", wintypes.BOOL),
        ("bOptimizeForSequentialWrites", wintypes.BOOL),
        ("bRemapEnabled", wintypes.BOOL),
        ("bReadBackVerifyEnabled", wintypes.BOOL),
        ("bWriteThroughCachingEnabled", wintypes.BOOL),
        ("bHardwareChecksumEnabled", wintypes.BOOL),
        ("bIsYankable", wintypes.BOOL),
        ("sRebuildPriority", ctypes.c_short),
    ]
#[repr(C)]
pub struct VDS_HINTS {
    pub ullHintMask: u64,
    pub ullExpectedMaximumSize: u64,
    pub ulOptimalReadSize: u32,
    pub ulOptimalReadAlignment: u32,
    pub ulOptimalWriteSize: u32,
    pub ulOptimalWriteAlignment: u32,
    pub ulMaximumDriveCount: u32,
    pub ulStripeSize: u32,
    pub bFastCrashRecoveryRequired: i32,
    pub bMostlyReads: i32,
    pub bOptimizeForSequentialReads: i32,
    pub bOptimizeForSequentialWrites: i32,
    pub bRemapEnabled: i32,
    pub bReadBackVerifyEnabled: i32,
    pub bWriteThroughCachingEnabled: i32,
    pub bHardwareChecksumEnabled: i32,
    pub bIsYankable: i32,
    pub sRebuildPriority: i16,
}
import "golang.org/x/sys/windows"

type VDS_HINTS struct {
	ullHintMask uint64
	ullExpectedMaximumSize uint64
	ulOptimalReadSize uint32
	ulOptimalReadAlignment uint32
	ulOptimalWriteSize uint32
	ulOptimalWriteAlignment uint32
	ulMaximumDriveCount uint32
	ulStripeSize uint32
	bFastCrashRecoveryRequired int32
	bMostlyReads int32
	bOptimizeForSequentialReads int32
	bOptimizeForSequentialWrites int32
	bRemapEnabled int32
	bReadBackVerifyEnabled int32
	bWriteThroughCachingEnabled int32
	bHardwareChecksumEnabled int32
	bIsYankable int32
	sRebuildPriority int16
}
type
  VDS_HINTS = record
    ullHintMask: UInt64;
    ullExpectedMaximumSize: UInt64;
    ulOptimalReadSize: DWORD;
    ulOptimalReadAlignment: DWORD;
    ulOptimalWriteSize: DWORD;
    ulOptimalWriteAlignment: DWORD;
    ulMaximumDriveCount: DWORD;
    ulStripeSize: DWORD;
    bFastCrashRecoveryRequired: BOOL;
    bMostlyReads: BOOL;
    bOptimizeForSequentialReads: BOOL;
    bOptimizeForSequentialWrites: BOOL;
    bRemapEnabled: BOOL;
    bReadBackVerifyEnabled: BOOL;
    bWriteThroughCachingEnabled: BOOL;
    bHardwareChecksumEnabled: BOOL;
    bIsYankable: BOOL;
    sRebuildPriority: Smallint;
  end;
const VDS_HINTS = extern struct {
    ullHintMask: u64,
    ullExpectedMaximumSize: u64,
    ulOptimalReadSize: u32,
    ulOptimalReadAlignment: u32,
    ulOptimalWriteSize: u32,
    ulOptimalWriteAlignment: u32,
    ulMaximumDriveCount: u32,
    ulStripeSize: u32,
    bFastCrashRecoveryRequired: i32,
    bMostlyReads: i32,
    bOptimizeForSequentialReads: i32,
    bOptimizeForSequentialWrites: i32,
    bRemapEnabled: i32,
    bReadBackVerifyEnabled: i32,
    bWriteThroughCachingEnabled: i32,
    bHardwareChecksumEnabled: i32,
    bIsYankable: i32,
    sRebuildPriority: i16,
};
type
  VDS_HINTS {.bycopy.} = object
    ullHintMask: uint64
    ullExpectedMaximumSize: uint64
    ulOptimalReadSize: uint32
    ulOptimalReadAlignment: uint32
    ulOptimalWriteSize: uint32
    ulOptimalWriteAlignment: uint32
    ulMaximumDriveCount: uint32
    ulStripeSize: uint32
    bFastCrashRecoveryRequired: int32
    bMostlyReads: int32
    bOptimizeForSequentialReads: int32
    bOptimizeForSequentialWrites: int32
    bRemapEnabled: int32
    bReadBackVerifyEnabled: int32
    bWriteThroughCachingEnabled: int32
    bHardwareChecksumEnabled: int32
    bIsYankable: int32
    sRebuildPriority: int16
struct VDS_HINTS
{
    ulong ullHintMask;
    ulong ullExpectedMaximumSize;
    uint ulOptimalReadSize;
    uint ulOptimalReadAlignment;
    uint ulOptimalWriteSize;
    uint ulOptimalWriteAlignment;
    uint ulMaximumDriveCount;
    uint ulStripeSize;
    int bFastCrashRecoveryRequired;
    int bMostlyReads;
    int bOptimizeForSequentialReads;
    int bOptimizeForSequentialWrites;
    int bRemapEnabled;
    int bReadBackVerifyEnabled;
    int bWriteThroughCachingEnabled;
    int bHardwareChecksumEnabled;
    int bIsYankable;
    short sRebuildPriority;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VDS_HINTS サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; ullHintMask : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ullExpectedMaximumSize : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; ulOptimalReadSize : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ulOptimalReadAlignment : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ulOptimalWriteSize : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ulOptimalWriteAlignment : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ulMaximumDriveCount : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ulStripeSize : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; bFastCrashRecoveryRequired : BOOL (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; bMostlyReads : BOOL (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; bOptimizeForSequentialReads : BOOL (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; bOptimizeForSequentialWrites : BOOL (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; bRemapEnabled : BOOL (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; bReadBackVerifyEnabled : BOOL (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; bWriteThroughCachingEnabled : BOOL (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; bHardwareChecksumEnabled : BOOL (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; bIsYankable : BOOL (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; sRebuildPriority : SHORT (+76, 2byte)  wpoke st,76,値  /  値 = wpeek(st,76)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global VDS_HINTS
    #field int64 ullHintMask
    #field int64 ullExpectedMaximumSize
    #field int ulOptimalReadSize
    #field int ulOptimalReadAlignment
    #field int ulOptimalWriteSize
    #field int ulOptimalWriteAlignment
    #field int ulMaximumDriveCount
    #field int ulStripeSize
    #field bool bFastCrashRecoveryRequired
    #field bool bMostlyReads
    #field bool bOptimizeForSequentialReads
    #field bool bOptimizeForSequentialWrites
    #field bool bRemapEnabled
    #field bool bReadBackVerifyEnabled
    #field bool bWriteThroughCachingEnabled
    #field bool bHardwareChecksumEnabled
    #field bool bIsYankable
    #field short sRebuildPriority
#endstruct

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