Win32 API 日本語リファレンス
ホームNetworkManagement.NetworkDiagnosticsFramework › RepairInfoEx

RepairInfoEx

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

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

フィールド

フィールドサイズx64x86説明
repairRepairInfo112/72+0+0修復の詳細を保持するRepairInfo構造体。
repairRankWORD2+112+72複数修復候補内での優先順位(ランク)を示す。

各言語での定義

#include <windows.h>

// UiInfo  (x64 48 / x86 24 バイト)
typedef struct UiInfo {
    UI_INFO_TYPE type;
    _Anonymous_e__Union Anonymous;
} UiInfo;

// RepairInfo  (x64 112 / x86 72 バイト)
typedef struct RepairInfo {
    GUID guid;
    LPWSTR pwszClassName;
    LPWSTR pwszDescription;
    DWORD sidType;
    INT cost;
    DWORD flags;
    REPAIR_SCOPE scope;
    REPAIR_RISK risk;
    UiInfo UiInfo;
    INT rootCauseIndex;
} RepairInfo;

// RepairInfoEx  (x64 120 / x86 76 バイト)
typedef struct RepairInfoEx {
    RepairInfo repair;
    WORD repairRank;
} RepairInfoEx;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UiInfo
{
    public int type;
    public _Anonymous_e__Union Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RepairInfo
{
    public Guid guid;
    public IntPtr pwszClassName;
    public IntPtr pwszDescription;
    public uint sidType;
    public int cost;
    public uint flags;
    public int scope;
    public int risk;
    public UiInfo UiInfo;
    public int rootCauseIndex;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RepairInfoEx
{
    public RepairInfo repair;
    public ushort repairRank;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure UiInfo
    Public type As Integer
    Public Anonymous As _Anonymous_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RepairInfo
    Public guid As Guid
    Public pwszClassName As IntPtr
    Public pwszDescription As IntPtr
    Public sidType As UInteger
    Public cost As Integer
    Public flags As UInteger
    Public scope As Integer
    Public risk As Integer
    Public UiInfo As UiInfo
    Public rootCauseIndex As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RepairInfoEx
    Public repair As RepairInfo
    Public repairRank As UShort
End Structure
import ctypes
from ctypes import wintypes

class UiInfo(ctypes.Structure):
    _fields_ = [
        ("type", ctypes.c_int),
        ("Anonymous", _Anonymous_e__Union),
    ]

class RepairInfo(ctypes.Structure):
    _fields_ = [
        ("guid", GUID),
        ("pwszClassName", ctypes.c_void_p),
        ("pwszDescription", ctypes.c_void_p),
        ("sidType", wintypes.DWORD),
        ("cost", ctypes.c_int),
        ("flags", wintypes.DWORD),
        ("scope", ctypes.c_int),
        ("risk", ctypes.c_int),
        ("UiInfo", UiInfo),
        ("rootCauseIndex", ctypes.c_int),
    ]

class RepairInfoEx(ctypes.Structure):
    _fields_ = [
        ("repair", RepairInfo),
        ("repairRank", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct UiInfo {
    pub type: i32,
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct RepairInfo {
    pub guid: GUID,
    pub pwszClassName: *mut core::ffi::c_void,
    pub pwszDescription: *mut core::ffi::c_void,
    pub sidType: u32,
    pub cost: i32,
    pub flags: u32,
    pub scope: i32,
    pub risk: i32,
    pub UiInfo: UiInfo,
    pub rootCauseIndex: i32,
}

#[repr(C)]
pub struct RepairInfoEx {
    pub repair: RepairInfo,
    pub repairRank: u16,
}
import "golang.org/x/sys/windows"

type UiInfo struct {
	type int32
	Anonymous _Anonymous_e__Union
}

type RepairInfo struct {
	guid windows.GUID
	pwszClassName uintptr
	pwszDescription uintptr
	sidType uint32
	cost int32
	flags uint32
	scope int32
	risk int32
	UiInfo UiInfo
	rootCauseIndex int32
}

type RepairInfoEx struct {
	repair RepairInfo
	repairRank uint16
}
type
  UiInfo = record
    type: Integer;
    Anonymous: _Anonymous_e__Union;
  end;

  RepairInfo = record
    guid: TGUID;
    pwszClassName: Pointer;
    pwszDescription: Pointer;
    sidType: DWORD;
    cost: Integer;
    flags: DWORD;
    scope: Integer;
    risk: Integer;
    UiInfo: UiInfo;
    rootCauseIndex: Integer;
  end;

  RepairInfoEx = record
    repair: RepairInfo;
    repairRank: Word;
  end;
const UiInfo = extern struct {
    type: i32,
    Anonymous: _Anonymous_e__Union,
};

const RepairInfo = extern struct {
    guid: GUID,
    pwszClassName: ?*anyopaque,
    pwszDescription: ?*anyopaque,
    sidType: u32,
    cost: i32,
    flags: u32,
    scope: i32,
    risk: i32,
    UiInfo: UiInfo,
    rootCauseIndex: i32,
};

const RepairInfoEx = extern struct {
    repair: RepairInfo,
    repairRank: u16,
};
type
  UiInfo {.bycopy.} = object
    type: int32
    Anonymous: _Anonymous_e__Union

  RepairInfo {.bycopy.} = object
    guid: GUID
    pwszClassName: pointer
    pwszDescription: pointer
    sidType: uint32
    cost: int32
    flags: uint32
    scope: int32
    risk: int32
    UiInfo: UiInfo
    rootCauseIndex: int32

  RepairInfoEx {.bycopy.} = object
    repair: RepairInfo
    repairRank: uint16
struct UiInfo
{
    int type;
    _Anonymous_e__Union Anonymous;
}

struct RepairInfo
{
    GUID guid;
    void* pwszClassName;
    void* pwszDescription;
    uint sidType;
    int cost;
    uint flags;
    int scope;
    int risk;
    UiInfo UiInfo;
    int rootCauseIndex;
}

struct RepairInfoEx
{
    RepairInfo repair;
    ushort repairRank;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RepairInfoEx サイズ: 76 バイト(x86)
dim st, 19    ; 4byte整数×19(構造体サイズ 76 / 4 切り上げ)
; repair : RepairInfo (+0, 72byte)  varptr(st)+0 を基点に操作(72byte:入れ子/配列)
; repairRank : WORD (+72, 2byte)  wpoke st,72,値  /  値 = wpeek(st,72)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RepairInfoEx サイズ: 120 バイト(x64)
dim st, 30    ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; repair : RepairInfo (+0, 112byte)  varptr(st)+0 を基点に操作(112byte:入れ子/配列)
; repairRank : WORD (+112, 2byte)  wpoke st,112,値  /  値 = wpeek(st,112)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global UiInfo
    #field int type
    #field byte Anonymous 40
#endstruct

#defstruct global RepairInfo
    #field GUID guid
    #field intptr pwszClassName
    #field intptr pwszDescription
    #field int sidType
    #field int cost
    #field int flags
    #field int scope
    #field int risk
    #field UiInfo UiInfo
    #field int rootCauseIndex
#endstruct

#defstruct global RepairInfoEx
    #field RepairInfo repair
    #field short repairRank
#endstruct

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