VDS_HINTS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ullHintMask | ULONGLONG | 8 | +0 | +0 | LUN のヒントマスクです。この構造体の各 BOOL メンバーには、マスクに設定できる対応するヒントフラグがあります。ヒントフラグが設定されている場合、対応するヒントが考慮されます。ヒントフラグが設定されていない場合、そのヒントは無視されます。ヒントフラグを次の表に示します。
| ||||||||||||||||||||
| ullExpectedMaximumSize | ULONGLONG | 8 | +8 | +8 | LUN が拡張されると見込まれる最大サイズ (バイト単位) です。この値は、 IVdsSubSystem::CreateLun メソッドの呼び出し時に ullSizeInBytes で指定した値と等しくても、それより大きくても小さくてもかまいません。 一部のプロバイダーは、この値を使用して LUN 用の領域を予約します。領域を予約できないプロバイダーは、 通常このパラメーターを無視します。 | ||||||||||||||||||||
| ulOptimalReadSize | DWORD | 4 | +16 | +16 | LUN の最適な読み取りサイズ (バイト単位) です。0 は最適な読み取りサイズがないことを示します。 | ||||||||||||||||||||
| ulOptimalReadAlignment | DWORD | 4 | +20 | +20 | LUN の最初の論理ブロックを基準とした最適な読み取りアラインメントです。0 は最適な読み取り アラインメントがないことを示します。 | ||||||||||||||||||||
| ulOptimalWriteSize | DWORD | 4 | +24 | +24 | LUN の最適な書き込みサイズ (バイト単位) です。0 は最適な書き込みサイズがないことを示します。 | ||||||||||||||||||||
| ulOptimalWriteAlignment | DWORD | 4 | +28 | +28 | LUN の最初の論理ブロックを基準とした最適な書き込みアラインメントです。0 は最適な 書き込みアラインメントがないことを示します。 | ||||||||||||||||||||
| ulMaximumDriveCount | DWORD | 4 | +32 | +32 | LUN を構成するドライブの最大数です。0 はドライブ数の上限がないことを示します。この値は、 ストライプセット内のストライプインターリーブ数を制限するために使用できます。 | ||||||||||||||||||||
| ulStripeSize | DWORD | 4 | +36 | +36 | ミラーまたはパリティのストライプインターリーブサイズ (バイト単位) です。0 の場合、ストライプサイズは指定されません。 | ||||||||||||||||||||
| bFastCrashRecoveryRequired | BOOL | 4 | +40 | +40 | このメンバーが TRUE の場合、回復時間が制限されます。このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_FASTCRASHRECOVERYREQUIRED フラグを設定します。 | ||||||||||||||||||||
| bMostlyReads | BOOL | 4 | +44 | +44 | 読み取りが大半を占める使用パターンに合わせて最適化する (たとえば、パリティストライピングではなくミラーリングを使用する) 場合は、 このメンバーを TRUE に設定します。それ以外の場合は FALSE に設定します。このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_MOSTLYREADS フラグを設定します。 | ||||||||||||||||||||
| bOptimizeForSequentialReads | BOOL | 4 | +48 | +48 | シーケンシャル読み取りの使用パターンに合わせて最適化する場合は、このメンバーを TRUE に設定します。それ以外の場合は FALSE に設定します。 bOptimizeForSequentialReads メンバーと bOptimizeForSequentialWrites メンバーの両方を FALSE に設定すると、ランダム I/O 向けに最適化されます。このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_OPTIMIZEFORSEQUENTIALREADS フラグを設定します。 | ||||||||||||||||||||
| bOptimizeForSequentialWrites | BOOL | 4 | +52 | +52 | シーケンシャル書き込みの使用パターンに合わせて最適化する場合は、このメンバーを TRUE に設定します。それ以外の場合は FALSE に設定します。 bOptimizeForSequentialReads メンバーと bOptimizeForSequentialWrites メンバーの両方を FALSE に設定すると、ランダム I/O 向けに最適化されます。このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_OPTIMIZEFORSEQUENTIALWRITES フラグを設定します。 | ||||||||||||||||||||
| bRemapEnabled | BOOL | 4 | +56 | +56 | このメンバーが TRUE の場合、プロバイダーは LUN エクステントをドライブエクステントに自動的に再マップします。FALSE の場合、破損したブロックを回避するためにエクステントが明示的に再マップされない限り、LUN の構成後も LUN エクステントから ドライブエクステントへのマッピングは固定されたままになります。このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_REMAPENABLED フラグを設定します。 | ||||||||||||||||||||
| bReadBackVerifyEnabled | BOOL | 4 | +60 | +60 | このメンバーが TRUE に設定されている場合、プロバイダーは読み戻しによって LUN への書き込みを検証します。FALSE に設定されている場合、プロバイダーは書き込みを検証しません。 このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_READBACKVERIFYENABLED フラグを設定します。 | ||||||||||||||||||||
| bWriteThroughCachingEnabled | BOOL | 4 | +64 | +64 | このメンバーが TRUE の場合、プロバイダーは LUN でライトスルーキャッシュを有効にします。FALSE の場合、プロバイダーはライトスルーキャッシュを 有効にしません。このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_WRITETHROUGHCACHINGENABLED フラグを設定します。 | ||||||||||||||||||||
| bHardwareChecksumEnabled | BOOL | 4 | +68 | +68 | このメンバーが TRUE の場合、プロバイダーは LUN でチェックサムを有効にします。このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_HARDWARECHECKSUMENABLED フラグを設定します。 | ||||||||||||||||||||
| bIsYankable | BOOL | 4 | +72 | +72 | このメンバーが TRUE の場合、LUN を構成するドライブは、システムに大きな支障を与えることなく物理的に取り外せます (通常、LUN が少数のドライブのエクステントのみで構成されている場合に該当します)。FALSE の場合、LUN は システムに大きな支障を与えずに取り外すことはできません。このメンバーを考慮対象とすることを示すには、 ullHintMask メンバーに VDS_HINT_ISYANKABLE フラグを 設定します。 | ||||||||||||||||||||
| sRebuildPriority | SHORT | 2 | +76 | +76 | LUN の再構築の優先度です。値の範囲は 0 (最も低い優先度) から 15 (最も高い優先度) です。 |
公式ドキュメント
[Windows 8 および Windows Server 2012 以降、Virtual Disk Service COM インターフェイスは Windows Storage Management API に置き換えられました。]
LUN または LUN プレックスの自動ヒントを定義します。
解説(Remarks)
IVdsSubSystem::CreateLun メソッドは、LUN を作成するためのヒントを提供するために この構造体をパラメーターとして渡します。この構造体は、 IVdsLun インターフェイスと IVdsLunPlex インターフェイスの両方の ApplyHints メソッドにもパラメーターとして渡され、それぞれ LUN または LUN プレックスに新しいヒントのセットを適用します。さらに、 IVdsLun インターフェイスと IVdsLunPlex インターフェイスの両方の QueryHints メソッドから返され、それぞれ LUN または LUN プレックスに現在適用されている ヒントを報告します。
ヒントは実装者に対する指示ではありません。実装者は一般にヒントを可能な限り考慮することが期待されますが、 それに従う義務はありません。技術的な理由で指定されたヒントに従えない場合や、従うと構成が不適切になる場合、 実装者は代替手段を選択できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 Structureimport 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: int16struct 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