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

PERUSERSECTIONW

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

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

フィールド

フィールドサイズx64x86説明
szGUIDWCHAR118+0+0ユーザーごとのスタブを識別するGUID文字列(Unicode)。
szDispNameWCHAR256+118+118表示名を表すWCHAR配列(Unicode)。
szLocaleWCHAR20+374+374ロケールを表すWCHAR配列(Unicode)。
szStubWCHAR2080+394+394スタブ情報を表すWCHAR配列(Unicode)。
szVersionWCHAR64+2474+2474バージョン文字列(Unicode)。
szCompIDWCHAR256+2538+2538コンポーネントIDを表すWCHAR配列(Unicode)。
dwIsInstalledDWORD4+2796+2796インストール済みか否かを示す値。
bRollbackBOOL4+2800+2800ロールバックが必要か否かを示すBOOL。

各言語での定義

#include <windows.h>

// PERUSERSECTIONW  (x64 2804 / x86 2804 バイト)
typedef struct PERUSERSECTIONW {
    WCHAR szGUID[59];
    WCHAR szDispName[128];
    WCHAR szLocale[10];
    WCHAR szStub[1040];
    WCHAR szVersion[32];
    WCHAR szCompID[128];
    DWORD dwIsInstalled;
    BOOL bRollback;
} PERUSERSECTIONW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PERUSERSECTIONW
{
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 59)] public string szGUID;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string szDispName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string szLocale;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1040)] public string szStub;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string szVersion;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string szCompID;
    public uint dwIsInstalled;
    [MarshalAs(UnmanagedType.Bool)] public bool bRollback;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PERUSERSECTIONW
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=59)> Public szGUID As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> Public szDispName As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=10)> Public szLocale As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1040)> Public szStub As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> Public szVersion As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> Public szCompID As String
    Public dwIsInstalled As UInteger
    <MarshalAs(UnmanagedType.Bool)> Public bRollback As Boolean
End Structure
import ctypes
from ctypes import wintypes

class PERUSERSECTIONW(ctypes.Structure):
    _fields_ = [
        ("szGUID", ctypes.c_wchar * 59),
        ("szDispName", ctypes.c_wchar * 128),
        ("szLocale", ctypes.c_wchar * 10),
        ("szStub", ctypes.c_wchar * 1040),
        ("szVersion", ctypes.c_wchar * 32),
        ("szCompID", ctypes.c_wchar * 128),
        ("dwIsInstalled", wintypes.DWORD),
        ("bRollback", wintypes.BOOL),
    ]
#[repr(C)]
pub struct PERUSERSECTIONW {
    pub szGUID: [u16; 59],
    pub szDispName: [u16; 128],
    pub szLocale: [u16; 10],
    pub szStub: [u16; 1040],
    pub szVersion: [u16; 32],
    pub szCompID: [u16; 128],
    pub dwIsInstalled: u32,
    pub bRollback: i32,
}
import "golang.org/x/sys/windows"

type PERUSERSECTIONW struct {
	szGUID [59]uint16
	szDispName [128]uint16
	szLocale [10]uint16
	szStub [1040]uint16
	szVersion [32]uint16
	szCompID [128]uint16
	dwIsInstalled uint32
	bRollback int32
}
type
  PERUSERSECTIONW = record
    szGUID: array[0..58] of WideChar;
    szDispName: array[0..127] of WideChar;
    szLocale: array[0..9] of WideChar;
    szStub: array[0..1039] of WideChar;
    szVersion: array[0..31] of WideChar;
    szCompID: array[0..127] of WideChar;
    dwIsInstalled: DWORD;
    bRollback: BOOL;
  end;
const PERUSERSECTIONW = extern struct {
    szGUID: [59]u16,
    szDispName: [128]u16,
    szLocale: [10]u16,
    szStub: [1040]u16,
    szVersion: [32]u16,
    szCompID: [128]u16,
    dwIsInstalled: u32,
    bRollback: i32,
};
type
  PERUSERSECTIONW {.bycopy.} = object
    szGUID: array[59, uint16]
    szDispName: array[128, uint16]
    szLocale: array[10, uint16]
    szStub: array[1040, uint16]
    szVersion: array[32, uint16]
    szCompID: array[128, uint16]
    dwIsInstalled: uint32
    bRollback: int32
struct PERUSERSECTIONW
{
    wchar[59] szGUID;
    wchar[128] szDispName;
    wchar[10] szLocale;
    wchar[1040] szStub;
    wchar[32] szVersion;
    wchar[128] szCompID;
    uint dwIsInstalled;
    int bRollback;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PERUSERSECTIONW サイズ: 2804 バイト(x64)
dim st, 701    ; 4byte整数×701(構造体サイズ 2804 / 4 切り上げ)
; szGUID : WCHAR (+0, 118byte)  varptr(st)+0 を基点に操作(118byte:入れ子/配列)
; szDispName : WCHAR (+118, 256byte)  varptr(st)+118 を基点に操作(256byte:入れ子/配列)
; szLocale : WCHAR (+374, 20byte)  varptr(st)+374 を基点に操作(20byte:入れ子/配列)
; szStub : WCHAR (+394, 2080byte)  varptr(st)+394 を基点に操作(2080byte:入れ子/配列)
; szVersion : WCHAR (+2474, 64byte)  varptr(st)+2474 を基点に操作(64byte:入れ子/配列)
; szCompID : WCHAR (+2538, 256byte)  varptr(st)+2538 を基点に操作(256byte:入れ子/配列)
; dwIsInstalled : DWORD (+2796, 4byte)  st.699 = 値  /  値 = st.699   (lpoke/lpeek も可)
; bRollback : BOOL (+2800, 4byte)  st.700 = 値  /  値 = st.700   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PERUSERSECTIONW
    #field wchar szGUID 59
    #field wchar szDispName 128
    #field wchar szLocale 10
    #field wchar szStub 1040
    #field wchar szVersion 32
    #field wchar szCompID 128
    #field int dwIsInstalled
    #field bool bRollback
#endstruct

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