ホーム › System.WindowsProgramming › PERUSERSECTIONW
PERUSERSECTIONW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| szGUID | WCHAR | 118 | +0 | +0 | ユーザーごとのスタブを識別するGUID文字列(Unicode)。 |
| szDispName | WCHAR | 256 | +118 | +118 | 表示名を表すWCHAR配列(Unicode)。 |
| szLocale | WCHAR | 20 | +374 | +374 | ロケールを表すWCHAR配列(Unicode)。 |
| szStub | WCHAR | 2080 | +394 | +394 | スタブ情報を表すWCHAR配列(Unicode)。 |
| szVersion | WCHAR | 64 | +2474 | +2474 | バージョン文字列(Unicode)。 |
| szCompID | WCHAR | 256 | +2538 | +2538 | コンポーネントIDを表すWCHAR配列(Unicode)。 |
| dwIsInstalled | DWORD | 4 | +2796 | +2796 | インストール済みか否かを示す値。 |
| bRollback | BOOL | 4 | +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 Structureimport 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: int32struct 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