Win32 API 日本語リファレンス
ホームDevices.DeviceAndDriverInstallation › SP_ALTPLATFORM_INFO_V3

SP_ALTPLATFORM_INFO_V3

構造体
サイズx64: 35 バイト / x86: 35 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のバイト単位サイズ。V3版識別のため正しく設定する。
PlatformDWORD4+4+4対象プラットフォーム識別子(VER_PLATFORM_WIN32_NT等)。
MajorVersionDWORD4+8+8対象OSのメジャーバージョン番号。
MinorVersionDWORD4+12+12対象OSのマイナーバージョン番号。
ProcessorArchitectureWORD2+16+16プロセッサアーキテクチャ(PROCESSOR_ARCHITECTURE_*)。
Anonymous_Anonymous_e__Union2+18+18予約フィールドまたはReserved値を保持する無名共用体。
FirstValidatedMajorVersionDWORD4+20+20ドライバ検証が有効な最初のメジャーバージョン。
FirstValidatedMinorVersionDWORD4+24+24ドライバ検証が有効な最初のマイナーバージョン。
ProductTypeBYTE1+28+28OS製品種別(VER_NT_WORKSTATION等)を示すバイト値。
SuiteMaskWORD2+29+29インストール済みOSスイートを示すビットマスク(VER_SUITE_*)。
BuildNumberDWORD4+31+31対象OSのビルド番号。

共用体: _Anonymous_e__Union x64 2B / x86 2B

フィールドサイズx64x86
ReservedWORD2+0+0
FlagsWORD2+0+0

各言語での定義

#include <windows.h>

// SP_ALTPLATFORM_INFO_V3  (x64 35 / x86 35 バイト)
#pragma pack(push, 1)
typedef struct SP_ALTPLATFORM_INFO_V3 {
    DWORD cbSize;
    DWORD Platform;
    DWORD MajorVersion;
    DWORD MinorVersion;
    WORD ProcessorArchitecture;
    _Anonymous_e__Union Anonymous;
    DWORD FirstValidatedMajorVersion;
    DWORD FirstValidatedMinorVersion;
    BYTE ProductType;
    WORD SuiteMask;
    DWORD BuildNumber;
} SP_ALTPLATFORM_INFO_V3;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct SP_ALTPLATFORM_INFO_V3
{
    public uint cbSize;
    public uint Platform;
    public uint MajorVersion;
    public uint MinorVersion;
    public ushort ProcessorArchitecture;
    public _Anonymous_e__Union Anonymous;
    public uint FirstValidatedMajorVersion;
    public uint FirstValidatedMinorVersion;
    public byte ProductType;
    public ushort SuiteMask;
    public uint BuildNumber;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure SP_ALTPLATFORM_INFO_V3
    Public cbSize As UInteger
    Public Platform As UInteger
    Public MajorVersion As UInteger
    Public MinorVersion As UInteger
    Public ProcessorArchitecture As UShort
    Public Anonymous As _Anonymous_e__Union
    Public FirstValidatedMajorVersion As UInteger
    Public FirstValidatedMinorVersion As UInteger
    Public ProductType As Byte
    Public SuiteMask As UShort
    Public BuildNumber As UInteger
End Structure
import ctypes
from ctypes import wintypes

class SP_ALTPLATFORM_INFO_V3(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("Platform", wintypes.DWORD),
        ("MajorVersion", wintypes.DWORD),
        ("MinorVersion", wintypes.DWORD),
        ("ProcessorArchitecture", ctypes.c_ushort),
        ("Anonymous", _Anonymous_e__Union),
        ("FirstValidatedMajorVersion", wintypes.DWORD),
        ("FirstValidatedMinorVersion", wintypes.DWORD),
        ("ProductType", ctypes.c_ubyte),
        ("SuiteMask", ctypes.c_ushort),
        ("BuildNumber", wintypes.DWORD),
    ]
#[repr(C, packed(1))]
pub struct SP_ALTPLATFORM_INFO_V3 {
    pub cbSize: u32,
    pub Platform: u32,
    pub MajorVersion: u32,
    pub MinorVersion: u32,
    pub ProcessorArchitecture: u16,
    pub Anonymous: _Anonymous_e__Union,
    pub FirstValidatedMajorVersion: u32,
    pub FirstValidatedMinorVersion: u32,
    pub ProductType: u8,
    pub SuiteMask: u16,
    pub BuildNumber: u32,
}
import "golang.org/x/sys/windows"

type SP_ALTPLATFORM_INFO_V3 struct {
	cbSize uint32
	Platform uint32
	MajorVersion uint32
	MinorVersion uint32
	ProcessorArchitecture uint16
	Anonymous _Anonymous_e__Union
	FirstValidatedMajorVersion uint32
	FirstValidatedMinorVersion uint32
	ProductType byte
	SuiteMask uint16
	BuildNumber uint32
}
type
  SP_ALTPLATFORM_INFO_V3 = packed record
    cbSize: DWORD;
    Platform: DWORD;
    MajorVersion: DWORD;
    MinorVersion: DWORD;
    ProcessorArchitecture: Word;
    Anonymous: _Anonymous_e__Union;
    FirstValidatedMajorVersion: DWORD;
    FirstValidatedMinorVersion: DWORD;
    ProductType: Byte;
    SuiteMask: Word;
    BuildNumber: DWORD;
  end;
const SP_ALTPLATFORM_INFO_V3 = extern struct {
    cbSize: u32,
    Platform: u32,
    MajorVersion: u32,
    MinorVersion: u32,
    ProcessorArchitecture: u16,
    Anonymous: _Anonymous_e__Union,
    FirstValidatedMajorVersion: u32,
    FirstValidatedMinorVersion: u32,
    ProductType: u8,
    SuiteMask: u16,
    BuildNumber: u32,
};
type
  SP_ALTPLATFORM_INFO_V3 {.packed.} = object
    cbSize: uint32
    Platform: uint32
    MajorVersion: uint32
    MinorVersion: uint32
    ProcessorArchitecture: uint16
    Anonymous: _Anonymous_e__Union
    FirstValidatedMajorVersion: uint32
    FirstValidatedMinorVersion: uint32
    ProductType: uint8
    SuiteMask: uint16
    BuildNumber: uint32
align(1)
struct SP_ALTPLATFORM_INFO_V3
{
    uint cbSize;
    uint Platform;
    uint MajorVersion;
    uint MinorVersion;
    ushort ProcessorArchitecture;
    _Anonymous_e__Union Anonymous;
    uint FirstValidatedMajorVersion;
    uint FirstValidatedMinorVersion;
    ubyte ProductType;
    ushort SuiteMask;
    uint BuildNumber;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SP_ALTPLATFORM_INFO_V3 サイズ: 35 バイト(x64)
dim st, 9    ; 4byte整数×9(構造体サイズ 35 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Platform : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; MajorVersion : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; MinorVersion : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ProcessorArchitecture : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; Anonymous : _Anonymous_e__Union (+18, 2byte)  varptr(st)+18 を基点に操作(2byte:入れ子/配列)
; FirstValidatedMajorVersion : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; FirstValidatedMinorVersion : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ProductType : BYTE (+28, 1byte)  poke st,28,値  /  値 = peek(st,28)
; SuiteMask : WORD (+29, 2byte)  wpoke st,29,値  /  値 = wpeek(st,29)
; BuildNumber : DWORD (+31, 4byte)  lpoke st,31,値  /  値 = lpeek(st,31)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SP_ALTPLATFORM_INFO_V3, pack=1
    #field int cbSize
    #field int Platform
    #field int MajorVersion
    #field int MinorVersion
    #field short ProcessorArchitecture
    #field byte Anonymous 2
    #field int FirstValidatedMajorVersion
    #field int FirstValidatedMinorVersion
    #field byte ProductType
    #field short SuiteMask
    #field int BuildNumber
#endstruct

stdim st, SP_ALTPLATFORM_INFO_V3        ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。