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

CertIsWeakHash

関数
署名に使われたハッシュが脆弱とみなされるか判定する。
DLLCRYPT32.dll呼出規約winapi

シグネチャ

// CRYPT32.dll
#include <windows.h>

BOOL CertIsWeakHash(
    DWORD dwHashUseType,
    LPCWSTR pwszCNGHashAlgid,
    DWORD dwChainFlags,
    CERT_CHAIN_CONTEXT* pSignerChainContext,   // optional
    FILETIME* pTimeStamp,   // optional
    LPCWSTR pwszFileName   // optional
);

パラメーター

名前方向説明
dwHashUseTypeDWORDinハッシュの用途を示す種別(タイムスタンプ署名や証明書署名など)。
pwszCNGHashAlgidLPCWSTRin評価対象のCNGハッシュアルゴリズム識別子の文字列(例:SHA1)。
dwChainFlagsDWORDinチェーン関連の動作を制御するフラグ。
pSignerChainContextCERT_CHAIN_CONTEXT*inoptional署名者の証明書チェーンコンテキストへのポインター。
pTimeStampFILETIME*inoptionalハッシュ使用時点を示すFILETIMEへのポインター。NULLで現在時刻。
pwszFileNameLPCWSTRinoptional評価対象のファイル名文字列へのポインター。診断用で不要ならNULL。

戻り値の型: BOOL

各言語での呼び出し定義

// CRYPT32.dll
#include <windows.h>

BOOL CertIsWeakHash(
    DWORD dwHashUseType,
    LPCWSTR pwszCNGHashAlgid,
    DWORD dwChainFlags,
    CERT_CHAIN_CONTEXT* pSignerChainContext,   // optional
    FILETIME* pTimeStamp,   // optional
    LPCWSTR pwszFileName   // optional
);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("CRYPT32.dll", ExactSpelling = true)]
static extern bool CertIsWeakHash(
    uint dwHashUseType,   // DWORD
    [MarshalAs(UnmanagedType.LPWStr)] string pwszCNGHashAlgid,   // LPCWSTR
    uint dwChainFlags,   // DWORD
    IntPtr pSignerChainContext,   // CERT_CHAIN_CONTEXT* optional
    IntPtr pTimeStamp,   // FILETIME* optional
    [MarshalAs(UnmanagedType.LPWStr)] string pwszFileName   // LPCWSTR optional
);
<DllImport("CRYPT32.dll", ExactSpelling:=True)>
Public Shared Function CertIsWeakHash(
    dwHashUseType As UInteger,   ' DWORD
    <MarshalAs(UnmanagedType.LPWStr)> pwszCNGHashAlgid As String,   ' LPCWSTR
    dwChainFlags As UInteger,   ' DWORD
    pSignerChainContext As IntPtr,   ' CERT_CHAIN_CONTEXT* optional
    pTimeStamp As IntPtr,   ' FILETIME* optional
    <MarshalAs(UnmanagedType.LPWStr)> pwszFileName As String   ' LPCWSTR optional
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
' dwHashUseType : DWORD
' pwszCNGHashAlgid : LPCWSTR
' dwChainFlags : DWORD
' pSignerChainContext : CERT_CHAIN_CONTEXT* optional
' pTimeStamp : FILETIME* optional
' pwszFileName : LPCWSTR optional
Declare PtrSafe Function CertIsWeakHash Lib "crypt32" ( _
    ByVal dwHashUseType As Long, _
    ByVal pwszCNGHashAlgid As LongPtr, _
    ByVal dwChainFlags As Long, _
    ByVal pSignerChainContext As LongPtr, _
    ByVal pTimeStamp As LongPtr, _
    ByVal pwszFileName As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

CertIsWeakHash = ctypes.windll.crypt32.CertIsWeakHash
CertIsWeakHash.restype = wintypes.BOOL
CertIsWeakHash.argtypes = [
    wintypes.DWORD,  # dwHashUseType : DWORD
    wintypes.LPCWSTR,  # pwszCNGHashAlgid : LPCWSTR
    wintypes.DWORD,  # dwChainFlags : DWORD
    ctypes.c_void_p,  # pSignerChainContext : CERT_CHAIN_CONTEXT* optional
    ctypes.c_void_p,  # pTimeStamp : FILETIME* optional
    wintypes.LPCWSTR,  # pwszFileName : LPCWSTR optional
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('CRYPT32.dll')
CertIsWeakHash = Fiddle::Function.new(
  lib['CertIsWeakHash'],
  [
    -Fiddle::TYPE_INT,  # dwHashUseType : DWORD
    Fiddle::TYPE_VOIDP,  # pwszCNGHashAlgid : LPCWSTR
    -Fiddle::TYPE_INT,  # dwChainFlags : DWORD
    Fiddle::TYPE_VOIDP,  # pSignerChainContext : CERT_CHAIN_CONTEXT* optional
    Fiddle::TYPE_VOIDP,  # pTimeStamp : FILETIME* optional
    Fiddle::TYPE_VOIDP,  # pwszFileName : LPCWSTR optional
  ],
  Fiddle::TYPE_INT)
#[link(name = "crypt32")]
extern "system" {
    fn CertIsWeakHash(
        dwHashUseType: u32,  // DWORD
        pwszCNGHashAlgid: *const u16,  // LPCWSTR
        dwChainFlags: u32,  // DWORD
        pSignerChainContext: *mut CERT_CHAIN_CONTEXT,  // CERT_CHAIN_CONTEXT* optional
        pTimeStamp: *mut FILETIME,  // FILETIME* optional
        pwszFileName: *const u16  // LPCWSTR optional
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("CRYPT32.dll")]
public static extern bool CertIsWeakHash(uint dwHashUseType, [MarshalAs(UnmanagedType.LPWStr)] string pwszCNGHashAlgid, uint dwChainFlags, IntPtr pSignerChainContext, IntPtr pTimeStamp, [MarshalAs(UnmanagedType.LPWStr)] string pwszFileName);
"@
$api = Add-Type -MemberDefinition $sig -Name 'CRYPT32_CertIsWeakHash' -Namespace Win32 -PassThru
# $api::CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName)
#uselib "CRYPT32.dll"
#func global CertIsWeakHash "CertIsWeakHash" sptr, sptr, sptr, sptr, sptr, sptr
; CertIsWeakHash dwHashUseType, pwszCNGHashAlgid, dwChainFlags, varptr(pSignerChainContext), varptr(pTimeStamp), pwszFileName   ; 戻り値は stat
; dwHashUseType : DWORD -> "sptr"
; pwszCNGHashAlgid : LPCWSTR -> "sptr"
; dwChainFlags : DWORD -> "sptr"
; pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> "sptr"
; pTimeStamp : FILETIME* optional -> "sptr"
; pwszFileName : LPCWSTR optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "CRYPT32.dll"
#cfunc global CertIsWeakHash "CertIsWeakHash" int, wstr, int, var, var, wstr
; res = CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName)
; dwHashUseType : DWORD -> "int"
; pwszCNGHashAlgid : LPCWSTR -> "wstr"
; dwChainFlags : DWORD -> "int"
; pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> "var"
; pTimeStamp : FILETIME* optional -> "var"
; pwszFileName : LPCWSTR optional -> "wstr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; BOOL CertIsWeakHash(DWORD dwHashUseType, LPCWSTR pwszCNGHashAlgid, DWORD dwChainFlags, CERT_CHAIN_CONTEXT* pSignerChainContext, FILETIME* pTimeStamp, LPCWSTR pwszFileName)
#uselib "CRYPT32.dll"
#cfunc global CertIsWeakHash "CertIsWeakHash" int, wstr, int, var, var, wstr
; res = CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName)
; dwHashUseType : DWORD -> "int"
; pwszCNGHashAlgid : LPCWSTR -> "wstr"
; dwChainFlags : DWORD -> "int"
; pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> "var"
; pTimeStamp : FILETIME* optional -> "var"
; pwszFileName : LPCWSTR optional -> "wstr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	crypt32 = windows.NewLazySystemDLL("CRYPT32.dll")
	procCertIsWeakHash = crypt32.NewProc("CertIsWeakHash")
)

// dwHashUseType (DWORD), pwszCNGHashAlgid (LPCWSTR), dwChainFlags (DWORD), pSignerChainContext (CERT_CHAIN_CONTEXT* optional), pTimeStamp (FILETIME* optional), pwszFileName (LPCWSTR optional)
r1, _, err := procCertIsWeakHash.Call(
	uintptr(dwHashUseType),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pwszCNGHashAlgid))),
	uintptr(dwChainFlags),
	uintptr(pSignerChainContext),
	uintptr(pTimeStamp),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pwszFileName))),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // BOOL
function CertIsWeakHash(
  dwHashUseType: DWORD;   // DWORD
  pwszCNGHashAlgid: PWideChar;   // LPCWSTR
  dwChainFlags: DWORD;   // DWORD
  pSignerChainContext: Pointer;   // CERT_CHAIN_CONTEXT* optional
  pTimeStamp: Pointer;   // FILETIME* optional
  pwszFileName: PWideChar   // LPCWSTR optional
): BOOL; stdcall;
  external 'CRYPT32.dll' name 'CertIsWeakHash';
result := DllCall("CRYPT32\CertIsWeakHash"
    , "UInt", dwHashUseType   ; DWORD
    , "WStr", pwszCNGHashAlgid   ; LPCWSTR
    , "UInt", dwChainFlags   ; DWORD
    , "Ptr", pSignerChainContext   ; CERT_CHAIN_CONTEXT* optional
    , "Ptr", pTimeStamp   ; FILETIME* optional
    , "WStr", pwszFileName   ; LPCWSTR optional
    , "Int")   ; return: BOOL
●CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName) = DLL("CRYPT32.dll", "bool CertIsWeakHash(dword, char*, dword, void*, void*, char*)")
# 呼び出し: CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName)
# dwHashUseType : DWORD -> "dword"
# pwszCNGHashAlgid : LPCWSTR -> "char*"
# dwChainFlags : DWORD -> "dword"
# pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> "void*"
# pTimeStamp : FILETIME* optional -> "void*"
# pwszFileName : LPCWSTR optional -> "char*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "crypt32" fn CertIsWeakHash(
    dwHashUseType: u32, // DWORD
    pwszCNGHashAlgid: [*c]const u16, // LPCWSTR
    dwChainFlags: u32, // DWORD
    pSignerChainContext: [*c]CERT_CHAIN_CONTEXT, // CERT_CHAIN_CONTEXT* optional
    pTimeStamp: [*c]FILETIME, // FILETIME* optional
    pwszFileName: [*c]const u16 // LPCWSTR optional
) callconv(std.os.windows.WINAPI) i32;
proc CertIsWeakHash(
    dwHashUseType: uint32,  # DWORD
    pwszCNGHashAlgid: WideCString,  # LPCWSTR
    dwChainFlags: uint32,  # DWORD
    pSignerChainContext: ptr CERT_CHAIN_CONTEXT,  # CERT_CHAIN_CONTEXT* optional
    pTimeStamp: ptr FILETIME,  # FILETIME* optional
    pwszFileName: WideCString  # LPCWSTR optional
): int32 {.importc: "CertIsWeakHash", stdcall, dynlib: "CRYPT32.dll".}
pragma(lib, "crypt32");
extern(Windows)
int CertIsWeakHash(
    uint dwHashUseType,   // DWORD
    const(wchar)* pwszCNGHashAlgid,   // LPCWSTR
    uint dwChainFlags,   // DWORD
    CERT_CHAIN_CONTEXT* pSignerChainContext,   // CERT_CHAIN_CONTEXT* optional
    FILETIME* pTimeStamp,   // FILETIME* optional
    const(wchar)* pwszFileName   // LPCWSTR optional
);
ccall((:CertIsWeakHash, "CRYPT32.dll"), stdcall, Int32,
      (UInt32, Cwstring, UInt32, Ptr{CERT_CHAIN_CONTEXT}, Ptr{FILETIME}, Cwstring),
      dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName)
# dwHashUseType : DWORD -> UInt32
# pwszCNGHashAlgid : LPCWSTR -> Cwstring
# dwChainFlags : DWORD -> UInt32
# pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> Ptr{CERT_CHAIN_CONTEXT}
# pTimeStamp : FILETIME* optional -> Ptr{FILETIME}
# pwszFileName : LPCWSTR optional -> Cwstring
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t CertIsWeakHash(
    uint32_t dwHashUseType,
    const uint16_t* pwszCNGHashAlgid,
    uint32_t dwChainFlags,
    void* pSignerChainContext,
    void* pTimeStamp,
    const uint16_t* pwszFileName);
]]
local crypt32 = ffi.load("crypt32")
-- crypt32.CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName)
-- dwHashUseType : DWORD
-- pwszCNGHashAlgid : LPCWSTR
-- dwChainFlags : DWORD
-- pSignerChainContext : CERT_CHAIN_CONTEXT* optional
-- pTimeStamp : FILETIME* optional
-- pwszFileName : LPCWSTR optional
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('CRYPT32.dll');
const CertIsWeakHash = lib.func('__stdcall', 'CertIsWeakHash', 'int32_t', ['uint32_t', 'str16', 'uint32_t', 'void *', 'void *', 'str16']);
// CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName)
// dwHashUseType : DWORD -> 'uint32_t'
// pwszCNGHashAlgid : LPCWSTR -> 'str16'
// dwChainFlags : DWORD -> 'uint32_t'
// pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> 'void *'
// pTimeStamp : FILETIME* optional -> 'void *'
// pwszFileName : LPCWSTR optional -> 'str16'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("CRYPT32.dll", {
  CertIsWeakHash: { parameters: ["u32", "buffer", "u32", "pointer", "pointer", "buffer"], result: "i32" },
});
// lib.symbols.CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName)
// dwHashUseType : DWORD -> "u32"
// pwszCNGHashAlgid : LPCWSTR -> "buffer"
// dwChainFlags : DWORD -> "u32"
// pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> "pointer"
// pTimeStamp : FILETIME* optional -> "pointer"
// pwszFileName : LPCWSTR optional -> "buffer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t CertIsWeakHash(
    uint32_t dwHashUseType,
    const uint16_t* pwszCNGHashAlgid,
    uint32_t dwChainFlags,
    void* pSignerChainContext,
    void* pTimeStamp,
    const uint16_t* pwszFileName);
C, "CRYPT32.dll");
// $ffi->CertIsWeakHash(dwHashUseType, pwszCNGHashAlgid, dwChainFlags, pSignerChainContext, pTimeStamp, pwszFileName);
// dwHashUseType : DWORD
// pwszCNGHashAlgid : LPCWSTR
// dwChainFlags : DWORD
// pSignerChainContext : CERT_CHAIN_CONTEXT* optional
// pTimeStamp : FILETIME* optional
// pwszFileName : LPCWSTR optional
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface Crypt32 extends StdCallLibrary {
    Crypt32 INSTANCE = Native.load("crypt32", Crypt32.class);
    boolean CertIsWeakHash(
        int dwHashUseType,   // DWORD
        WString pwszCNGHashAlgid,   // LPCWSTR
        int dwChainFlags,   // DWORD
        Pointer pSignerChainContext,   // CERT_CHAIN_CONTEXT* optional
        Pointer pTimeStamp,   // FILETIME* optional
        WString pwszFileName   // LPCWSTR optional
    );
}
@[Link("crypt32")]
lib LibCRYPT32
  fun CertIsWeakHash = CertIsWeakHash(
    dwHashUseType : UInt32,   # DWORD
    pwszCNGHashAlgid : UInt16*,   # LPCWSTR
    dwChainFlags : UInt32,   # DWORD
    pSignerChainContext : CERT_CHAIN_CONTEXT*,   # CERT_CHAIN_CONTEXT* optional
    pTimeStamp : FILETIME*,   # FILETIME* optional
    pwszFileName : UInt16*   # LPCWSTR optional
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef CertIsWeakHashNative = Int32 Function(Uint32, Pointer<Utf16>, Uint32, Pointer<Void>, Pointer<Void>, Pointer<Utf16>);
typedef CertIsWeakHashDart = int Function(int, Pointer<Utf16>, int, Pointer<Void>, Pointer<Void>, Pointer<Utf16>);
final CertIsWeakHash = DynamicLibrary.open('CRYPT32.dll')
    .lookupFunction<CertIsWeakHashNative, CertIsWeakHashDart>('CertIsWeakHash');
// dwHashUseType : DWORD -> Uint32
// pwszCNGHashAlgid : LPCWSTR -> Pointer<Utf16>
// dwChainFlags : DWORD -> Uint32
// pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> Pointer<Void>
// pTimeStamp : FILETIME* optional -> Pointer<Void>
// pwszFileName : LPCWSTR optional -> Pointer<Utf16>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function CertIsWeakHash(
  dwHashUseType: DWORD;   // DWORD
  pwszCNGHashAlgid: PWideChar;   // LPCWSTR
  dwChainFlags: DWORD;   // DWORD
  pSignerChainContext: Pointer;   // CERT_CHAIN_CONTEXT* optional
  pTimeStamp: Pointer;   // FILETIME* optional
  pwszFileName: PWideChar   // LPCWSTR optional
): BOOL; stdcall;
  external 'CRYPT32.dll' name 'CertIsWeakHash';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "CertIsWeakHash"
  c_CertIsWeakHash :: Word32 -> CWString -> Word32 -> Ptr () -> Ptr () -> CWString -> IO CInt
-- dwHashUseType : DWORD -> Word32
-- pwszCNGHashAlgid : LPCWSTR -> CWString
-- dwChainFlags : DWORD -> Word32
-- pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> Ptr ()
-- pTimeStamp : FILETIME* optional -> Ptr ()
-- pwszFileName : LPCWSTR optional -> CWString
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let certisweakhash =
  foreign "CertIsWeakHash"
    (uint32_t @-> (ptr uint16_t) @-> uint32_t @-> (ptr void) @-> (ptr void) @-> (ptr uint16_t) @-> returning int32_t)
(* dwHashUseType : DWORD -> uint32_t *)
(* pwszCNGHashAlgid : LPCWSTR -> (ptr uint16_t) *)
(* dwChainFlags : DWORD -> uint32_t *)
(* pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> (ptr void) *)
(* pTimeStamp : FILETIME* optional -> (ptr void) *)
(* pwszFileName : LPCWSTR optional -> (ptr uint16_t) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library crypt32 (t "CRYPT32.dll"))
(cffi:use-foreign-library crypt32)

(cffi:defcfun ("CertIsWeakHash" cert-is-weak-hash :convention :stdcall) :int32
  (dw-hash-use-type :uint32)   ; DWORD
  (pwsz-cnghash-algid (:string :encoding :utf-16le))   ; LPCWSTR
  (dw-chain-flags :uint32)   ; DWORD
  (p-signer-chain-context :pointer)   ; CERT_CHAIN_CONTEXT* optional
  (p-time-stamp :pointer)   ; FILETIME* optional
  (pwsz-file-name (:string :encoding :utf-16le)))   ; LPCWSTR optional
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $CertIsWeakHash = Win32::API::More->new('CRYPT32',
    'BOOL CertIsWeakHash(DWORD dwHashUseType, LPCWSTR pwszCNGHashAlgid, DWORD dwChainFlags, LPVOID pSignerChainContext, LPVOID pTimeStamp, LPCWSTR pwszFileName)');
# my $ret = $CertIsWeakHash->Call($dwHashUseType, $pwszCNGHashAlgid, $dwChainFlags, $pSignerChainContext, $pTimeStamp, $pwszFileName);
# dwHashUseType : DWORD -> DWORD
# pwszCNGHashAlgid : LPCWSTR -> LPCWSTR
# dwChainFlags : DWORD -> DWORD
# pSignerChainContext : CERT_CHAIN_CONTEXT* optional -> LPVOID
# pTimeStamp : FILETIME* optional -> LPVOID
# pwszFileName : LPCWSTR optional -> LPCWSTR
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

使用する型