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

VOLUME_GET_BC_PROPERTIES_INPUT

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

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

フィールド

フィールドサイズx64x86説明
VersionDWORD4+0+0本構造体のバージョン。
Reserved1DWORD4+4+4予約フィールド。0を指定する。
LowestByteOffsetULONGLONG8+8+8帯域確保I/O範囲の最小バイトオフセット。
HighestByteOffsetULONGLONG8+16+16帯域確保I/O範囲の最大バイトオフセット。
AccessTypeDWORD4+24+24アクセス種別を示す値。読み取り/書き込み。
AccessModeDWORD4+28+28アクセスモードを示す値。シーケンシャル/ランダム。

各言語での定義

#include <windows.h>

// VOLUME_GET_BC_PROPERTIES_INPUT  (x64 32 / x86 32 バイト)
typedef struct VOLUME_GET_BC_PROPERTIES_INPUT {
    DWORD Version;
    DWORD Reserved1;
    ULONGLONG LowestByteOffset;
    ULONGLONG HighestByteOffset;
    DWORD AccessType;
    DWORD AccessMode;
} VOLUME_GET_BC_PROPERTIES_INPUT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VOLUME_GET_BC_PROPERTIES_INPUT
{
    public uint Version;
    public uint Reserved1;
    public ulong LowestByteOffset;
    public ulong HighestByteOffset;
    public uint AccessType;
    public uint AccessMode;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VOLUME_GET_BC_PROPERTIES_INPUT
    Public Version As UInteger
    Public Reserved1 As UInteger
    Public LowestByteOffset As ULong
    Public HighestByteOffset As ULong
    Public AccessType As UInteger
    Public AccessMode As UInteger
End Structure
import ctypes
from ctypes import wintypes

class VOLUME_GET_BC_PROPERTIES_INPUT(ctypes.Structure):
    _fields_ = [
        ("Version", wintypes.DWORD),
        ("Reserved1", wintypes.DWORD),
        ("LowestByteOffset", ctypes.c_ulonglong),
        ("HighestByteOffset", ctypes.c_ulonglong),
        ("AccessType", wintypes.DWORD),
        ("AccessMode", wintypes.DWORD),
    ]
#[repr(C)]
pub struct VOLUME_GET_BC_PROPERTIES_INPUT {
    pub Version: u32,
    pub Reserved1: u32,
    pub LowestByteOffset: u64,
    pub HighestByteOffset: u64,
    pub AccessType: u32,
    pub AccessMode: u32,
}
import "golang.org/x/sys/windows"

type VOLUME_GET_BC_PROPERTIES_INPUT struct {
	Version uint32
	Reserved1 uint32
	LowestByteOffset uint64
	HighestByteOffset uint64
	AccessType uint32
	AccessMode uint32
}
type
  VOLUME_GET_BC_PROPERTIES_INPUT = record
    Version: DWORD;
    Reserved1: DWORD;
    LowestByteOffset: UInt64;
    HighestByteOffset: UInt64;
    AccessType: DWORD;
    AccessMode: DWORD;
  end;
const VOLUME_GET_BC_PROPERTIES_INPUT = extern struct {
    Version: u32,
    Reserved1: u32,
    LowestByteOffset: u64,
    HighestByteOffset: u64,
    AccessType: u32,
    AccessMode: u32,
};
type
  VOLUME_GET_BC_PROPERTIES_INPUT {.bycopy.} = object
    Version: uint32
    Reserved1: uint32
    LowestByteOffset: uint64
    HighestByteOffset: uint64
    AccessType: uint32
    AccessMode: uint32
struct VOLUME_GET_BC_PROPERTIES_INPUT
{
    uint Version;
    uint Reserved1;
    ulong LowestByteOffset;
    ulong HighestByteOffset;
    uint AccessType;
    uint AccessMode;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VOLUME_GET_BC_PROPERTIES_INPUT サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; Version : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Reserved1 : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; LowestByteOffset : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; HighestByteOffset : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; AccessType : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; AccessMode : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global VOLUME_GET_BC_PROPERTIES_INPUT
    #field int Version
    #field int Reserved1
    #field int64 LowestByteOffset
    #field int64 HighestByteOffset
    #field int AccessType
    #field int AccessMode
#endstruct

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