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

WINTRUST_SIGNATURE_SETTINGS

構造体
サイズx64: 32 バイト / x86: 24 バイト

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

フィールド

フィールドサイズx64x86説明
cbStructDWORD4+0+0この構造体のサイズ (バイト単位)。
dwIndexDWORD4+4+4dwFlags メンバーが WSS_VERIFY_SPECIFIC に設定されている場合に、検証する署名のインデックスを格納します。
dwFlagsWINTRUST_SIGNATURE_SETTINGS_FLAGS4+8+8

動作を細かく調整するために使用できるフラグ。次の値のいずれかを指定できます。

意味
WSS_VERIFY_SPECIFIC
0x00000001
dwIndex パラメーターを設定する場合は、この値を設定します。
WSS_GET_SECONDARY_SIG_COUNT
0x00000002
検出されたセカンダリ署名の数を cSecondarySigs メンバーに返すには、この値を設定します。
cSecondarySigsDWORD4+12+12dwFlags メンバーが WSS_GET_SECONDARY_SIG_COUNT に設定されている場合に、検出されたセカンダリ署名の数を格納します。
dwVerifiedSigIndexDWORD4+16+16検証に使用されたインデックス。このメンバーは Wintrust からの復帰時に設定されます。
pCryptoPolicyCERT_STRONG_SIGN_PARA*8/4+24+20署名が有効と見なされるために満たさなければならないポリシーを格納する CERT_STRONG_SIGN_PARA 構造体へのポインター。

公式ドキュメント

WINTRUST_SIGNATURE_SETTINGS 構造体は、ファイル上の署名を指定するために使用できます。

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

各言語での定義

#include <windows.h>

// WINTRUST_SIGNATURE_SETTINGS  (x64 32 / x86 24 バイト)
typedef struct WINTRUST_SIGNATURE_SETTINGS {
    DWORD cbStruct;
    DWORD dwIndex;
    WINTRUST_SIGNATURE_SETTINGS_FLAGS dwFlags;
    DWORD cSecondarySigs;
    DWORD dwVerifiedSigIndex;
    CERT_STRONG_SIGN_PARA* pCryptoPolicy;
} WINTRUST_SIGNATURE_SETTINGS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINTRUST_SIGNATURE_SETTINGS
{
    public uint cbStruct;
    public uint dwIndex;
    public uint dwFlags;
    public uint cSecondarySigs;
    public uint dwVerifiedSigIndex;
    public IntPtr pCryptoPolicy;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINTRUST_SIGNATURE_SETTINGS
    Public cbStruct As UInteger
    Public dwIndex As UInteger
    Public dwFlags As UInteger
    Public cSecondarySigs As UInteger
    Public dwVerifiedSigIndex As UInteger
    Public pCryptoPolicy As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WINTRUST_SIGNATURE_SETTINGS(ctypes.Structure):
    _fields_ = [
        ("cbStruct", wintypes.DWORD),
        ("dwIndex", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("cSecondarySigs", wintypes.DWORD),
        ("dwVerifiedSigIndex", wintypes.DWORD),
        ("pCryptoPolicy", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct WINTRUST_SIGNATURE_SETTINGS {
    pub cbStruct: u32,
    pub dwIndex: u32,
    pub dwFlags: u32,
    pub cSecondarySigs: u32,
    pub dwVerifiedSigIndex: u32,
    pub pCryptoPolicy: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WINTRUST_SIGNATURE_SETTINGS struct {
	cbStruct uint32
	dwIndex uint32
	dwFlags uint32
	cSecondarySigs uint32
	dwVerifiedSigIndex uint32
	pCryptoPolicy uintptr
}
type
  WINTRUST_SIGNATURE_SETTINGS = record
    cbStruct: DWORD;
    dwIndex: DWORD;
    dwFlags: DWORD;
    cSecondarySigs: DWORD;
    dwVerifiedSigIndex: DWORD;
    pCryptoPolicy: Pointer;
  end;
const WINTRUST_SIGNATURE_SETTINGS = extern struct {
    cbStruct: u32,
    dwIndex: u32,
    dwFlags: u32,
    cSecondarySigs: u32,
    dwVerifiedSigIndex: u32,
    pCryptoPolicy: ?*anyopaque,
};
type
  WINTRUST_SIGNATURE_SETTINGS {.bycopy.} = object
    cbStruct: uint32
    dwIndex: uint32
    dwFlags: uint32
    cSecondarySigs: uint32
    dwVerifiedSigIndex: uint32
    pCryptoPolicy: pointer
struct WINTRUST_SIGNATURE_SETTINGS
{
    uint cbStruct;
    uint dwIndex;
    uint dwFlags;
    uint cSecondarySigs;
    uint dwVerifiedSigIndex;
    void* pCryptoPolicy;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WINTRUST_SIGNATURE_SETTINGS サイズ: 24 バイト(x86)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwIndex : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwFlags : WINTRUST_SIGNATURE_SETTINGS_FLAGS (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cSecondarySigs : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwVerifiedSigIndex : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pCryptoPolicy : CERT_STRONG_SIGN_PARA* (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WINTRUST_SIGNATURE_SETTINGS サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwIndex : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwFlags : WINTRUST_SIGNATURE_SETTINGS_FLAGS (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cSecondarySigs : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwVerifiedSigIndex : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pCryptoPolicy : CERT_STRONG_SIGN_PARA* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WINTRUST_SIGNATURE_SETTINGS
    #field int cbStruct
    #field int dwIndex
    #field int dwFlags
    #field int cSecondarySigs
    #field int dwVerifiedSigIndex
    #field intptr pCryptoPolicy
#endstruct

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