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+4検証対象とする署名のインデックス。0は主署名。
dwFlagsWINTRUST_SIGNATURE_SETTINGS_FLAGS4+8+8署名検証の挙動を制御するフラグ群。
cSecondarySigsDWORD4+12+12検出された副署名の数。出力値。
dwVerifiedSigIndexDWORD4+16+16実際に検証された署名のインデックス。出力値。
pCryptoPolicyCERT_STRONG_SIGN_PARA*8/4+24+20強い署名を要求する暗号ポリシー構造体へのポインタ。NULL可。

各言語での定義

#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