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

CryptCATOpen

関数
カタログファイルを開いてカタログハンドルを取得する。
DLLWINTRUST.dll呼出規約winapi対応OSWindows XP 以降

シグネチャ

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

HANDLE CryptCATOpen(
    LPWSTR pwszFileName,
    CRYPTCAT_OPEN_FLAGS fdwOpenFlags,
    UINT_PTR hProv,
    CRYPTCAT_VERSION dwPublicVersion,
    DWORD dwEncodingType
);

パラメーター

名前方向
pwszFileNameLPWSTRin
fdwOpenFlagsCRYPTCAT_OPEN_FLAGSin
hProvUINT_PTRin
dwPublicVersionCRYPTCAT_VERSIONin
dwEncodingTypeDWORDin

戻り値の型: HANDLE

各言語での呼び出し定義

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

HANDLE CryptCATOpen(
    LPWSTR pwszFileName,
    CRYPTCAT_OPEN_FLAGS fdwOpenFlags,
    UINT_PTR hProv,
    CRYPTCAT_VERSION dwPublicVersion,
    DWORD dwEncodingType
);
[DllImport("WINTRUST.dll", ExactSpelling = true)]
static extern IntPtr CryptCATOpen(
    [MarshalAs(UnmanagedType.LPWStr)] string pwszFileName,   // LPWSTR
    uint fdwOpenFlags,   // CRYPTCAT_OPEN_FLAGS
    UIntPtr hProv,   // UINT_PTR
    uint dwPublicVersion,   // CRYPTCAT_VERSION
    uint dwEncodingType   // DWORD
);
<DllImport("WINTRUST.dll", ExactSpelling:=True)>
Public Shared Function CryptCATOpen(
    <MarshalAs(UnmanagedType.LPWStr)> pwszFileName As String,   ' LPWSTR
    fdwOpenFlags As UInteger,   ' CRYPTCAT_OPEN_FLAGS
    hProv As UIntPtr,   ' UINT_PTR
    dwPublicVersion As UInteger,   ' CRYPTCAT_VERSION
    dwEncodingType As UInteger   ' DWORD
) As IntPtr
End Function
' pwszFileName : LPWSTR
' fdwOpenFlags : CRYPTCAT_OPEN_FLAGS
' hProv : UINT_PTR
' dwPublicVersion : CRYPTCAT_VERSION
' dwEncodingType : DWORD
Declare PtrSafe Function CryptCATOpen Lib "wintrust" ( _
    ByVal pwszFileName As LongPtr, _
    ByVal fdwOpenFlags As Long, _
    ByVal hProv As LongPtr, _
    ByVal dwPublicVersion As Long, _
    ByVal dwEncodingType As Long) As LongPtr
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

CryptCATOpen = ctypes.windll.wintrust.CryptCATOpen
CryptCATOpen.restype = ctypes.c_void_p
CryptCATOpen.argtypes = [
    wintypes.LPCWSTR,  # pwszFileName : LPWSTR
    wintypes.DWORD,  # fdwOpenFlags : CRYPTCAT_OPEN_FLAGS
    ctypes.c_size_t,  # hProv : UINT_PTR
    wintypes.DWORD,  # dwPublicVersion : CRYPTCAT_VERSION
    wintypes.DWORD,  # dwEncodingType : DWORD
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('WINTRUST.dll')
CryptCATOpen = Fiddle::Function.new(
  lib['CryptCATOpen'],
  [
    Fiddle::TYPE_VOIDP,  # pwszFileName : LPWSTR
    -Fiddle::TYPE_INT,  # fdwOpenFlags : CRYPTCAT_OPEN_FLAGS
    Fiddle::TYPE_UINTPTR_T,  # hProv : UINT_PTR
    -Fiddle::TYPE_INT,  # dwPublicVersion : CRYPTCAT_VERSION
    -Fiddle::TYPE_INT,  # dwEncodingType : DWORD
  ],
  Fiddle::TYPE_VOIDP)
#[link(name = "wintrust")]
extern "system" {
    fn CryptCATOpen(
        pwszFileName: *mut u16,  // LPWSTR
        fdwOpenFlags: u32,  // CRYPTCAT_OPEN_FLAGS
        hProv: usize,  // UINT_PTR
        dwPublicVersion: u32,  // CRYPTCAT_VERSION
        dwEncodingType: u32  // DWORD
    ) -> *mut core::ffi::c_void;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("WINTRUST.dll")]
public static extern IntPtr CryptCATOpen([MarshalAs(UnmanagedType.LPWStr)] string pwszFileName, uint fdwOpenFlags, UIntPtr hProv, uint dwPublicVersion, uint dwEncodingType);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WINTRUST_CryptCATOpen' -Namespace Win32 -PassThru
# $api::CryptCATOpen(pwszFileName, fdwOpenFlags, hProv, dwPublicVersion, dwEncodingType)
#uselib "WINTRUST.dll"
#func global CryptCATOpen "CryptCATOpen" sptr, sptr, sptr, sptr, sptr
; CryptCATOpen pwszFileName, fdwOpenFlags, hProv, dwPublicVersion, dwEncodingType   ; 戻り値は stat
; pwszFileName : LPWSTR -> "sptr"
; fdwOpenFlags : CRYPTCAT_OPEN_FLAGS -> "sptr"
; hProv : UINT_PTR -> "sptr"
; dwPublicVersion : CRYPTCAT_VERSION -> "sptr"
; dwEncodingType : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "WINTRUST.dll"
#cfunc global CryptCATOpen "CryptCATOpen" wstr, int, sptr, int, int
; res = CryptCATOpen(pwszFileName, fdwOpenFlags, hProv, dwPublicVersion, dwEncodingType)
; pwszFileName : LPWSTR -> "wstr"
; fdwOpenFlags : CRYPTCAT_OPEN_FLAGS -> "int"
; hProv : UINT_PTR -> "sptr"
; dwPublicVersion : CRYPTCAT_VERSION -> "int"
; dwEncodingType : DWORD -> "int"
; HANDLE CryptCATOpen(LPWSTR pwszFileName, CRYPTCAT_OPEN_FLAGS fdwOpenFlags, UINT_PTR hProv, CRYPTCAT_VERSION dwPublicVersion, DWORD dwEncodingType)
#uselib "WINTRUST.dll"
#cfunc global CryptCATOpen "CryptCATOpen" wstr, int, intptr, int, int
; res = CryptCATOpen(pwszFileName, fdwOpenFlags, hProv, dwPublicVersion, dwEncodingType)
; pwszFileName : LPWSTR -> "wstr"
; fdwOpenFlags : CRYPTCAT_OPEN_FLAGS -> "int"
; hProv : UINT_PTR -> "intptr"
; dwPublicVersion : CRYPTCAT_VERSION -> "int"
; dwEncodingType : DWORD -> "int"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	wintrust = windows.NewLazySystemDLL("WINTRUST.dll")
	procCryptCATOpen = wintrust.NewProc("CryptCATOpen")
)

// pwszFileName (LPWSTR), fdwOpenFlags (CRYPTCAT_OPEN_FLAGS), hProv (UINT_PTR), dwPublicVersion (CRYPTCAT_VERSION), dwEncodingType (DWORD)
r1, _, err := procCryptCATOpen.Call(
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pwszFileName))),
	uintptr(fdwOpenFlags),
	uintptr(hProv),
	uintptr(dwPublicVersion),
	uintptr(dwEncodingType),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HANDLE
function CryptCATOpen(
  pwszFileName: PWideChar;   // LPWSTR
  fdwOpenFlags: DWORD;   // CRYPTCAT_OPEN_FLAGS
  hProv: NativeUInt;   // UINT_PTR
  dwPublicVersion: DWORD;   // CRYPTCAT_VERSION
  dwEncodingType: DWORD   // DWORD
): THandle; stdcall;
  external 'WINTRUST.dll' name 'CryptCATOpen';
result := DllCall("WINTRUST\CryptCATOpen"
    , "WStr", pwszFileName   ; LPWSTR
    , "UInt", fdwOpenFlags   ; CRYPTCAT_OPEN_FLAGS
    , "UPtr", hProv   ; UINT_PTR
    , "UInt", dwPublicVersion   ; CRYPTCAT_VERSION
    , "UInt", dwEncodingType   ; DWORD
    , "Ptr")   ; return: HANDLE
●CryptCATOpen(pwszFileName, fdwOpenFlags, hProv, dwPublicVersion, dwEncodingType) = DLL("WINTRUST.dll", "void* CryptCATOpen(char*, dword, int, dword, dword)")
# 呼び出し: CryptCATOpen(pwszFileName, fdwOpenFlags, hProv, dwPublicVersion, dwEncodingType)
# pwszFileName : LPWSTR -> "char*"
# fdwOpenFlags : CRYPTCAT_OPEN_FLAGS -> "dword"
# hProv : UINT_PTR -> "int"
# dwPublicVersion : CRYPTCAT_VERSION -> "dword"
# dwEncodingType : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。