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

VDS_POOL_ATTRIBUTES

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

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

フィールド

フィールドサイズx64x86説明
ullAttributeMaskULONGLONG8+0+0

この記憶域プールによって定義される、構造体内の属性を指定するマスクです。

有効な属性フラグの一覧は次のとおりです。各フラグは VDS_POOL_ATTRIBUTES 構造体のメンバーに対応します。未使用のビットは予約済みです。

記憶域プールによって定義される属性
VDS_POOL_ATTRIB_RAIDTYPE
0x1L
raidType
VDS_POOL_ATTRIB_BUSTYPE
0x2L
busType
VDS_POOL_ATTRIB_ALLOW_SPINDOWN
0x4L
bSpinDown
VDS_POOL_ATTRIB_THIN_PROVISION
0x8L
bIsThinProvisioned
VDS_POOL_ATTRIB_NO_SINGLE_POF
0x10L
bNoSinglePointOfFailure
VDS_POOL_ATTRIB_DATA_RDNCY_MAX
0x20L
ulDataRedundancyMax
VDS_POOL_ATTRIB_DATA_RDNCY_MIN
0x40L
ulDataRedundancyMin
VDS_POOL_ATTRIB_DATA_RDNCY_DEF
0x80L
ulDataRedundancyDefault
VDS_POOL_ATTRIB_PKG_RDNCY_MAX
0x100L
ulPackageRedundancyDefault
VDS_POOL_ATTRIB_PKG_RDNCY_MIN
0x200L
ulPackageRedundancyMin
VDS_POOL_ATTRIB_PKG_RDNCY_DEF
0x400L
ulPackageRedundancyDefault
VDS_POOL_ATTRIB_STRIPE_SIZE
0x800L
ulStripeSize
VDS_POOL_ATTRIB_STRIPE_SIZE_MAX
0x1000L
ulStripeSizeMax
VDS_POOL_ATTRIB_STRIPE_SIZE_MIN
0x2000L
ulStripeSizeMin
VDS_POOL_ATTRIB_STRIPE_SIZE_DEF
0x4000L
ulDefaultStripeSize
VDS_POOL_ATTRIB_NUM_CLMNS
0x8000L
ulNumberOfColumns
VDS_POOL_ATTRIB_NUM_CLMNS_MAX
0x10000L
ulNumberOfColumnsMax
VDS_POOL_ATTRIB_NUM_CLMNS_MIN
0x20000L
ulNumberOfColumnsMin
VDS_POOL_ATTRIB_NUM_CLMNS_DEF
0x40000L
ulDefaultNumberofColumns
VDS_POOL_ATTRIB_DATA_AVL_HINT
0x80000L
ulDataAvailabilityHint
VDS_POOL_ATTRIB_ACCS_RNDM_HINT
0x100000L
ulAccessRandomnessHint
VDS_POOL_ATTRIB_ACCS_DIR_HINT
0x200000L
ulAccessDirectionHint
VDS_POOL_ATTRIB_ACCS_SIZE_HINT
0x400000L
ulAccessSizeHint
VDS_POOL_ATTRIB_ACCS_LTNCY_HINT
0x800000L
ulAccessLatencyHint
VDS_POOL_ATTRIB_ACCS_BDW_WT_HINT
0x1000000L
ulAccessBandwidthWeightHint
VDS_POOL_ATTRIB_STOR_COST_HINT
0x2000000L
ulStorageCostHint
VDS_POOL_ATTRIB_STOR_EFFCY_HINT
0x4000000L
ulStorageEfficiencyHint
VDS_POOL_ATTRIB_CUSTOM_ATTRIB
0x8000000L
pPoolCustomAttributes
raidTypeVDS_RAID_TYPE4+8+8記憶域プールの RAID の種類を指定する VDS_RAID_TYPE 列挙型の値です。記憶域プールに特定の RAID の種類がない場合は、このメンバーに VDS_RT_UNKNOWN を設定し、ullAttributeMask メンバー内の VDS_POOL_ATTRIB_RAIDTYPE 属性フラグをクリアします。
busTypeVDS_STORAGE_BUS_TYPE4+12+12記憶域プール内のドライブのバスの種類を指定する VDS_STORAGE_BUS_TYPE 列挙型の値です。
pwszIntendedUsageLPWSTR8/4+16+16記憶域プールの用途を指定する文字列です。通常は、記憶域プールを使用しているアプリケーション (たとえば "SQL" や "Exchange")、または記憶域プールを使用している業務機能 (たとえば "Finance" や "Human Resources") を示します。
bSpinDownBOOL4+24+20記憶域プール内のドライブが消費電力を抑えるために自動的にスピンダウンする場合は TRUE、それ以外の場合は FALSE です。
bIsThinProvisionedBOOL4+28+24記憶域プールがシン プロビジョニングされている場合は TRUE、それ以外の場合は FALSE です。プールがシン プロビジョニングされている場合、プールの消費済み領域のバイト数は、プールのプロビジョニング済み領域のバイト数より小さくなることがあります。(プロビジョニング済み領域のバイト数は、この構造体の ullProvisionedSpace メンバーに格納されます。消費済み領域のバイト数は、VDS_STORAGE_POOL_PROP 構造体の ullTotalConsumedSpace メンバーに格納されます。) ハードウェア プロバイダーがこのメンバーに TRUE を設定する場合は、VDS_STORAGE_POOL_PROP 構造体の type メンバーにも VDS_SPT_CONCRETE を設定しなければなりません。
ullProvisionedSpaceULONGLONG8+32+32プールがシン プロビジョニングされている場合、このメンバーはプールにプロビジョニングされている領域をバイト単位で指定します。このメンバーの値は、VDS_STORAGE_POOL_PROP 構造体の ullTotalConsumedSpace メンバーの値以上でなければなりません。
bNoSinglePointOfFailureBOOL4+40+40プールに単一障害点が存在しない場合は TRUE、それ以外の場合は FALSE です。
ulDataRedundancyMaxDWORD4+44+44この記憶域プールで保持できるデータの完全なコピーの最大数です。
ulDataRedundancyMinDWORD4+48+48この記憶域プールで保持できるデータの完全なコピーの最小数です。
ulDataRedundancyDefaultDWORD4+52+52この記憶域プールで保持されるデータの完全なコピーの既定の数です。
ulPackageRedundancyMaxDWORD4+56+56パッケージ冗長性を確保するために記憶域プールで使用できるドライブの最大数です。パッケージ冗長性は、データ損失を招くことなく記憶域プール内で障害が発生しうるドライブの数を示します。
ulPackageRedundancyMinDWORD4+60+60パッケージ冗長性を確保するために記憶域プールで使用できるドライブの最小数です。パッケージ冗長性は、データ損失を招くことなく記憶域プール内で障害が発生しうるドライブの数を示します。
ulPackageRedundancyDefaultDWORD4+64+64パッケージ冗長性を確保するために記憶域プールで使用されるドライブの既定の数です。パッケージ冗長性は、データ損失を招くことなく記憶域プール内で障害が発生しうるドライブの数を示します。
ulStripeSizeDWORD4+68+68プールがストライプ化されている場合 (パリティの有無を問いません)、記憶域プールのミラーまたはパリティのストライプ サイズをバイト単位で表します。
ulStripeSizeMaxDWORD4+72+72記憶域プールがサポートする最大のストライプ サイズ (バイト単位) です。
ulStripeSizeMinDWORD4+76+76記憶域プールがサポートする最小のストライプ サイズ (バイト単位) です。
ulDefaultStripeSizeDWORD4+80+80記憶域プールがサポートする既定のストライプ サイズ (バイト単位) です。
ulNumberOfColumnsDWORD4+84+84プールがストライプ化されている場合 (パリティの有無を問いません)、記憶域プールの列数です。
ulNumberOfColumnsMaxDWORD4+88+88記憶域プールがサポートする列の最大数です。
ulNumberOfColumnsMinDWORD4+92+92記憶域プールがサポートする列の最小数です。
ulDefaultNumberofColumnsDWORD4+96+96記憶域プールがサポートする列の既定の数です。
ulDataAvailabilityHintDWORD4+100+100データの可用性をどの程度重視するかを示すクライアントからのヒントです。値の範囲は 0 (重要ではない) から 10 (非常に重要) です。
ulAccessRandomnessHintDWORD4+104+104データ アクセスのランダム性を示すクライアントからのヒントです。値の範囲は 0 (完全にシーケンシャル) から 10 (完全にランダム) です。
ulAccessDirectionHintDWORD4+108+108データ アクセスの方向を示すクライアントからのヒントです。値の範囲は 0 (すべて読み取り) から 10 (すべて書き込み) です。
ulAccessSizeHintDWORD4+112+112最適なアクセス サイズをメガバイト単位で示すクライアントからのヒントです。
ulAccessLatencyHintDWORD4+116+116クライアントにとってのアクセス待ち時間の重要度を示すクライアントからのヒントです。値の範囲は 0 (重要ではない) から 10 (非常に重要) です。
ulAccessBandwidthWeightHintDWORD4+120+120広い帯域幅の重要度を示すクライアントからのヒントです。値の範囲は 0 (重要ではない) から 10 (非常に重要) です。
ulStorageCostHintDWORD4+124+124クライアントにとってのストレージ コストの重要度を示すクライアントからのヒントです。値の範囲は 0 (重要ではない) から 10 (非常に重要) です。ストレージ コストがクライアントにとって非常に重要な場合、値 10 は、より低コストのストレージを使用してプールをプロビジョニングすることをクライアントが望んでいることを示します。
ulStorageEfficiencyHintDWORD4+128+128クライアントにとってのストレージ効率の重要度を示すクライアントからのヒントです。値の範囲は 0 (重要ではない) から 10 (非常に重要) です。
ulNumOfCustomAttributesDWORD4+132+132記憶域プールに対して定義されているカスタム属性の数です。
pPoolCustomAttributesVDS_POOL_CUSTOM_ATTRIBUTES*8/4+136+136VDS_POOL_CUSTOM_ATTRIBUTES 構造体の配列です。各構造体には、記憶域プールに対して定義されたカスタム属性が 1 つ格納されます。
bReserved1BOOL4+144+140このメンバーは将来の使用のために予約済みです。使用しないでください。
bReserved2BOOL4+148+144このメンバーは将来の使用のために予約済みです。使用しないでください。
ulReserved1DWORD4+152+148このメンバーは将来の使用のために予約済みです。使用しないでください。
ulReserved2DWORD4+156+152このメンバーは将来の使用のために予約済みです。使用しないでください。
ullReserved1ULONGLONG8+160+160このメンバーは将来の使用のために予約済みです。使用しないでください。
ullReserved2ULONGLONG8+168+168このメンバーは将来の使用のために予約済みです。使用しないでください。

公式ドキュメント

[Windows 8 および Windows Server 2012 以降、Virtual Disk Service COM インターフェイスは Windows Storage Management API に置き換えられています。]

記憶域プールの属性を定義します。

解説(Remarks)

記憶域プールに属性が設定されている場合、その属性の設定はプールを構成するすべてのドライブ エクステントに適用されなければなりません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// VDS_POOL_ATTRIBUTES  (x64 176 / x86 176 バイト)
typedef struct VDS_POOL_ATTRIBUTES {
    ULONGLONG ullAttributeMask;
    VDS_RAID_TYPE raidType;
    VDS_STORAGE_BUS_TYPE busType;
    LPWSTR pwszIntendedUsage;
    BOOL bSpinDown;
    BOOL bIsThinProvisioned;
    ULONGLONG ullProvisionedSpace;
    BOOL bNoSinglePointOfFailure;
    DWORD ulDataRedundancyMax;
    DWORD ulDataRedundancyMin;
    DWORD ulDataRedundancyDefault;
    DWORD ulPackageRedundancyMax;
    DWORD ulPackageRedundancyMin;
    DWORD ulPackageRedundancyDefault;
    DWORD ulStripeSize;
    DWORD ulStripeSizeMax;
    DWORD ulStripeSizeMin;
    DWORD ulDefaultStripeSize;
    DWORD ulNumberOfColumns;
    DWORD ulNumberOfColumnsMax;
    DWORD ulNumberOfColumnsMin;
    DWORD ulDefaultNumberofColumns;
    DWORD ulDataAvailabilityHint;
    DWORD ulAccessRandomnessHint;
    DWORD ulAccessDirectionHint;
    DWORD ulAccessSizeHint;
    DWORD ulAccessLatencyHint;
    DWORD ulAccessBandwidthWeightHint;
    DWORD ulStorageCostHint;
    DWORD ulStorageEfficiencyHint;
    DWORD ulNumOfCustomAttributes;
    VDS_POOL_CUSTOM_ATTRIBUTES* pPoolCustomAttributes;
    BOOL bReserved1;
    BOOL bReserved2;
    DWORD ulReserved1;
    DWORD ulReserved2;
    ULONGLONG ullReserved1;
    ULONGLONG ullReserved2;
} VDS_POOL_ATTRIBUTES;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VDS_POOL_ATTRIBUTES
{
    public ulong ullAttributeMask;
    public int raidType;
    public int busType;
    public IntPtr pwszIntendedUsage;
    [MarshalAs(UnmanagedType.Bool)] public bool bSpinDown;
    [MarshalAs(UnmanagedType.Bool)] public bool bIsThinProvisioned;
    public ulong ullProvisionedSpace;
    [MarshalAs(UnmanagedType.Bool)] public bool bNoSinglePointOfFailure;
    public uint ulDataRedundancyMax;
    public uint ulDataRedundancyMin;
    public uint ulDataRedundancyDefault;
    public uint ulPackageRedundancyMax;
    public uint ulPackageRedundancyMin;
    public uint ulPackageRedundancyDefault;
    public uint ulStripeSize;
    public uint ulStripeSizeMax;
    public uint ulStripeSizeMin;
    public uint ulDefaultStripeSize;
    public uint ulNumberOfColumns;
    public uint ulNumberOfColumnsMax;
    public uint ulNumberOfColumnsMin;
    public uint ulDefaultNumberofColumns;
    public uint ulDataAvailabilityHint;
    public uint ulAccessRandomnessHint;
    public uint ulAccessDirectionHint;
    public uint ulAccessSizeHint;
    public uint ulAccessLatencyHint;
    public uint ulAccessBandwidthWeightHint;
    public uint ulStorageCostHint;
    public uint ulStorageEfficiencyHint;
    public uint ulNumOfCustomAttributes;
    public IntPtr pPoolCustomAttributes;
    [MarshalAs(UnmanagedType.Bool)] public bool bReserved1;
    [MarshalAs(UnmanagedType.Bool)] public bool bReserved2;
    public uint ulReserved1;
    public uint ulReserved2;
    public ulong ullReserved1;
    public ulong ullReserved2;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VDS_POOL_ATTRIBUTES
    Public ullAttributeMask As ULong
    Public raidType As Integer
    Public busType As Integer
    Public pwszIntendedUsage As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public bSpinDown As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bIsThinProvisioned As Boolean
    Public ullProvisionedSpace As ULong
    <MarshalAs(UnmanagedType.Bool)> Public bNoSinglePointOfFailure As Boolean
    Public ulDataRedundancyMax As UInteger
    Public ulDataRedundancyMin As UInteger
    Public ulDataRedundancyDefault As UInteger
    Public ulPackageRedundancyMax As UInteger
    Public ulPackageRedundancyMin As UInteger
    Public ulPackageRedundancyDefault As UInteger
    Public ulStripeSize As UInteger
    Public ulStripeSizeMax As UInteger
    Public ulStripeSizeMin As UInteger
    Public ulDefaultStripeSize As UInteger
    Public ulNumberOfColumns As UInteger
    Public ulNumberOfColumnsMax As UInteger
    Public ulNumberOfColumnsMin As UInteger
    Public ulDefaultNumberofColumns As UInteger
    Public ulDataAvailabilityHint As UInteger
    Public ulAccessRandomnessHint As UInteger
    Public ulAccessDirectionHint As UInteger
    Public ulAccessSizeHint As UInteger
    Public ulAccessLatencyHint As UInteger
    Public ulAccessBandwidthWeightHint As UInteger
    Public ulStorageCostHint As UInteger
    Public ulStorageEfficiencyHint As UInteger
    Public ulNumOfCustomAttributes As UInteger
    Public pPoolCustomAttributes As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public bReserved1 As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public bReserved2 As Boolean
    Public ulReserved1 As UInteger
    Public ulReserved2 As UInteger
    Public ullReserved1 As ULong
    Public ullReserved2 As ULong
End Structure
import ctypes
from ctypes import wintypes

class VDS_POOL_ATTRIBUTES(ctypes.Structure):
    _fields_ = [
        ("ullAttributeMask", ctypes.c_ulonglong),
        ("raidType", ctypes.c_int),
        ("busType", ctypes.c_int),
        ("pwszIntendedUsage", ctypes.c_void_p),
        ("bSpinDown", wintypes.BOOL),
        ("bIsThinProvisioned", wintypes.BOOL),
        ("ullProvisionedSpace", ctypes.c_ulonglong),
        ("bNoSinglePointOfFailure", wintypes.BOOL),
        ("ulDataRedundancyMax", wintypes.DWORD),
        ("ulDataRedundancyMin", wintypes.DWORD),
        ("ulDataRedundancyDefault", wintypes.DWORD),
        ("ulPackageRedundancyMax", wintypes.DWORD),
        ("ulPackageRedundancyMin", wintypes.DWORD),
        ("ulPackageRedundancyDefault", wintypes.DWORD),
        ("ulStripeSize", wintypes.DWORD),
        ("ulStripeSizeMax", wintypes.DWORD),
        ("ulStripeSizeMin", wintypes.DWORD),
        ("ulDefaultStripeSize", wintypes.DWORD),
        ("ulNumberOfColumns", wintypes.DWORD),
        ("ulNumberOfColumnsMax", wintypes.DWORD),
        ("ulNumberOfColumnsMin", wintypes.DWORD),
        ("ulDefaultNumberofColumns", wintypes.DWORD),
        ("ulDataAvailabilityHint", wintypes.DWORD),
        ("ulAccessRandomnessHint", wintypes.DWORD),
        ("ulAccessDirectionHint", wintypes.DWORD),
        ("ulAccessSizeHint", wintypes.DWORD),
        ("ulAccessLatencyHint", wintypes.DWORD),
        ("ulAccessBandwidthWeightHint", wintypes.DWORD),
        ("ulStorageCostHint", wintypes.DWORD),
        ("ulStorageEfficiencyHint", wintypes.DWORD),
        ("ulNumOfCustomAttributes", wintypes.DWORD),
        ("pPoolCustomAttributes", ctypes.c_void_p),
        ("bReserved1", wintypes.BOOL),
        ("bReserved2", wintypes.BOOL),
        ("ulReserved1", wintypes.DWORD),
        ("ulReserved2", wintypes.DWORD),
        ("ullReserved1", ctypes.c_ulonglong),
        ("ullReserved2", ctypes.c_ulonglong),
    ]
#[repr(C)]
pub struct VDS_POOL_ATTRIBUTES {
    pub ullAttributeMask: u64,
    pub raidType: i32,
    pub busType: i32,
    pub pwszIntendedUsage: *mut core::ffi::c_void,
    pub bSpinDown: i32,
    pub bIsThinProvisioned: i32,
    pub ullProvisionedSpace: u64,
    pub bNoSinglePointOfFailure: i32,
    pub ulDataRedundancyMax: u32,
    pub ulDataRedundancyMin: u32,
    pub ulDataRedundancyDefault: u32,
    pub ulPackageRedundancyMax: u32,
    pub ulPackageRedundancyMin: u32,
    pub ulPackageRedundancyDefault: u32,
    pub ulStripeSize: u32,
    pub ulStripeSizeMax: u32,
    pub ulStripeSizeMin: u32,
    pub ulDefaultStripeSize: u32,
    pub ulNumberOfColumns: u32,
    pub ulNumberOfColumnsMax: u32,
    pub ulNumberOfColumnsMin: u32,
    pub ulDefaultNumberofColumns: u32,
    pub ulDataAvailabilityHint: u32,
    pub ulAccessRandomnessHint: u32,
    pub ulAccessDirectionHint: u32,
    pub ulAccessSizeHint: u32,
    pub ulAccessLatencyHint: u32,
    pub ulAccessBandwidthWeightHint: u32,
    pub ulStorageCostHint: u32,
    pub ulStorageEfficiencyHint: u32,
    pub ulNumOfCustomAttributes: u32,
    pub pPoolCustomAttributes: *mut core::ffi::c_void,
    pub bReserved1: i32,
    pub bReserved2: i32,
    pub ulReserved1: u32,
    pub ulReserved2: u32,
    pub ullReserved1: u64,
    pub ullReserved2: u64,
}
import "golang.org/x/sys/windows"

type VDS_POOL_ATTRIBUTES struct {
	ullAttributeMask uint64
	raidType int32
	busType int32
	pwszIntendedUsage uintptr
	bSpinDown int32
	bIsThinProvisioned int32
	ullProvisionedSpace uint64
	bNoSinglePointOfFailure int32
	ulDataRedundancyMax uint32
	ulDataRedundancyMin uint32
	ulDataRedundancyDefault uint32
	ulPackageRedundancyMax uint32
	ulPackageRedundancyMin uint32
	ulPackageRedundancyDefault uint32
	ulStripeSize uint32
	ulStripeSizeMax uint32
	ulStripeSizeMin uint32
	ulDefaultStripeSize uint32
	ulNumberOfColumns uint32
	ulNumberOfColumnsMax uint32
	ulNumberOfColumnsMin uint32
	ulDefaultNumberofColumns uint32
	ulDataAvailabilityHint uint32
	ulAccessRandomnessHint uint32
	ulAccessDirectionHint uint32
	ulAccessSizeHint uint32
	ulAccessLatencyHint uint32
	ulAccessBandwidthWeightHint uint32
	ulStorageCostHint uint32
	ulStorageEfficiencyHint uint32
	ulNumOfCustomAttributes uint32
	pPoolCustomAttributes uintptr
	bReserved1 int32
	bReserved2 int32
	ulReserved1 uint32
	ulReserved2 uint32
	ullReserved1 uint64
	ullReserved2 uint64
}
type
  VDS_POOL_ATTRIBUTES = record
    ullAttributeMask: UInt64;
    raidType: Integer;
    busType: Integer;
    pwszIntendedUsage: Pointer;
    bSpinDown: BOOL;
    bIsThinProvisioned: BOOL;
    ullProvisionedSpace: UInt64;
    bNoSinglePointOfFailure: BOOL;
    ulDataRedundancyMax: DWORD;
    ulDataRedundancyMin: DWORD;
    ulDataRedundancyDefault: DWORD;
    ulPackageRedundancyMax: DWORD;
    ulPackageRedundancyMin: DWORD;
    ulPackageRedundancyDefault: DWORD;
    ulStripeSize: DWORD;
    ulStripeSizeMax: DWORD;
    ulStripeSizeMin: DWORD;
    ulDefaultStripeSize: DWORD;
    ulNumberOfColumns: DWORD;
    ulNumberOfColumnsMax: DWORD;
    ulNumberOfColumnsMin: DWORD;
    ulDefaultNumberofColumns: DWORD;
    ulDataAvailabilityHint: DWORD;
    ulAccessRandomnessHint: DWORD;
    ulAccessDirectionHint: DWORD;
    ulAccessSizeHint: DWORD;
    ulAccessLatencyHint: DWORD;
    ulAccessBandwidthWeightHint: DWORD;
    ulStorageCostHint: DWORD;
    ulStorageEfficiencyHint: DWORD;
    ulNumOfCustomAttributes: DWORD;
    pPoolCustomAttributes: Pointer;
    bReserved1: BOOL;
    bReserved2: BOOL;
    ulReserved1: DWORD;
    ulReserved2: DWORD;
    ullReserved1: UInt64;
    ullReserved2: UInt64;
  end;
const VDS_POOL_ATTRIBUTES = extern struct {
    ullAttributeMask: u64,
    raidType: i32,
    busType: i32,
    pwszIntendedUsage: ?*anyopaque,
    bSpinDown: i32,
    bIsThinProvisioned: i32,
    ullProvisionedSpace: u64,
    bNoSinglePointOfFailure: i32,
    ulDataRedundancyMax: u32,
    ulDataRedundancyMin: u32,
    ulDataRedundancyDefault: u32,
    ulPackageRedundancyMax: u32,
    ulPackageRedundancyMin: u32,
    ulPackageRedundancyDefault: u32,
    ulStripeSize: u32,
    ulStripeSizeMax: u32,
    ulStripeSizeMin: u32,
    ulDefaultStripeSize: u32,
    ulNumberOfColumns: u32,
    ulNumberOfColumnsMax: u32,
    ulNumberOfColumnsMin: u32,
    ulDefaultNumberofColumns: u32,
    ulDataAvailabilityHint: u32,
    ulAccessRandomnessHint: u32,
    ulAccessDirectionHint: u32,
    ulAccessSizeHint: u32,
    ulAccessLatencyHint: u32,
    ulAccessBandwidthWeightHint: u32,
    ulStorageCostHint: u32,
    ulStorageEfficiencyHint: u32,
    ulNumOfCustomAttributes: u32,
    pPoolCustomAttributes: ?*anyopaque,
    bReserved1: i32,
    bReserved2: i32,
    ulReserved1: u32,
    ulReserved2: u32,
    ullReserved1: u64,
    ullReserved2: u64,
};
type
  VDS_POOL_ATTRIBUTES {.bycopy.} = object
    ullAttributeMask: uint64
    raidType: int32
    busType: int32
    pwszIntendedUsage: pointer
    bSpinDown: int32
    bIsThinProvisioned: int32
    ullProvisionedSpace: uint64
    bNoSinglePointOfFailure: int32
    ulDataRedundancyMax: uint32
    ulDataRedundancyMin: uint32
    ulDataRedundancyDefault: uint32
    ulPackageRedundancyMax: uint32
    ulPackageRedundancyMin: uint32
    ulPackageRedundancyDefault: uint32
    ulStripeSize: uint32
    ulStripeSizeMax: uint32
    ulStripeSizeMin: uint32
    ulDefaultStripeSize: uint32
    ulNumberOfColumns: uint32
    ulNumberOfColumnsMax: uint32
    ulNumberOfColumnsMin: uint32
    ulDefaultNumberofColumns: uint32
    ulDataAvailabilityHint: uint32
    ulAccessRandomnessHint: uint32
    ulAccessDirectionHint: uint32
    ulAccessSizeHint: uint32
    ulAccessLatencyHint: uint32
    ulAccessBandwidthWeightHint: uint32
    ulStorageCostHint: uint32
    ulStorageEfficiencyHint: uint32
    ulNumOfCustomAttributes: uint32
    pPoolCustomAttributes: pointer
    bReserved1: int32
    bReserved2: int32
    ulReserved1: uint32
    ulReserved2: uint32
    ullReserved1: uint64
    ullReserved2: uint64
struct VDS_POOL_ATTRIBUTES
{
    ulong ullAttributeMask;
    int raidType;
    int busType;
    void* pwszIntendedUsage;
    int bSpinDown;
    int bIsThinProvisioned;
    ulong ullProvisionedSpace;
    int bNoSinglePointOfFailure;
    uint ulDataRedundancyMax;
    uint ulDataRedundancyMin;
    uint ulDataRedundancyDefault;
    uint ulPackageRedundancyMax;
    uint ulPackageRedundancyMin;
    uint ulPackageRedundancyDefault;
    uint ulStripeSize;
    uint ulStripeSizeMax;
    uint ulStripeSizeMin;
    uint ulDefaultStripeSize;
    uint ulNumberOfColumns;
    uint ulNumberOfColumnsMax;
    uint ulNumberOfColumnsMin;
    uint ulDefaultNumberofColumns;
    uint ulDataAvailabilityHint;
    uint ulAccessRandomnessHint;
    uint ulAccessDirectionHint;
    uint ulAccessSizeHint;
    uint ulAccessLatencyHint;
    uint ulAccessBandwidthWeightHint;
    uint ulStorageCostHint;
    uint ulStorageEfficiencyHint;
    uint ulNumOfCustomAttributes;
    void* pPoolCustomAttributes;
    int bReserved1;
    int bReserved2;
    uint ulReserved1;
    uint ulReserved2;
    ulong ullReserved1;
    ulong ullReserved2;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; VDS_POOL_ATTRIBUTES サイズ: 176 バイト(x86)
dim st, 44    ; 4byte整数×44(構造体サイズ 176 / 4 切り上げ)
; ullAttributeMask : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; raidType : VDS_RAID_TYPE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; busType : VDS_STORAGE_BUS_TYPE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pwszIntendedUsage : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; bSpinDown : BOOL (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; bIsThinProvisioned : BOOL (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ullProvisionedSpace : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; bNoSinglePointOfFailure : BOOL (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ulDataRedundancyMax : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ulDataRedundancyMin : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ulDataRedundancyDefault : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ulPackageRedundancyMax : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ulPackageRedundancyMin : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ulPackageRedundancyDefault : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ulStripeSize : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; ulStripeSizeMax : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ulStripeSizeMin : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ulDefaultStripeSize : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; ulNumberOfColumns : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; ulNumberOfColumnsMax : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ulNumberOfColumnsMin : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; ulDefaultNumberofColumns : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ulDataAvailabilityHint : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; ulAccessRandomnessHint : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; ulAccessDirectionHint : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; ulAccessSizeHint : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ulAccessLatencyHint : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; ulAccessBandwidthWeightHint : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; ulStorageCostHint : DWORD (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; ulStorageEfficiencyHint : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; ulNumOfCustomAttributes : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; pPoolCustomAttributes : VDS_POOL_CUSTOM_ATTRIBUTES* (+136, 4byte)  varptr(st)+136 を基点に操作(4byte:入れ子/配列)
; bReserved1 : BOOL (+140, 4byte)  st.35 = 値  /  値 = st.35   (lpoke/lpeek も可)
; bReserved2 : BOOL (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; ulReserved1 : DWORD (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; ulReserved2 : DWORD (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; ullReserved1 : ULONGLONG (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; ullReserved2 : ULONGLONG (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VDS_POOL_ATTRIBUTES サイズ: 176 バイト(x64)
dim st, 44    ; 4byte整数×44(構造体サイズ 176 / 4 切り上げ)
; ullAttributeMask : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; raidType : VDS_RAID_TYPE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; busType : VDS_STORAGE_BUS_TYPE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pwszIntendedUsage : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; bSpinDown : BOOL (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; bIsThinProvisioned : BOOL (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ullProvisionedSpace : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; bNoSinglePointOfFailure : BOOL (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ulDataRedundancyMax : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ulDataRedundancyMin : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ulDataRedundancyDefault : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ulPackageRedundancyMax : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ulPackageRedundancyMin : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ulPackageRedundancyDefault : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ulStripeSize : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; ulStripeSizeMax : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ulStripeSizeMin : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ulDefaultStripeSize : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; ulNumberOfColumns : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; ulNumberOfColumnsMax : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ulNumberOfColumnsMin : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; ulDefaultNumberofColumns : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ulDataAvailabilityHint : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; ulAccessRandomnessHint : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; ulAccessDirectionHint : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; ulAccessSizeHint : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ulAccessLatencyHint : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; ulAccessBandwidthWeightHint : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; ulStorageCostHint : DWORD (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; ulStorageEfficiencyHint : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; ulNumOfCustomAttributes : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; pPoolCustomAttributes : VDS_POOL_CUSTOM_ATTRIBUTES* (+136, 8byte)  varptr(st)+136 を基点に操作(8byte:入れ子/配列)
; bReserved1 : BOOL (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; bReserved2 : BOOL (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; ulReserved1 : DWORD (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; ulReserved2 : DWORD (+156, 4byte)  st.39 = 値  /  値 = st.39   (lpoke/lpeek も可)
; ullReserved1 : ULONGLONG (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; ullReserved2 : ULONGLONG (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global VDS_POOL_ATTRIBUTES
    #field int64 ullAttributeMask
    #field int raidType
    #field int busType
    #field intptr pwszIntendedUsage
    #field bool bSpinDown
    #field bool bIsThinProvisioned
    #field int64 ullProvisionedSpace
    #field bool bNoSinglePointOfFailure
    #field int ulDataRedundancyMax
    #field int ulDataRedundancyMin
    #field int ulDataRedundancyDefault
    #field int ulPackageRedundancyMax
    #field int ulPackageRedundancyMin
    #field int ulPackageRedundancyDefault
    #field int ulStripeSize
    #field int ulStripeSizeMax
    #field int ulStripeSizeMin
    #field int ulDefaultStripeSize
    #field int ulNumberOfColumns
    #field int ulNumberOfColumnsMax
    #field int ulNumberOfColumnsMin
    #field int ulDefaultNumberofColumns
    #field int ulDataAvailabilityHint
    #field int ulAccessRandomnessHint
    #field int ulAccessDirectionHint
    #field int ulAccessSizeHint
    #field int ulAccessLatencyHint
    #field int ulAccessBandwidthWeightHint
    #field int ulStorageCostHint
    #field int ulStorageEfficiencyHint
    #field int ulNumOfCustomAttributes
    #field intptr pPoolCustomAttributes
    #field bool bReserved1
    #field bool bReserved2
    #field int ulReserved1
    #field int ulReserved2
    #field int64 ullReserved1
    #field int64 ullReserved2
#endstruct

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