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+0サーバー操作用の関数テーブルへのポインタ。
contextFTMI_ContextFT*8/4+8+4コンテキスト操作用の関数テーブルへのポインタ。
instanceFTMI_InstanceFT*8/4+16+8インスタンス操作用の関数テーブルへのポインタ。
propertySetFTMI_PropertySetFT*8/4+24+12プロパティセット操作用の関数テーブルへのポインタ。
filterFTMI_FilterFT*8/4+32+16フィルター操作用の関数テーブルへのポインタ。

各言語での定義

#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 変数を確保