ホーム › Storage.VirtualDiskService › VDS_LUN_INFORMATION
VDS_LUN_INFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| m_version | DWORD | 4 | +0 | +0 | LUN情報構造体のバージョン(Version)を表す32ビット値である。 |
| m_DeviceType | BYTE | 1 | +4 | +4 | SCSIデバイス種別(ディスク/テープ等)を表す8ビット値である。 |
| m_DeviceTypeModifier | BYTE | 1 | +5 | +5 | SCSIデバイス種別の修飾子(Device Type Modifier)を表す8ビット値である。 |
| m_bCommandQueueing | BOOL | 4 | +8 | +8 | デバイスがコマンドキューイングをサポートするか否かを示すブール値である。 |
| m_BusType | VDS_STORAGE_BUS_TYPE | 4 | +12 | +12 | デバイスが接続されているバスの種別(SCSI/ATA/USB等)を示すVDS_STORAGE_BUS_TYPE列挙値である。 |
| m_szVendorId | BYTE* | 8/4 | +16 | +16 | デバイスのベンダーID文字列を指すバイト列ポインタである。 |
| m_szProductId | BYTE* | 8/4 | +24 | +20 | デバイスの製品ID文字列を指すバイト列ポインタである。 |
| m_szProductRevision | BYTE* | 8/4 | +32 | +24 | デバイスの製品リビジョン文字列を指すバイト列ポインタである。 |
| m_szSerialNumber | BYTE* | 8/4 | +40 | +28 | デバイスのシリアル番号文字列を指すバイト列ポインタである。 |
| m_diskSignature | GUID | 16 | +48 | +32 | ディスクを一意に識別するディスク署名(Disk Signature)を表すGUIDである。 |
| m_deviceIdDescriptor | VDS_STORAGE_DEVICE_ID_DESCRIPTOR | 16/12 | +64 | +48 | デバイスのストレージ識別子群を格納するデバイスID記述子である。 |
| m_cInterconnects | DWORD | 4 | +80 | +60 | 相互接続(Interconnect)エントリの数を表す32ビット値である。 |
| m_rgInterconnects | VDS_INTERCONNECT* | 8/4 | +88 | +64 | 相互接続情報配列を指すVDS_INTERCONNECTポインタである。 |
各言語での定義
#include <windows.h>
// VDS_STORAGE_DEVICE_ID_DESCRIPTOR (x64 16 / x86 12 バイト)
typedef struct VDS_STORAGE_DEVICE_ID_DESCRIPTOR {
DWORD m_version;
DWORD m_cIdentifiers;
VDS_STORAGE_IDENTIFIER* m_rgIdentifiers;
} VDS_STORAGE_DEVICE_ID_DESCRIPTOR;
// VDS_LUN_INFORMATION (x64 96 / x86 68 バイト)
typedef struct VDS_LUN_INFORMATION {
DWORD m_version;
BYTE m_DeviceType;
BYTE m_DeviceTypeModifier;
BOOL m_bCommandQueueing;
VDS_STORAGE_BUS_TYPE m_BusType;
BYTE* m_szVendorId;
BYTE* m_szProductId;
BYTE* m_szProductRevision;
BYTE* m_szSerialNumber;
GUID m_diskSignature;
VDS_STORAGE_DEVICE_ID_DESCRIPTOR m_deviceIdDescriptor;
DWORD m_cInterconnects;
VDS_INTERCONNECT* m_rgInterconnects;
} VDS_LUN_INFORMATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VDS_STORAGE_DEVICE_ID_DESCRIPTOR
{
public uint m_version;
public uint m_cIdentifiers;
public IntPtr m_rgIdentifiers;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VDS_LUN_INFORMATION
{
public uint m_version;
public byte m_DeviceType;
public byte m_DeviceTypeModifier;
[MarshalAs(UnmanagedType.Bool)] public bool m_bCommandQueueing;
public int m_BusType;
public IntPtr m_szVendorId;
public IntPtr m_szProductId;
public IntPtr m_szProductRevision;
public IntPtr m_szSerialNumber;
public Guid m_diskSignature;
public VDS_STORAGE_DEVICE_ID_DESCRIPTOR m_deviceIdDescriptor;
public uint m_cInterconnects;
public IntPtr m_rgInterconnects;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VDS_STORAGE_DEVICE_ID_DESCRIPTOR
Public m_version As UInteger
Public m_cIdentifiers As UInteger
Public m_rgIdentifiers As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VDS_LUN_INFORMATION
Public m_version As UInteger
Public m_DeviceType As Byte
Public m_DeviceTypeModifier As Byte
<MarshalAs(UnmanagedType.Bool)> Public m_bCommandQueueing As Boolean
Public m_BusType As Integer
Public m_szVendorId As IntPtr
Public m_szProductId As IntPtr
Public m_szProductRevision As IntPtr
Public m_szSerialNumber As IntPtr
Public m_diskSignature As Guid
Public m_deviceIdDescriptor As VDS_STORAGE_DEVICE_ID_DESCRIPTOR
Public m_cInterconnects As UInteger
Public m_rgInterconnects As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class VDS_STORAGE_DEVICE_ID_DESCRIPTOR(ctypes.Structure):
_fields_ = [
("m_version", wintypes.DWORD),
("m_cIdentifiers", wintypes.DWORD),
("m_rgIdentifiers", ctypes.c_void_p),
]
class VDS_LUN_INFORMATION(ctypes.Structure):
_fields_ = [
("m_version", wintypes.DWORD),
("m_DeviceType", ctypes.c_ubyte),
("m_DeviceTypeModifier", ctypes.c_ubyte),
("m_bCommandQueueing", wintypes.BOOL),
("m_BusType", ctypes.c_int),
("m_szVendorId", ctypes.c_void_p),
("m_szProductId", ctypes.c_void_p),
("m_szProductRevision", ctypes.c_void_p),
("m_szSerialNumber", ctypes.c_void_p),
("m_diskSignature", GUID),
("m_deviceIdDescriptor", VDS_STORAGE_DEVICE_ID_DESCRIPTOR),
("m_cInterconnects", wintypes.DWORD),
("m_rgInterconnects", ctypes.c_void_p),
]#[repr(C)]
pub struct VDS_STORAGE_DEVICE_ID_DESCRIPTOR {
pub m_version: u32,
pub m_cIdentifiers: u32,
pub m_rgIdentifiers: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct VDS_LUN_INFORMATION {
pub m_version: u32,
pub m_DeviceType: u8,
pub m_DeviceTypeModifier: u8,
pub m_bCommandQueueing: i32,
pub m_BusType: i32,
pub m_szVendorId: *mut core::ffi::c_void,
pub m_szProductId: *mut core::ffi::c_void,
pub m_szProductRevision: *mut core::ffi::c_void,
pub m_szSerialNumber: *mut core::ffi::c_void,
pub m_diskSignature: GUID,
pub m_deviceIdDescriptor: VDS_STORAGE_DEVICE_ID_DESCRIPTOR,
pub m_cInterconnects: u32,
pub m_rgInterconnects: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type VDS_STORAGE_DEVICE_ID_DESCRIPTOR struct {
m_version uint32
m_cIdentifiers uint32
m_rgIdentifiers uintptr
}
type VDS_LUN_INFORMATION struct {
m_version uint32
m_DeviceType byte
m_DeviceTypeModifier byte
m_bCommandQueueing int32
m_BusType int32
m_szVendorId uintptr
m_szProductId uintptr
m_szProductRevision uintptr
m_szSerialNumber uintptr
m_diskSignature windows.GUID
m_deviceIdDescriptor VDS_STORAGE_DEVICE_ID_DESCRIPTOR
m_cInterconnects uint32
m_rgInterconnects uintptr
}type
VDS_STORAGE_DEVICE_ID_DESCRIPTOR = record
m_version: DWORD;
m_cIdentifiers: DWORD;
m_rgIdentifiers: Pointer;
end;
VDS_LUN_INFORMATION = record
m_version: DWORD;
m_DeviceType: Byte;
m_DeviceTypeModifier: Byte;
m_bCommandQueueing: BOOL;
m_BusType: Integer;
m_szVendorId: Pointer;
m_szProductId: Pointer;
m_szProductRevision: Pointer;
m_szSerialNumber: Pointer;
m_diskSignature: TGUID;
m_deviceIdDescriptor: VDS_STORAGE_DEVICE_ID_DESCRIPTOR;
m_cInterconnects: DWORD;
m_rgInterconnects: Pointer;
end;const VDS_STORAGE_DEVICE_ID_DESCRIPTOR = extern struct {
m_version: u32,
m_cIdentifiers: u32,
m_rgIdentifiers: ?*anyopaque,
};
const VDS_LUN_INFORMATION = extern struct {
m_version: u32,
m_DeviceType: u8,
m_DeviceTypeModifier: u8,
m_bCommandQueueing: i32,
m_BusType: i32,
m_szVendorId: ?*anyopaque,
m_szProductId: ?*anyopaque,
m_szProductRevision: ?*anyopaque,
m_szSerialNumber: ?*anyopaque,
m_diskSignature: GUID,
m_deviceIdDescriptor: VDS_STORAGE_DEVICE_ID_DESCRIPTOR,
m_cInterconnects: u32,
m_rgInterconnects: ?*anyopaque,
};type
VDS_STORAGE_DEVICE_ID_DESCRIPTOR {.bycopy.} = object
m_version: uint32
m_cIdentifiers: uint32
m_rgIdentifiers: pointer
VDS_LUN_INFORMATION {.bycopy.} = object
m_version: uint32
m_DeviceType: uint8
m_DeviceTypeModifier: uint8
m_bCommandQueueing: int32
m_BusType: int32
m_szVendorId: pointer
m_szProductId: pointer
m_szProductRevision: pointer
m_szSerialNumber: pointer
m_diskSignature: GUID
m_deviceIdDescriptor: VDS_STORAGE_DEVICE_ID_DESCRIPTOR
m_cInterconnects: uint32
m_rgInterconnects: pointerstruct VDS_STORAGE_DEVICE_ID_DESCRIPTOR
{
uint m_version;
uint m_cIdentifiers;
void* m_rgIdentifiers;
}
struct VDS_LUN_INFORMATION
{
uint m_version;
ubyte m_DeviceType;
ubyte m_DeviceTypeModifier;
int m_bCommandQueueing;
int m_BusType;
void* m_szVendorId;
void* m_szProductId;
void* m_szProductRevision;
void* m_szSerialNumber;
GUID m_diskSignature;
VDS_STORAGE_DEVICE_ID_DESCRIPTOR m_deviceIdDescriptor;
uint m_cInterconnects;
void* m_rgInterconnects;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; VDS_LUN_INFORMATION サイズ: 68 バイト(x86)
dim st, 17 ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; m_version : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; m_DeviceType : BYTE (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; m_DeviceTypeModifier : BYTE (+5, 1byte) poke st,5,値 / 値 = peek(st,5)
; m_bCommandQueueing : BOOL (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; m_BusType : VDS_STORAGE_BUS_TYPE (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; m_szVendorId : BYTE* (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; m_szProductId : BYTE* (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; m_szProductRevision : BYTE* (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; m_szSerialNumber : BYTE* (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; m_diskSignature : GUID (+32, 16byte) varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; m_deviceIdDescriptor : VDS_STORAGE_DEVICE_ID_DESCRIPTOR (+48, 12byte) varptr(st)+48 を基点に操作(12byte:入れ子/配列)
; m_cInterconnects : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; m_rgInterconnects : VDS_INTERCONNECT* (+64, 4byte) varptr(st)+64 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VDS_LUN_INFORMATION サイズ: 96 バイト(x64)
dim st, 24 ; 4byte整数×24(構造体サイズ 96 / 4 切り上げ)
; m_version : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; m_DeviceType : BYTE (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; m_DeviceTypeModifier : BYTE (+5, 1byte) poke st,5,値 / 値 = peek(st,5)
; m_bCommandQueueing : BOOL (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; m_BusType : VDS_STORAGE_BUS_TYPE (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; m_szVendorId : BYTE* (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; m_szProductId : BYTE* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; m_szProductRevision : BYTE* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; m_szSerialNumber : BYTE* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; m_diskSignature : GUID (+48, 16byte) varptr(st)+48 を基点に操作(16byte:入れ子/配列)
; m_deviceIdDescriptor : VDS_STORAGE_DEVICE_ID_DESCRIPTOR (+64, 16byte) varptr(st)+64 を基点に操作(16byte:入れ子/配列)
; m_cInterconnects : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; m_rgInterconnects : VDS_INTERCONNECT* (+88, 8byte) varptr(st)+88 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global VDS_STORAGE_DEVICE_ID_DESCRIPTOR
#field int m_version
#field int m_cIdentifiers
#field intptr m_rgIdentifiers
#endstruct
#defstruct global VDS_LUN_INFORMATION
#field int m_version
#field byte m_DeviceType
#field byte m_DeviceTypeModifier
#field bool m_bCommandQueueing
#field int m_BusType
#field intptr m_szVendorId
#field intptr m_szProductId
#field intptr m_szProductRevision
#field intptr m_szSerialNumber
#field GUID m_diskSignature
#field VDS_STORAGE_DEVICE_ID_DESCRIPTOR m_deviceIdDescriptor
#field int m_cInterconnects
#field intptr m_rgInterconnects
#endstruct
stdim st, VDS_LUN_INFORMATION ; NSTRUCT 変数を確保
st->m_version = 100
mes "m_version=" + st->m_version