ホーム › Security.AppLocker › SAFER_CODE_PROPERTIES_V2
SAFER_CODE_PROPERTIES_V2
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のサイズをバイト単位で指定する。呼び出し前に設定する。 |
| dwCheckFlags | DWORD | 4 | +4 | +4 | 実行するチェック対象を示すフラグの組み合わせ。パス/ハッシュ/URLゾーンなどの判定種別を指定する。 |
| ImagePath | LPWSTR | 8/4 | +8 | +8 | 評価対象の実行ファイルへのフルパス文字列。NULL可。 |
| hImageFileHandle | HANDLE | 8/4 | +16 | +12 | 評価対象ファイルのハンドル。パス指定の代替として使用できる。 |
| UrlZoneId | DWORD | 4 | +24 | +16 | コードの取得元URLセキュリティゾーンID。インターネット/イントラネット等を表す。 |
| ImageHash | BYTE | 64 | +28 | +20 | 対象ファイルのハッシュ値を格納するバイト配列。 |
| dwImageHashSize | DWORD | 4 | +92 | +84 | ImageHashの長さをバイト単位で示す。 |
| ImageSize | LONGLONG | 8 | +96 | +88 | 対象ファイルのサイズをバイト単位で示す。64ビット長。 |
| HashAlgorithm | ALG_ID | 4 | +104 | +96 | ハッシュ計算に用いるアルゴリズム識別子(ALG_ID)。 |
| pByteBlock | BYTE* | 8/4 | +112 | +100 | Authenticode署名等の生バイトブロックへのポインタ。 |
| hWndParent | HWND | 8/4 | +120 | +104 | 署名検証UIを表示する際の親ウィンドウハンドル。 |
| dwWVTUIChoice | DWORD | 4 | +128 | +108 | WinVerifyTrustのUI表示方式の選択値。 |
| PackageMoniker | LPWSTR | 8/4 | +136 | +112 | AppContainerパッケージのモニカ文字列。NULL可。 |
| PackagePublisher | LPWSTR | 8/4 | +144 | +116 | パッケージの発行元名文字列。NULL可。 |
| PackageName | LPWSTR | 8/4 | +152 | +120 | パッケージ名文字列。NULL可。 |
| PackageVersion | ULONGLONG | 8 | +160 | +128 | パッケージのバージョンを64ビット整数で表す。 |
| PackageIsFramework | BOOL | 4 | +168 | +136 | パッケージがフレームワークパッケージか否かを示す真偽値。 |
各言語での定義
#include <windows.h>
// SAFER_CODE_PROPERTIES_V2 (x64 176 / x86 144 バイト)
typedef struct SAFER_CODE_PROPERTIES_V2 {
DWORD cbSize;
DWORD dwCheckFlags;
LPWSTR ImagePath;
HANDLE hImageFileHandle;
DWORD UrlZoneId;
BYTE ImageHash[64];
DWORD dwImageHashSize;
LONGLONG ImageSize;
ALG_ID HashAlgorithm;
BYTE* pByteBlock;
HWND hWndParent;
DWORD dwWVTUIChoice;
LPWSTR PackageMoniker;
LPWSTR PackagePublisher;
LPWSTR PackageName;
ULONGLONG PackageVersion;
BOOL PackageIsFramework;
} SAFER_CODE_PROPERTIES_V2;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SAFER_CODE_PROPERTIES_V2
{
public uint cbSize;
public uint dwCheckFlags;
public IntPtr ImagePath;
public IntPtr hImageFileHandle;
public uint UrlZoneId;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public byte[] ImageHash;
public uint dwImageHashSize;
public long ImageSize;
public uint HashAlgorithm;
public IntPtr pByteBlock;
public IntPtr hWndParent;
public uint dwWVTUIChoice;
public IntPtr PackageMoniker;
public IntPtr PackagePublisher;
public IntPtr PackageName;
public ulong PackageVersion;
[MarshalAs(UnmanagedType.Bool)] public bool PackageIsFramework;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SAFER_CODE_PROPERTIES_V2
Public cbSize As UInteger
Public dwCheckFlags As UInteger
Public ImagePath As IntPtr
Public hImageFileHandle As IntPtr
Public UrlZoneId As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> Public ImageHash() As Byte
Public dwImageHashSize As UInteger
Public ImageSize As Long
Public HashAlgorithm As UInteger
Public pByteBlock As IntPtr
Public hWndParent As IntPtr
Public dwWVTUIChoice As UInteger
Public PackageMoniker As IntPtr
Public PackagePublisher As IntPtr
Public PackageName As IntPtr
Public PackageVersion As ULong
<MarshalAs(UnmanagedType.Bool)> Public PackageIsFramework As Boolean
End Structureimport ctypes
from ctypes import wintypes
class SAFER_CODE_PROPERTIES_V2(ctypes.Structure):
_fields_ = [
("cbSize", wintypes.DWORD),
("dwCheckFlags", wintypes.DWORD),
("ImagePath", ctypes.c_void_p),
("hImageFileHandle", ctypes.c_void_p),
("UrlZoneId", wintypes.DWORD),
("ImageHash", ctypes.c_ubyte * 64),
("dwImageHashSize", wintypes.DWORD),
("ImageSize", ctypes.c_longlong),
("HashAlgorithm", wintypes.DWORD),
("pByteBlock", ctypes.c_void_p),
("hWndParent", ctypes.c_void_p),
("dwWVTUIChoice", wintypes.DWORD),
("PackageMoniker", ctypes.c_void_p),
("PackagePublisher", ctypes.c_void_p),
("PackageName", ctypes.c_void_p),
("PackageVersion", ctypes.c_ulonglong),
("PackageIsFramework", wintypes.BOOL),
]#[repr(C)]
pub struct SAFER_CODE_PROPERTIES_V2 {
pub cbSize: u32,
pub dwCheckFlags: u32,
pub ImagePath: *mut core::ffi::c_void,
pub hImageFileHandle: *mut core::ffi::c_void,
pub UrlZoneId: u32,
pub ImageHash: [u8; 64],
pub dwImageHashSize: u32,
pub ImageSize: i64,
pub HashAlgorithm: u32,
pub pByteBlock: *mut core::ffi::c_void,
pub hWndParent: *mut core::ffi::c_void,
pub dwWVTUIChoice: u32,
pub PackageMoniker: *mut core::ffi::c_void,
pub PackagePublisher: *mut core::ffi::c_void,
pub PackageName: *mut core::ffi::c_void,
pub PackageVersion: u64,
pub PackageIsFramework: i32,
}import "golang.org/x/sys/windows"
type SAFER_CODE_PROPERTIES_V2 struct {
cbSize uint32
dwCheckFlags uint32
ImagePath uintptr
hImageFileHandle uintptr
UrlZoneId uint32
ImageHash [64]byte
dwImageHashSize uint32
ImageSize int64
HashAlgorithm uint32
pByteBlock uintptr
hWndParent uintptr
dwWVTUIChoice uint32
PackageMoniker uintptr
PackagePublisher uintptr
PackageName uintptr
PackageVersion uint64
PackageIsFramework int32
}type
SAFER_CODE_PROPERTIES_V2 = record
cbSize: DWORD;
dwCheckFlags: DWORD;
ImagePath: Pointer;
hImageFileHandle: Pointer;
UrlZoneId: DWORD;
ImageHash: array[0..63] of Byte;
dwImageHashSize: DWORD;
ImageSize: Int64;
HashAlgorithm: DWORD;
pByteBlock: Pointer;
hWndParent: Pointer;
dwWVTUIChoice: DWORD;
PackageMoniker: Pointer;
PackagePublisher: Pointer;
PackageName: Pointer;
PackageVersion: UInt64;
PackageIsFramework: BOOL;
end;const SAFER_CODE_PROPERTIES_V2 = extern struct {
cbSize: u32,
dwCheckFlags: u32,
ImagePath: ?*anyopaque,
hImageFileHandle: ?*anyopaque,
UrlZoneId: u32,
ImageHash: [64]u8,
dwImageHashSize: u32,
ImageSize: i64,
HashAlgorithm: u32,
pByteBlock: ?*anyopaque,
hWndParent: ?*anyopaque,
dwWVTUIChoice: u32,
PackageMoniker: ?*anyopaque,
PackagePublisher: ?*anyopaque,
PackageName: ?*anyopaque,
PackageVersion: u64,
PackageIsFramework: i32,
};type
SAFER_CODE_PROPERTIES_V2 {.bycopy.} = object
cbSize: uint32
dwCheckFlags: uint32
ImagePath: pointer
hImageFileHandle: pointer
UrlZoneId: uint32
ImageHash: array[64, uint8]
dwImageHashSize: uint32
ImageSize: int64
HashAlgorithm: uint32
pByteBlock: pointer
hWndParent: pointer
dwWVTUIChoice: uint32
PackageMoniker: pointer
PackagePublisher: pointer
PackageName: pointer
PackageVersion: uint64
PackageIsFramework: int32struct SAFER_CODE_PROPERTIES_V2
{
uint cbSize;
uint dwCheckFlags;
void* ImagePath;
void* hImageFileHandle;
uint UrlZoneId;
ubyte[64] ImageHash;
uint dwImageHashSize;
long ImageSize;
uint HashAlgorithm;
void* pByteBlock;
void* hWndParent;
uint dwWVTUIChoice;
void* PackageMoniker;
void* PackagePublisher;
void* PackageName;
ulong PackageVersion;
int PackageIsFramework;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SAFER_CODE_PROPERTIES_V2 サイズ: 144 バイト(x86)
dim st, 36 ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwCheckFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ImagePath : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; hImageFileHandle : HANDLE (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; UrlZoneId : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ImageHash : BYTE (+20, 64byte) varptr(st)+20 を基点に操作(64byte:入れ子/配列)
; dwImageHashSize : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; ImageSize : LONGLONG (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; HashAlgorithm : ALG_ID (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; pByteBlock : BYTE* (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; hWndParent : HWND (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; dwWVTUIChoice : DWORD (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; PackageMoniker : LPWSTR (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; PackagePublisher : LPWSTR (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; PackageName : LPWSTR (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; PackageVersion : ULONGLONG (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; PackageIsFramework : BOOL (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SAFER_CODE_PROPERTIES_V2 サイズ: 176 バイト(x64)
dim st, 44 ; 4byte整数×44(構造体サイズ 176 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwCheckFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ImagePath : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; hImageFileHandle : HANDLE (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; UrlZoneId : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ImageHash : BYTE (+28, 64byte) varptr(st)+28 を基点に操作(64byte:入れ子/配列)
; dwImageHashSize : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; ImageSize : LONGLONG (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; HashAlgorithm : ALG_ID (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; pByteBlock : BYTE* (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; hWndParent : HWND (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; dwWVTUIChoice : DWORD (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; PackageMoniker : LPWSTR (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; PackagePublisher : LPWSTR (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; PackageName : LPWSTR (+152, 8byte) qpoke st,152,値 / qpeek(st,152) ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; PackageVersion : ULONGLONG (+160, 8byte) qpoke st,160,値 / qpeek(st,160) ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; PackageIsFramework : BOOL (+168, 4byte) st.42 = 値 / 値 = st.42 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SAFER_CODE_PROPERTIES_V2
#field int cbSize
#field int dwCheckFlags
#field intptr ImagePath
#field intptr hImageFileHandle
#field int UrlZoneId
#field byte ImageHash 64
#field int dwImageHashSize
#field int64 ImageSize
#field int HashAlgorithm
#field intptr pByteBlock
#field intptr hWndParent
#field int dwWVTUIChoice
#field intptr PackageMoniker
#field intptr PackagePublisher
#field intptr PackageName
#field int64 PackageVersion
#field bool PackageIsFramework
#endstruct
stdim st, SAFER_CODE_PROPERTIES_V2 ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize