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

PM_UPDATEINFO_LEGACY

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

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

フィールド

フィールドサイズx64x86説明
ProductIDGUID16+0+0更新対象アプリを識別するGUID。
PackagePathLPWSTR8/4+16+16更新パッケージファイルのパス文字列。
InstanceIDGUID16+24+20アプリインスタンスを識別するGUID。
pbLicenseBYTE*8/4+40+36更新後アプリのライセンスデータへのポインタ。NULL可。
cbLicenseDWORD4+48+40pbLicenseのバイト長。
MarketplaceAppVersionLPWSTR8/4+56+44マーケットプレース上のアプリバージョン文字列。

各言語での定義

#include <windows.h>

// PM_UPDATEINFO_LEGACY  (x64 64 / x86 48 バイト)
typedef struct PM_UPDATEINFO_LEGACY {
    GUID ProductID;
    LPWSTR PackagePath;
    GUID InstanceID;
    BYTE* pbLicense;
    DWORD cbLicense;
    LPWSTR MarketplaceAppVersion;
} PM_UPDATEINFO_LEGACY;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PM_UPDATEINFO_LEGACY
{
    public Guid ProductID;
    public IntPtr PackagePath;
    public Guid InstanceID;
    public IntPtr pbLicense;
    public uint cbLicense;
    public IntPtr MarketplaceAppVersion;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PM_UPDATEINFO_LEGACY
    Public ProductID As Guid
    Public PackagePath As IntPtr
    Public InstanceID As Guid
    Public pbLicense As IntPtr
    Public cbLicense As UInteger
    Public MarketplaceAppVersion As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class PM_UPDATEINFO_LEGACY(ctypes.Structure):
    _fields_ = [
        ("ProductID", GUID),
        ("PackagePath", ctypes.c_void_p),
        ("InstanceID", GUID),
        ("pbLicense", ctypes.c_void_p),
        ("cbLicense", wintypes.DWORD),
        ("MarketplaceAppVersion", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct PM_UPDATEINFO_LEGACY {
    pub ProductID: GUID,
    pub PackagePath: *mut core::ffi::c_void,
    pub InstanceID: GUID,
    pub pbLicense: *mut core::ffi::c_void,
    pub cbLicense: u32,
    pub MarketplaceAppVersion: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type PM_UPDATEINFO_LEGACY struct {
	ProductID windows.GUID
	PackagePath uintptr
	InstanceID windows.GUID
	pbLicense uintptr
	cbLicense uint32
	MarketplaceAppVersion uintptr
}
type
  PM_UPDATEINFO_LEGACY = record
    ProductID: TGUID;
    PackagePath: Pointer;
    InstanceID: TGUID;
    pbLicense: Pointer;
    cbLicense: DWORD;
    MarketplaceAppVersion: Pointer;
  end;
const PM_UPDATEINFO_LEGACY = extern struct {
    ProductID: GUID,
    PackagePath: ?*anyopaque,
    InstanceID: GUID,
    pbLicense: ?*anyopaque,
    cbLicense: u32,
    MarketplaceAppVersion: ?*anyopaque,
};
type
  PM_UPDATEINFO_LEGACY {.bycopy.} = object
    ProductID: GUID
    PackagePath: pointer
    InstanceID: GUID
    pbLicense: pointer
    cbLicense: uint32
    MarketplaceAppVersion: pointer
struct PM_UPDATEINFO_LEGACY
{
    GUID ProductID;
    void* PackagePath;
    GUID InstanceID;
    void* pbLicense;
    uint cbLicense;
    void* MarketplaceAppVersion;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PM_UPDATEINFO_LEGACY サイズ: 48 バイト(x86)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; ProductID : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; PackagePath : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; InstanceID : GUID (+20, 16byte)  varptr(st)+20 を基点に操作(16byte:入れ子/配列)
; pbLicense : BYTE* (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; cbLicense : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; MarketplaceAppVersion : LPWSTR (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PM_UPDATEINFO_LEGACY サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; ProductID : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; PackagePath : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; InstanceID : GUID (+24, 16byte)  varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; pbLicense : BYTE* (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; cbLicense : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; MarketplaceAppVersion : LPWSTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ※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 PM_UPDATEINFO_LEGACY
    #field GUID ProductID
    #field intptr PackagePath
    #field GUID InstanceID
    #field intptr pbLicense
    #field int cbLicense
    #field intptr MarketplaceAppVersion
#endstruct

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