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

MI_Server

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

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

フィールド

フィールドサイズx64x86説明
serverFTMI_ServerFT*8/4+0+0MI_Server 関数テーブルへのポインターです。
contextFTMI_ContextFT*8/4+8+4MI_Context 関数テーブルへのポインターです。
instanceFTMI_InstanceFT*8/4+16+8MI_Instance 関数テーブルへのポインターです。
propertySetFTMI_PropertySetFT*8/4+24+12MI_PropertySet 関数テーブルへのポインターです。
filterFTMI_FilterFT*8/4+32+16MI_Filter 関数テーブルへのポインターです。

公式ドキュメント

この構造体は、Context、Instance、PropertySet、Filter の すべての型に対する既定の関数テーブルを定義します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// MI_Server  (x64 40 / x86 20 バイト)
typedef struct MI_Server {
    MI_ServerFT* serverFT;
    MI_ContextFT* contextFT;
    MI_InstanceFT* instanceFT;
    MI_PropertySetFT* propertySetFT;
    MI_FilterFT* filterFT;
} MI_Server;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MI_Server
{
    public IntPtr serverFT;
    public IntPtr contextFT;
    public IntPtr instanceFT;
    public IntPtr propertySetFT;
    public IntPtr filterFT;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MI_Server
    Public serverFT As IntPtr
    Public contextFT As IntPtr
    Public instanceFT As IntPtr
    Public propertySetFT As IntPtr
    Public filterFT As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class MI_Server(ctypes.Structure):
    _fields_ = [
        ("serverFT", ctypes.c_void_p),
        ("contextFT", ctypes.c_void_p),
        ("instanceFT", ctypes.c_void_p),
        ("propertySetFT", ctypes.c_void_p),
        ("filterFT", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct MI_Server {
    pub serverFT: *mut core::ffi::c_void,
    pub contextFT: *mut core::ffi::c_void,
    pub instanceFT: *mut core::ffi::c_void,
    pub propertySetFT: *mut core::ffi::c_void,
    pub filterFT: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type MI_Server struct {
	serverFT uintptr
	contextFT uintptr
	instanceFT uintptr
	propertySetFT uintptr
	filterFT uintptr
}
type
  MI_Server = record
    serverFT: Pointer;
    contextFT: Pointer;
    instanceFT: Pointer;
    propertySetFT: Pointer;
    filterFT: Pointer;
  end;
const MI_Server = extern struct {
    serverFT: ?*anyopaque,
    contextFT: ?*anyopaque,
    instanceFT: ?*anyopaque,
    propertySetFT: ?*anyopaque,
    filterFT: ?*anyopaque,
};
type
  MI_Server {.bycopy.} = object
    serverFT: pointer
    contextFT: pointer
    instanceFT: pointer
    propertySetFT: pointer
    filterFT: pointer
struct MI_Server
{
    void* serverFT;
    void* contextFT;
    void* instanceFT;
    void* propertySetFT;
    void* filterFT;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MI_Server サイズ: 20 バイト(x86)
dim st, 5    ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; serverFT : MI_ServerFT* (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; contextFT : MI_ContextFT* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; instanceFT : MI_InstanceFT* (+8, 4byte)  varptr(st)+8 を基点に操作(4byte:入れ子/配列)
; propertySetFT : MI_PropertySetFT* (+12, 4byte)  varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; filterFT : MI_FilterFT* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MI_Server サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; serverFT : MI_ServerFT* (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; contextFT : MI_ContextFT* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; instanceFT : MI_InstanceFT* (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; propertySetFT : MI_PropertySetFT* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; filterFT : MI_FilterFT* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MI_Server
    #field intptr serverFT
    #field intptr contextFT
    #field intptr instanceFT
    #field intptr propertySetFT
    #field intptr filterFT
#endstruct

stdim st, MI_Server        ; NSTRUCT 変数を確保