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

MANAGEDAPPLICATION

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

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

フィールド

フィールドサイズx64x86説明
pszPackageNameLPWSTR8/4+0+0パッケージ名(ワイド文字列)。
pszPublisherLPWSTR8/4+8+4発行元名(ワイド文字列)。
dwVersionHiDWORD4+16+8バージョン番号の上位部分。
dwVersionLoDWORD4+20+12バージョン番号の下位部分。
dwRevisionDWORD4+24+16リビジョン番号。
GpoIdGUID16+28+20アプリケーションを配布したGPOのGUID。
pszPolicyNameLPWSTR8/4+48+36配布元のポリシー名(ワイド文字列)。
ProductIdGUID16+56+40製品を識別するGUID。
LanguageWORD2+72+56アプリケーションの言語ID。
pszOwnerLPWSTR8/4+80+60アプリケーションの所有者名(ワイド文字列)。
pszCompanyLPWSTR8/4+88+64提供会社名(ワイド文字列)。
pszCommentsLPWSTR8/4+96+68コメント(ワイド文字列)。
pszContactLPWSTR8/4+104+72連絡先(ワイド文字列)。
pszSupportUrlLPWSTR8/4+112+76サポートURL(ワイド文字列)。
dwPathTypeDWORD4+120+80インストールパスの種類フラグ。
bInstalledBOOL4+124+84アプリケーションがインストール済みかを示す真偽値。

各言語での定義

#include <windows.h>

// MANAGEDAPPLICATION  (x64 128 / x86 88 バイト)
typedef struct MANAGEDAPPLICATION {
    LPWSTR pszPackageName;
    LPWSTR pszPublisher;
    DWORD dwVersionHi;
    DWORD dwVersionLo;
    DWORD dwRevision;
    GUID GpoId;
    LPWSTR pszPolicyName;
    GUID ProductId;
    WORD Language;
    LPWSTR pszOwner;
    LPWSTR pszCompany;
    LPWSTR pszComments;
    LPWSTR pszContact;
    LPWSTR pszSupportUrl;
    DWORD dwPathType;
    BOOL bInstalled;
} MANAGEDAPPLICATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MANAGEDAPPLICATION
{
    public IntPtr pszPackageName;
    public IntPtr pszPublisher;
    public uint dwVersionHi;
    public uint dwVersionLo;
    public uint dwRevision;
    public Guid GpoId;
    public IntPtr pszPolicyName;
    public Guid ProductId;
    public ushort Language;
    public IntPtr pszOwner;
    public IntPtr pszCompany;
    public IntPtr pszComments;
    public IntPtr pszContact;
    public IntPtr pszSupportUrl;
    public uint dwPathType;
    [MarshalAs(UnmanagedType.Bool)] public bool bInstalled;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MANAGEDAPPLICATION
    Public pszPackageName As IntPtr
    Public pszPublisher As IntPtr
    Public dwVersionHi As UInteger
    Public dwVersionLo As UInteger
    Public dwRevision As UInteger
    Public GpoId As Guid
    Public pszPolicyName As IntPtr
    Public ProductId As Guid
    Public Language As UShort
    Public pszOwner As IntPtr
    Public pszCompany As IntPtr
    Public pszComments As IntPtr
    Public pszContact As IntPtr
    Public pszSupportUrl As IntPtr
    Public dwPathType As UInteger
    <MarshalAs(UnmanagedType.Bool)> Public bInstalled As Boolean
End Structure
import ctypes
from ctypes import wintypes

class MANAGEDAPPLICATION(ctypes.Structure):
    _fields_ = [
        ("pszPackageName", ctypes.c_void_p),
        ("pszPublisher", ctypes.c_void_p),
        ("dwVersionHi", wintypes.DWORD),
        ("dwVersionLo", wintypes.DWORD),
        ("dwRevision", wintypes.DWORD),
        ("GpoId", GUID),
        ("pszPolicyName", ctypes.c_void_p),
        ("ProductId", GUID),
        ("Language", ctypes.c_ushort),
        ("pszOwner", ctypes.c_void_p),
        ("pszCompany", ctypes.c_void_p),
        ("pszComments", ctypes.c_void_p),
        ("pszContact", ctypes.c_void_p),
        ("pszSupportUrl", ctypes.c_void_p),
        ("dwPathType", wintypes.DWORD),
        ("bInstalled", wintypes.BOOL),
    ]
#[repr(C)]
pub struct MANAGEDAPPLICATION {
    pub pszPackageName: *mut core::ffi::c_void,
    pub pszPublisher: *mut core::ffi::c_void,
    pub dwVersionHi: u32,
    pub dwVersionLo: u32,
    pub dwRevision: u32,
    pub GpoId: GUID,
    pub pszPolicyName: *mut core::ffi::c_void,
    pub ProductId: GUID,
    pub Language: u16,
    pub pszOwner: *mut core::ffi::c_void,
    pub pszCompany: *mut core::ffi::c_void,
    pub pszComments: *mut core::ffi::c_void,
    pub pszContact: *mut core::ffi::c_void,
    pub pszSupportUrl: *mut core::ffi::c_void,
    pub dwPathType: u32,
    pub bInstalled: i32,
}
import "golang.org/x/sys/windows"

type MANAGEDAPPLICATION struct {
	pszPackageName uintptr
	pszPublisher uintptr
	dwVersionHi uint32
	dwVersionLo uint32
	dwRevision uint32
	GpoId windows.GUID
	pszPolicyName uintptr
	ProductId windows.GUID
	Language uint16
	pszOwner uintptr
	pszCompany uintptr
	pszComments uintptr
	pszContact uintptr
	pszSupportUrl uintptr
	dwPathType uint32
	bInstalled int32
}
type
  MANAGEDAPPLICATION = record
    pszPackageName: Pointer;
    pszPublisher: Pointer;
    dwVersionHi: DWORD;
    dwVersionLo: DWORD;
    dwRevision: DWORD;
    GpoId: TGUID;
    pszPolicyName: Pointer;
    ProductId: TGUID;
    Language: Word;
    pszOwner: Pointer;
    pszCompany: Pointer;
    pszComments: Pointer;
    pszContact: Pointer;
    pszSupportUrl: Pointer;
    dwPathType: DWORD;
    bInstalled: BOOL;
  end;
const MANAGEDAPPLICATION = extern struct {
    pszPackageName: ?*anyopaque,
    pszPublisher: ?*anyopaque,
    dwVersionHi: u32,
    dwVersionLo: u32,
    dwRevision: u32,
    GpoId: GUID,
    pszPolicyName: ?*anyopaque,
    ProductId: GUID,
    Language: u16,
    pszOwner: ?*anyopaque,
    pszCompany: ?*anyopaque,
    pszComments: ?*anyopaque,
    pszContact: ?*anyopaque,
    pszSupportUrl: ?*anyopaque,
    dwPathType: u32,
    bInstalled: i32,
};
type
  MANAGEDAPPLICATION {.bycopy.} = object
    pszPackageName: pointer
    pszPublisher: pointer
    dwVersionHi: uint32
    dwVersionLo: uint32
    dwRevision: uint32
    GpoId: GUID
    pszPolicyName: pointer
    ProductId: GUID
    Language: uint16
    pszOwner: pointer
    pszCompany: pointer
    pszComments: pointer
    pszContact: pointer
    pszSupportUrl: pointer
    dwPathType: uint32
    bInstalled: int32
struct MANAGEDAPPLICATION
{
    void* pszPackageName;
    void* pszPublisher;
    uint dwVersionHi;
    uint dwVersionLo;
    uint dwRevision;
    GUID GpoId;
    void* pszPolicyName;
    GUID ProductId;
    ushort Language;
    void* pszOwner;
    void* pszCompany;
    void* pszComments;
    void* pszContact;
    void* pszSupportUrl;
    uint dwPathType;
    int bInstalled;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MANAGEDAPPLICATION サイズ: 88 バイト(x86)
dim st, 22    ; 4byte整数×22(構造体サイズ 88 / 4 切り上げ)
; pszPackageName : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pszPublisher : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwVersionHi : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwVersionLo : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwRevision : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; GpoId : GUID (+20, 16byte)  varptr(st)+20 を基点に操作(16byte:入れ子/配列)
; pszPolicyName : LPWSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ProductId : GUID (+40, 16byte)  varptr(st)+40 を基点に操作(16byte:入れ子/配列)
; Language : WORD (+56, 2byte)  wpoke st,56,値  /  値 = wpeek(st,56)
; pszOwner : LPWSTR (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; pszCompany : LPWSTR (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; pszComments : LPWSTR (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; pszContact : LPWSTR (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; pszSupportUrl : LPWSTR (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; dwPathType : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; bInstalled : BOOL (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MANAGEDAPPLICATION サイズ: 128 バイト(x64)
dim st, 32    ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; pszPackageName : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pszPublisher : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; dwVersionHi : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwVersionLo : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwRevision : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; GpoId : GUID (+28, 16byte)  varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; pszPolicyName : LPWSTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ProductId : GUID (+56, 16byte)  varptr(st)+56 を基点に操作(16byte:入れ子/配列)
; Language : WORD (+72, 2byte)  wpoke st,72,値  /  値 = wpeek(st,72)
; pszOwner : LPWSTR (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; pszCompany : LPWSTR (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; pszComments : LPWSTR (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pszContact : LPWSTR (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; pszSupportUrl : LPWSTR (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; dwPathType : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; bInstalled : BOOL (+124, 4byte)  st.31 = 値  /  値 = st.31   (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 MANAGEDAPPLICATION
    #field intptr pszPackageName
    #field intptr pszPublisher
    #field int dwVersionHi
    #field int dwVersionLo
    #field int dwRevision
    #field GUID GpoId
    #field intptr pszPolicyName
    #field GUID ProductId
    #field short Language
    #field intptr pszOwner
    #field intptr pszCompany
    #field intptr pszComments
    #field intptr pszContact
    #field intptr pszSupportUrl
    #field int dwPathType
    #field bool bInstalled
#endstruct

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