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

RepairInfo

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

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

フィールド

フィールドサイズx64x86説明
guidGUID16+0+0この修復オプションを一意に識別するGUIDを示す。
pwszClassNameLPWSTR8/4+16+16修復を実装するヘルパークラス名を表す文字列へのポインタ。
pwszDescriptionLPWSTR8/4+24+20修復内容の説明テキストを表す文字列へのポインタ。
sidTypeDWORD4+32+24修復実行に必要なセキュリティ識別子(SID)の種別を示す。
costINT4+36+28修復実行に伴うコストの推定値を示す(符号付き整数)。
flagsDWORD4+40+32修復の動作を制御するフラグを示す。
scopeREPAIR_SCOPE4+44+36修復が及ぶ範囲を示す列挙値(REPAIR_SCOPE)。
riskREPAIR_RISK4+48+40修復に伴うリスクの度合いを示す列挙値(REPAIR_RISK)。
UiInfoUiInfo48/24+56+44修復に関連するUI情報を保持するUiInfo構造体。
rootCauseIndexINT4+104+68対応する根本原因への索引を示す(符号付き整数)。

各言語での定義

#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;
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;
}
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
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),
    ]
#[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,
}
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
  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;
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,
};
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
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;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RepairInfo サイズ: 72 バイト(x86)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; guid : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; pwszClassName : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pwszDescription : LPWSTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; sidType : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; cost : INT (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; flags : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; scope : REPAIR_SCOPE (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; risk : REPAIR_RISK (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; UiInfo : UiInfo (+44, 24byte)  varptr(st)+44 を基点に操作(24byte:入れ子/配列)
; rootCauseIndex : INT (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RepairInfo サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; guid : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; pwszClassName : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pwszDescription : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; sidType : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; cost : INT (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; flags : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; scope : REPAIR_SCOPE (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; risk : REPAIR_RISK (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; UiInfo : UiInfo (+56, 48byte)  varptr(st)+56 を基点に操作(48byte:入れ子/配列)
; rootCauseIndex : INT (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; ※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

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