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

PM_UPDATEINFO

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

サイズ=各フィールドのバイト数(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マーケットプレース上のアプリバージョン文字列。
DeploymentOptionsDWORD4+64+48更新配置動作を制御するオプションフラグ。

各言語での定義

#include <windows.h>

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

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

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

class PM_UPDATEINFO(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),
        ("DeploymentOptions", wintypes.DWORD),
    ]
#[repr(C)]
pub struct PM_UPDATEINFO {
    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,
    pub DeploymentOptions: u32,
}
import "golang.org/x/sys/windows"

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

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 サイズ: 52 バイト(x86)
dim st, 13    ; 4byte整数×13(構造体サイズ 52 / 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 も可)
; DeploymentOptions : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PM_UPDATEINFO サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 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,上位
; DeploymentOptions : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (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 PM_UPDATEINFO
    #field GUID ProductID
    #field intptr PackagePath
    #field GUID InstanceID
    #field intptr pbLicense
    #field int cbLicense
    #field intptr MarketplaceAppVersion
    #field int DeploymentOptions
#endstruct

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