ホーム › System.Ioctl › STORAGE_ADAPTER_DESCRIPTOR
STORAGE_ADAPTER_DESCRIPTOR
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Version | DWORD | 4 | +0 | +0 | この構造体のサイズをバイト単位で格納します。このメンバーの値は、構造体にメンバーが追加されるのに伴って変化します。 | ||||||||||
| Size | DWORD | 4 | +4 | +4 | 返されるデータの合計サイズをバイト単位で指定します。これには、この構造体に続くデータが含まれる場合があります。 | ||||||||||
| MaximumTransferLength | DWORD | 4 | +8 | +8 | ストレージアダプターが 1 回の操作で転送できる最大バイト数を指定します。 | ||||||||||
| MaximumPhysicalPages | DWORD | 4 | +12 | +12 | ストレージアダプターが 1 回の転送で管理できる不連続な物理ページの最大数 (言い換えると、スキャッター/ギャザーのサポート範囲) を指定します。 | ||||||||||
| AlignmentMask | DWORD | 4 | +16 | +16 | 転送に関するストレージアダプターのアラインメント要件を指定します。アラインメントマスクは、ストレージアダプターが転送操作で必要とするバッファーのアラインメント制限を示します。有効なマスク値は、Windows のバージョンごとのメモリマネージャーの特性によっても制限されます。
| ||||||||||
| AdapterUsesPio | BOOLEAN | 1 | +20 | +20 | このメンバーが TRUE の場合、ストレージアダプターはプログラム I/O (PIO) を使用し、データバッファーには物理メモリにマップされたシステム空間の仮想アドレスが必要です。このメンバーが FALSE の場合、ストレージアダプターは PIO を使用しません。 | ||||||||||
| AdapterScansDown | BOOLEAN | 1 | +21 | +21 | このメンバーが TRUE の場合、ストレージアダプターは BIOS デバイスを下方向にスキャンします。つまり、ストレージアダプターは最も小さいデバイス番号ではなく、最も大きいデバイス番号からスキャンを開始します。このメンバーが FALSE の場合、ストレージアダプターは最も小さいデバイス番号からスキャンを開始します。このメンバーは、レガシーミニポートドライバー用に予約済みです。 | ||||||||||
| CommandQueueing | BOOLEAN | 1 | +22 | +22 | このメンバーが TRUE の場合、ストレージアダプターは SCSI のタグ付きキューイングおよび/または論理ユニットごとの内部キュー、あるいは SCSI 以外での同等の機能をサポートします。このメンバーが FALSE の場合、ストレージアダプターは SCSI のタグ付きキューイングも論理ユニットごとの内部キューもサポートしません。 | ||||||||||
| AcceleratedTransfer | BOOLEAN | 1 | +23 | +23 | このメンバーが TRUE の場合、ストレージアダプターは I/O を高速化する手段として同期転送をサポートします。このメンバーが FALSE の場合、ストレージアダプターは I/O を高速化する手段としての同期転送をサポートしません。 | ||||||||||
| BusType | BYTE | 1 | +24 | +24 | デバイスが接続されているバスの種類を示す STORAGE_BUS_TYPE 型の値を指定します。 | ||||||||||
| BusMajorVersion | WORD | 2 | +26 | +26 | ストレージアダプターのメジャーバージョン番号を指定します (存在する場合)。 | ||||||||||
| BusMinorVersion | WORD | 2 | +28 | +28 | ストレージアダプターのマイナーバージョン番号を指定します (存在する場合)。 | ||||||||||
| SrbType | BYTE | 1 | +30 | +30 | HBA が使用する SCSI 要求ブロック (SRB) の種類を指定します。
このメンバーは Windows 8 以降で有効です。 | ||||||||||
| AddressType | BYTE | 1 | +31 | +31 | HBA のアドレスの種類を指定します。
このメンバーは Windows 8 以降で有効です。 |
公式ドキュメント
IOCTL_STORAGE_QUERY_PROPERTY 制御コードと共に使用し、デバイスのストレージアダプター記述子データを取得します。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// STORAGE_ADAPTER_DESCRIPTOR (x64 32 / x86 32 バイト)
typedef struct STORAGE_ADAPTER_DESCRIPTOR {
DWORD Version;
DWORD Size;
DWORD MaximumTransferLength;
DWORD MaximumPhysicalPages;
DWORD AlignmentMask;
BOOLEAN AdapterUsesPio;
BOOLEAN AdapterScansDown;
BOOLEAN CommandQueueing;
BOOLEAN AcceleratedTransfer;
BYTE BusType;
WORD BusMajorVersion;
WORD BusMinorVersion;
BYTE SrbType;
BYTE AddressType;
} STORAGE_ADAPTER_DESCRIPTOR;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct STORAGE_ADAPTER_DESCRIPTOR
{
public uint Version;
public uint Size;
public uint MaximumTransferLength;
public uint MaximumPhysicalPages;
public uint AlignmentMask;
[MarshalAs(UnmanagedType.U1)] public bool AdapterUsesPio;
[MarshalAs(UnmanagedType.U1)] public bool AdapterScansDown;
[MarshalAs(UnmanagedType.U1)] public bool CommandQueueing;
[MarshalAs(UnmanagedType.U1)] public bool AcceleratedTransfer;
public byte BusType;
public ushort BusMajorVersion;
public ushort BusMinorVersion;
public byte SrbType;
public byte AddressType;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure STORAGE_ADAPTER_DESCRIPTOR
Public Version As UInteger
Public Size As UInteger
Public MaximumTransferLength As UInteger
Public MaximumPhysicalPages As UInteger
Public AlignmentMask As UInteger
<MarshalAs(UnmanagedType.U1)> Public AdapterUsesPio As Boolean
<MarshalAs(UnmanagedType.U1)> Public AdapterScansDown As Boolean
<MarshalAs(UnmanagedType.U1)> Public CommandQueueing As Boolean
<MarshalAs(UnmanagedType.U1)> Public AcceleratedTransfer As Boolean
Public BusType As Byte
Public BusMajorVersion As UShort
Public BusMinorVersion As UShort
Public SrbType As Byte
Public AddressType As Byte
End Structureimport ctypes
from ctypes import wintypes
class STORAGE_ADAPTER_DESCRIPTOR(ctypes.Structure):
_fields_ = [
("Version", wintypes.DWORD),
("Size", wintypes.DWORD),
("MaximumTransferLength", wintypes.DWORD),
("MaximumPhysicalPages", wintypes.DWORD),
("AlignmentMask", wintypes.DWORD),
("AdapterUsesPio", ctypes.c_byte),
("AdapterScansDown", ctypes.c_byte),
("CommandQueueing", ctypes.c_byte),
("AcceleratedTransfer", ctypes.c_byte),
("BusType", ctypes.c_ubyte),
("BusMajorVersion", ctypes.c_ushort),
("BusMinorVersion", ctypes.c_ushort),
("SrbType", ctypes.c_ubyte),
("AddressType", ctypes.c_ubyte),
]#[repr(C)]
pub struct STORAGE_ADAPTER_DESCRIPTOR {
pub Version: u32,
pub Size: u32,
pub MaximumTransferLength: u32,
pub MaximumPhysicalPages: u32,
pub AlignmentMask: u32,
pub AdapterUsesPio: u8,
pub AdapterScansDown: u8,
pub CommandQueueing: u8,
pub AcceleratedTransfer: u8,
pub BusType: u8,
pub BusMajorVersion: u16,
pub BusMinorVersion: u16,
pub SrbType: u8,
pub AddressType: u8,
}import "golang.org/x/sys/windows"
type STORAGE_ADAPTER_DESCRIPTOR struct {
Version uint32
Size uint32
MaximumTransferLength uint32
MaximumPhysicalPages uint32
AlignmentMask uint32
AdapterUsesPio byte
AdapterScansDown byte
CommandQueueing byte
AcceleratedTransfer byte
BusType byte
BusMajorVersion uint16
BusMinorVersion uint16
SrbType byte
AddressType byte
}type
STORAGE_ADAPTER_DESCRIPTOR = record
Version: DWORD;
Size: DWORD;
MaximumTransferLength: DWORD;
MaximumPhysicalPages: DWORD;
AlignmentMask: DWORD;
AdapterUsesPio: ByteBool;
AdapterScansDown: ByteBool;
CommandQueueing: ByteBool;
AcceleratedTransfer: ByteBool;
BusType: Byte;
BusMajorVersion: Word;
BusMinorVersion: Word;
SrbType: Byte;
AddressType: Byte;
end;const STORAGE_ADAPTER_DESCRIPTOR = extern struct {
Version: u32,
Size: u32,
MaximumTransferLength: u32,
MaximumPhysicalPages: u32,
AlignmentMask: u32,
AdapterUsesPio: u8,
AdapterScansDown: u8,
CommandQueueing: u8,
AcceleratedTransfer: u8,
BusType: u8,
BusMajorVersion: u16,
BusMinorVersion: u16,
SrbType: u8,
AddressType: u8,
};type
STORAGE_ADAPTER_DESCRIPTOR {.bycopy.} = object
Version: uint32
Size: uint32
MaximumTransferLength: uint32
MaximumPhysicalPages: uint32
AlignmentMask: uint32
AdapterUsesPio: uint8
AdapterScansDown: uint8
CommandQueueing: uint8
AcceleratedTransfer: uint8
BusType: uint8
BusMajorVersion: uint16
BusMinorVersion: uint16
SrbType: uint8
AddressType: uint8struct STORAGE_ADAPTER_DESCRIPTOR
{
uint Version;
uint Size;
uint MaximumTransferLength;
uint MaximumPhysicalPages;
uint AlignmentMask;
ubyte AdapterUsesPio;
ubyte AdapterScansDown;
ubyte CommandQueueing;
ubyte AcceleratedTransfer;
ubyte BusType;
ushort BusMajorVersion;
ushort BusMinorVersion;
ubyte SrbType;
ubyte AddressType;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; STORAGE_ADAPTER_DESCRIPTOR サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; Version : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Size : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; MaximumTransferLength : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; MaximumPhysicalPages : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; AlignmentMask : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; AdapterUsesPio : BOOLEAN (+20, 1byte) poke st,20,値 / 値 = peek(st,20)
; AdapterScansDown : BOOLEAN (+21, 1byte) poke st,21,値 / 値 = peek(st,21)
; CommandQueueing : BOOLEAN (+22, 1byte) poke st,22,値 / 値 = peek(st,22)
; AcceleratedTransfer : BOOLEAN (+23, 1byte) poke st,23,値 / 値 = peek(st,23)
; BusType : BYTE (+24, 1byte) poke st,24,値 / 値 = peek(st,24)
; BusMajorVersion : WORD (+26, 2byte) wpoke st,26,値 / 値 = wpeek(st,26)
; BusMinorVersion : WORD (+28, 2byte) wpoke st,28,値 / 値 = wpeek(st,28)
; SrbType : BYTE (+30, 1byte) poke st,30,値 / 値 = peek(st,30)
; AddressType : BYTE (+31, 1byte) poke st,31,値 / 値 = peek(st,31)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global STORAGE_ADAPTER_DESCRIPTOR
#field int Version
#field int Size
#field int MaximumTransferLength
#field int MaximumPhysicalPages
#field int AlignmentMask
#field bool1 AdapterUsesPio
#field bool1 AdapterScansDown
#field bool1 CommandQueueing
#field bool1 AcceleratedTransfer
#field byte BusType
#field short BusMajorVersion
#field short BusMinorVersion
#field byte SrbType
#field byte AddressType
#endstruct
stdim st, STORAGE_ADAPTER_DESCRIPTOR ; NSTRUCT 変数を確保
st->Version = 100
mes "Version=" + st->Version