Win32 API 日本語リファレンス
ホームSystem.Hypervisor › WHV_VPCI_HARDWARE_IDS

WHV_VPCI_HARDWARE_IDS

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

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

フィールド

フィールドサイズx64x86説明
VendorIDWORD2+0+0PCIデバイスのベンダーIDを示すWORDである。
DeviceIDWORD2+2+2PCIデバイスのデバイスIDを示すWORDである。
RevisionIDBYTE1+4+4PCIデバイスのリビジョンIDを示すBYTEである。
ProgIfBYTE1+5+5プログラミングインターフェイスコード(クラスコードの一部)を示すBYTEである。
SubClassBYTE1+6+6デバイスのサブクラスコードを示すBYTEである。
BaseClassBYTE1+7+7デバイスのベースクラスコードを示すBYTEである。
SubVendorIDWORD2+8+8サブシステムベンダーIDを示すWORDである。
SubSystemIDWORD2+10+10サブシステムIDを示すWORDである。

各言語での定義

#include <windows.h>

// WHV_VPCI_HARDWARE_IDS  (x64 12 / x86 12 バイト)
typedef struct WHV_VPCI_HARDWARE_IDS {
    WORD VendorID;
    WORD DeviceID;
    BYTE RevisionID;
    BYTE ProgIf;
    BYTE SubClass;
    BYTE BaseClass;
    WORD SubVendorID;
    WORD SubSystemID;
} WHV_VPCI_HARDWARE_IDS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_VPCI_HARDWARE_IDS
{
    public ushort VendorID;
    public ushort DeviceID;
    public byte RevisionID;
    public byte ProgIf;
    public byte SubClass;
    public byte BaseClass;
    public ushort SubVendorID;
    public ushort SubSystemID;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_VPCI_HARDWARE_IDS
    Public VendorID As UShort
    Public DeviceID As UShort
    Public RevisionID As Byte
    Public ProgIf As Byte
    Public SubClass As Byte
    Public BaseClass As Byte
    Public SubVendorID As UShort
    Public SubSystemID As UShort
End Structure
import ctypes
from ctypes import wintypes

class WHV_VPCI_HARDWARE_IDS(ctypes.Structure):
    _fields_ = [
        ("VendorID", ctypes.c_ushort),
        ("DeviceID", ctypes.c_ushort),
        ("RevisionID", ctypes.c_ubyte),
        ("ProgIf", ctypes.c_ubyte),
        ("SubClass", ctypes.c_ubyte),
        ("BaseClass", ctypes.c_ubyte),
        ("SubVendorID", ctypes.c_ushort),
        ("SubSystemID", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct WHV_VPCI_HARDWARE_IDS {
    pub VendorID: u16,
    pub DeviceID: u16,
    pub RevisionID: u8,
    pub ProgIf: u8,
    pub SubClass: u8,
    pub BaseClass: u8,
    pub SubVendorID: u16,
    pub SubSystemID: u16,
}
import "golang.org/x/sys/windows"

type WHV_VPCI_HARDWARE_IDS struct {
	VendorID uint16
	DeviceID uint16
	RevisionID byte
	ProgIf byte
	SubClass byte
	BaseClass byte
	SubVendorID uint16
	SubSystemID uint16
}
type
  WHV_VPCI_HARDWARE_IDS = record
    VendorID: Word;
    DeviceID: Word;
    RevisionID: Byte;
    ProgIf: Byte;
    SubClass: Byte;
    BaseClass: Byte;
    SubVendorID: Word;
    SubSystemID: Word;
  end;
const WHV_VPCI_HARDWARE_IDS = extern struct {
    VendorID: u16,
    DeviceID: u16,
    RevisionID: u8,
    ProgIf: u8,
    SubClass: u8,
    BaseClass: u8,
    SubVendorID: u16,
    SubSystemID: u16,
};
type
  WHV_VPCI_HARDWARE_IDS {.bycopy.} = object
    VendorID: uint16
    DeviceID: uint16
    RevisionID: uint8
    ProgIf: uint8
    SubClass: uint8
    BaseClass: uint8
    SubVendorID: uint16
    SubSystemID: uint16
struct WHV_VPCI_HARDWARE_IDS
{
    ushort VendorID;
    ushort DeviceID;
    ubyte RevisionID;
    ubyte ProgIf;
    ubyte SubClass;
    ubyte BaseClass;
    ushort SubVendorID;
    ushort SubSystemID;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WHV_VPCI_HARDWARE_IDS サイズ: 12 バイト(x64)
dim st, 3    ; 4byte整数×3(構造体サイズ 12 / 4 切り上げ)
; VendorID : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; DeviceID : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; RevisionID : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; ProgIf : BYTE (+5, 1byte)  poke st,5,値  /  値 = peek(st,5)
; SubClass : BYTE (+6, 1byte)  poke st,6,値  /  値 = peek(st,6)
; BaseClass : BYTE (+7, 1byte)  poke st,7,値  /  値 = peek(st,7)
; SubVendorID : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; SubSystemID : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WHV_VPCI_HARDWARE_IDS
    #field short VendorID
    #field short DeviceID
    #field byte RevisionID
    #field byte ProgIf
    #field byte SubClass
    #field byte BaseClass
    #field short SubVendorID
    #field short SubSystemID
#endstruct

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