Win32 API 日本語リファレンス
ホームSecurity.AppLocker › SAFER_CODE_PROPERTIES_V2

SAFER_CODE_PROPERTIES_V2

構造体
サイズx64: 176 バイト / x86: 144 バイト

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズ (バイト単位)。将来の互換性および下位互換性のために使用されます。
dwCheckFlagsDWORD4+4+4

この構造体を評価する際に考慮される条件の種類。関連する構造体の要素の一部またはすべてが指定されていない場合、一部のフラグは通知なく無視されることがあります。このパラメーターに 0 を指定すると、構造体の内容全体が無視されます。

次の表に、指定できる値を示します。これらの値はビット単位の OR 演算で組み合わせることができます。

意味
SAFER_CRITERIA_IMAGEPATH
0x00001
コード イメージのパスを確認します。
SAFER_CRITERIA_IMAGEHASH
0x00004
コードのハッシュを確認します。
SAFER_CRITERIA_AUTHENTICODE
0x00008
Authenticode 署名を確認します。この値を使用する場合は、hImageFileHandle メンバーまたは ImagePath メンバーのいずれかを設定する必要があります。
SAFER_CRITERIA_URLZONE
0x00010
発信元の URL を確認します。
SAFER_CRITERIA_IMAGEPATH_NT
0x01000
Windows NT イメージ パスを確認します。
SAFER_CRITERIA_APPX_PACKAGE
0x00020
Windows ストア アプリ パッケージかどうかを確認します。Windows ストア アプリで使用します。
ImagePathLPWSTR8/4+8+8パスに基づく判別チェックに使用する、完全修飾パスとファイル名を指定する文字列。イメージ パスは、この構造体で指定されていない他の判別条件を特定するために、ファイルを開いて読み取る際にも使用されます。このメンバーは NULL にできますが、dwCheckFlags メンバーに SAFER_CRITERIA_AUTHENTICODE が含まれる場合は、このメンバーまたは hImageFileHandle メンバーのいずれかを設定する必要があります。
hImageFileHandleHANDLE8/4+16+12少なくとも GENERIC_READ アクセス権を持つ、コード イメージへのファイル ハンドル。このハンドルは、この構造体で指定されていない判別条件を計算するために、ファイルを明示的に開き直す代わりに使用されます。このメンバーは NULL にできますが、dwCheckFlagsSAFER_CRITERIA_AUTHENTICODE が含まれる場合は、このメンバーまたは ImagePath メンバーのいずれかを設定する必要があります。
UrlZoneIdDWORD4+24+16

あらかじめ定義された Internet Explorer のセキュリティ ゾーン。次のゾーンが定義されています。

このメンバーには 0 を設定できます。
ImageHashBYTE64+28+20

イメージの事前計算されたハッシュ。指定されたハッシュは、ImageSize メンバーと dwImageHashSize メンバーの両方が 0 以外であり、かつ HashAlgorithm メンバーに Wincrypt.h の有効なハッシュ アルゴリズムが含まれている場合に、有効なものとして解釈されます。

指定されたハッシュがこれらの条件を満たさない場合、ハッシュは次の方法で自動的に再計算されます。

  • ImageSize メンバーと pByteBlock メンバーの両方が 0 以外の場合は、それらを使用します。
  • hImageFileHandle メンバーが NULL でない場合は、それを使用します。
  • ImagePath メンバーが NULL でない場合は、それを開いて使用します。
dwImageHashSizeDWORD4+92+84ImageHash メンバーのサイズ (バイト単位)。
ImageSizeLONGLONG8+96+88pByteBlock メンバーのサイズ (バイト単位)。pByteBlock メンバーが NULL の場合、このメンバーは使用されません。
HashAlgorithmALG_ID4+104+96ImageHash メンバーの作成に使用されたハッシュ アルゴリズム。
pByteBlockBYTE*8/4+112+100確認対象のコードのイメージを格納しているメモリ ブロック。このメンバーは省略可能です。このメンバーを指定する場合は、ImageSize メンバーも指定する必要があります。
hWndParentHWND8/4+120+104Authenticode 署名者証明書の検証に使用される引数。これらの引数は WinVerifyTrust 関数に渡され、信頼されていない証明書を受け入れるか拒否するかをユーザーに求めるユーザー インターフェイス (UI) を制御します。
dwWVTUIChoiceDWORD4+128+108

使用する UI の種類を示します。次の表に、指定できる値を示します。

意味
WTD_UI_ALL
すべての UI を表示します。
WTD_UI_NONE
UI を表示しません。
WTD_UI_NOBAD
エラーがなかった場合にのみ UI を表示します。
WTD_UI_NOGOOD
エラーが発生した場合にのみ UI を表示します。
PackageMonikerLPWSTR8/4+136+112

パッケージ モニカーのプロパティ。Windows ストア アプリで使用します。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このメンバーは使用できません。

PackagePublisherLPWSTR8/4+144+116

パッケージ発行元のプロパティ。Windows ストア アプリで使用します。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このメンバーは使用できません。

PackageNameLPWSTR8/4+152+120

パッケージ名のプロパティ。Windows ストア アプリで使用します。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このメンバーは使用できません。

PackageVersionULONGLONG8+160+128

パッケージ バージョンのプロパティ。Windows ストア アプリで使用します。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このメンバーは使用できません。

PackageIsFrameworkBOOL4+168+136

パッケージがフレームワーク パッケージであることを示します。Windows ストア アプリで使用します。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: このメンバーは使用できません。

公式ドキュメント

SAFER_CODE_PROPERTIES 構造体は、コード イメージの情報と、コード イメージに対して確認する条件を格納します。SAFER_CODE_PROPERTIES 構造体の配列は SaferIdentifyLevel 関数に渡されます。

SAFER_CODE_PROPERTIES_V2 は SAFER_CODE_PROPERTIES を再定義したもので、Windows ストア アプリ パッケージ用の新しいメンバーを含むため、SAFER_CODE_PROPERTIES_V1 の拡張版となっています。既存のバイナリの呼び出し元は、cbSize メンバーを確認することでどちらのバージョンかを判別できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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 Structure
import 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: int32
struct 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