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

CryptRetrieveObjectByUrlW

関数
URL(Unicode)から証明書やCRLなどの暗号オブジェクトを取得する。
DLLCRYPTNET.dll文字セットUnicode (-W)呼出規約winapi対応OSWindows XP 以降

シグネチャ

// CRYPTNET.dll  (Unicode / -W)
#include <windows.h>

BOOL CryptRetrieveObjectByUrlW(
    LPCWSTR pszUrl,
    LPCSTR pszObjectOid,   // optional
    DWORD dwRetrievalFlags,
    DWORD dwTimeout,
    void** ppvObject,
    HCRYPTASYNC hAsyncRetrieve,   // optional
    CRYPT_CREDENTIALS* pCredentials,   // optional
    void* pvVerify,   // optional
    CRYPT_RETRIEVE_AUX_INFO* pAuxInfo   // optional
);

パラメーター

名前方向
pszUrlLPCWSTRin
pszObjectOidLPCSTRinoptional
dwRetrievalFlagsDWORDin
dwTimeoutDWORDin
ppvObjectvoid**out
hAsyncRetrieveHCRYPTASYNCinoptional
pCredentialsCRYPT_CREDENTIALS*inoptional
pvVerifyvoid*inoptional
pAuxInfoCRYPT_RETRIEVE_AUX_INFO*inoutoptional

戻り値の型: BOOL

各言語での呼び出し定義

// CRYPTNET.dll  (Unicode / -W)
#include <windows.h>

BOOL CryptRetrieveObjectByUrlW(
    LPCWSTR pszUrl,
    LPCSTR pszObjectOid,   // optional
    DWORD dwRetrievalFlags,
    DWORD dwTimeout,
    void** ppvObject,
    HCRYPTASYNC hAsyncRetrieve,   // optional
    CRYPT_CREDENTIALS* pCredentials,   // optional
    void* pvVerify,   // optional
    CRYPT_RETRIEVE_AUX_INFO* pAuxInfo   // optional
);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("CRYPTNET.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern bool CryptRetrieveObjectByUrlW(
    [MarshalAs(UnmanagedType.LPWStr)] string pszUrl,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPStr)] string pszObjectOid,   // LPCSTR optional
    uint dwRetrievalFlags,   // DWORD
    uint dwTimeout,   // DWORD
    IntPtr ppvObject,   // void** out
    IntPtr hAsyncRetrieve,   // HCRYPTASYNC optional
    IntPtr pCredentials,   // CRYPT_CREDENTIALS* optional
    IntPtr pvVerify,   // void* optional
    IntPtr pAuxInfo   // CRYPT_RETRIEVE_AUX_INFO* optional, in/out
);
<DllImport("CRYPTNET.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Public Shared Function CryptRetrieveObjectByUrlW(
    <MarshalAs(UnmanagedType.LPWStr)> pszUrl As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPStr)> pszObjectOid As String,   ' LPCSTR optional
    dwRetrievalFlags As UInteger,   ' DWORD
    dwTimeout As UInteger,   ' DWORD
    ppvObject As IntPtr,   ' void** out
    hAsyncRetrieve As IntPtr,   ' HCRYPTASYNC optional
    pCredentials As IntPtr,   ' CRYPT_CREDENTIALS* optional
    pvVerify As IntPtr,   ' void* optional
    pAuxInfo As IntPtr   ' CRYPT_RETRIEVE_AUX_INFO* optional, in/out
) As Boolean
End Function
' pszUrl : LPCWSTR
' pszObjectOid : LPCSTR optional
' dwRetrievalFlags : DWORD
' dwTimeout : DWORD
' ppvObject : void** out
' hAsyncRetrieve : HCRYPTASYNC optional
' pCredentials : CRYPT_CREDENTIALS* optional
' pvVerify : void* optional
' pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out
Declare PtrSafe Function CryptRetrieveObjectByUrlW Lib "cryptnet" ( _
    ByVal pszUrl As LongPtr, _
    ByVal pszObjectOid As String, _
    ByVal dwRetrievalFlags As Long, _
    ByVal dwTimeout As Long, _
    ByVal ppvObject As LongPtr, _
    ByVal hAsyncRetrieve As LongPtr, _
    ByVal pCredentials As LongPtr, _
    ByVal pvVerify As LongPtr, _
    ByVal pAuxInfo As LongPtr) As Long
' Unicode(W): 文字列は ByVal As LongPtr とし StrPtr(unicodeStr) を渡す
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

CryptRetrieveObjectByUrlW = ctypes.windll.cryptnet.CryptRetrieveObjectByUrlW
CryptRetrieveObjectByUrlW.restype = wintypes.BOOL
CryptRetrieveObjectByUrlW.argtypes = [
    wintypes.LPCWSTR,  # pszUrl : LPCWSTR
    wintypes.LPCSTR,  # pszObjectOid : LPCSTR optional
    wintypes.DWORD,  # dwRetrievalFlags : DWORD
    wintypes.DWORD,  # dwTimeout : DWORD
    ctypes.c_void_p,  # ppvObject : void** out
    ctypes.c_ssize_t,  # hAsyncRetrieve : HCRYPTASYNC optional
    ctypes.c_void_p,  # pCredentials : CRYPT_CREDENTIALS* optional
    ctypes.POINTER(None),  # pvVerify : void* optional
    ctypes.c_void_p,  # pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('CRYPTNET.dll')
CryptRetrieveObjectByUrlW = Fiddle::Function.new(
  lib['CryptRetrieveObjectByUrlW'],
  [
    Fiddle::TYPE_VOIDP,  # pszUrl : LPCWSTR
    Fiddle::TYPE_VOIDP,  # pszObjectOid : LPCSTR optional
    -Fiddle::TYPE_INT,  # dwRetrievalFlags : DWORD
    -Fiddle::TYPE_INT,  # dwTimeout : DWORD
    Fiddle::TYPE_VOIDP,  # ppvObject : void** out
    Fiddle::TYPE_INTPTR_T,  # hAsyncRetrieve : HCRYPTASYNC optional
    Fiddle::TYPE_VOIDP,  # pCredentials : CRYPT_CREDENTIALS* optional
    Fiddle::TYPE_VOIDP,  # pvVerify : void* optional
    Fiddle::TYPE_VOIDP,  # pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out
  ],
  Fiddle::TYPE_INT)
# Wide strings: pass str.encode("UTF-16LE") + "\x00\x00"
#[link(name = "cryptnet")]
extern "system" {
    fn CryptRetrieveObjectByUrlW(
        pszUrl: *const u16,  // LPCWSTR
        pszObjectOid: *const u8,  // LPCSTR optional
        dwRetrievalFlags: u32,  // DWORD
        dwTimeout: u32,  // DWORD
        ppvObject: *mut *mut (),  // void** out
        hAsyncRetrieve: isize,  // HCRYPTASYNC optional
        pCredentials: *mut CRYPT_CREDENTIALS,  // CRYPT_CREDENTIALS* optional
        pvVerify: *mut (),  // void* optional
        pAuxInfo: *mut CRYPT_RETRIEVE_AUX_INFO  // CRYPT_RETRIEVE_AUX_INFO* optional, in/out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("CRYPTNET.dll", CharSet = CharSet.Unicode)]
public static extern bool CryptRetrieveObjectByUrlW([MarshalAs(UnmanagedType.LPWStr)] string pszUrl, [MarshalAs(UnmanagedType.LPStr)] string pszObjectOid, uint dwRetrievalFlags, uint dwTimeout, IntPtr ppvObject, IntPtr hAsyncRetrieve, IntPtr pCredentials, IntPtr pvVerify, IntPtr pAuxInfo);
"@
$api = Add-Type -MemberDefinition $sig -Name 'CRYPTNET_CryptRetrieveObjectByUrlW' -Namespace Win32 -PassThru
# $api::CryptRetrieveObjectByUrlW(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo)
#uselib "CRYPTNET.dll"
#func global CryptRetrieveObjectByUrlW "CryptRetrieveObjectByUrlW" wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr
; CryptRetrieveObjectByUrlW pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, varptr(pCredentials), pvVerify, varptr(pAuxInfo)   ; 戻り値は stat
; pszUrl : LPCWSTR -> "wptr"
; pszObjectOid : LPCSTR optional -> "wptr"
; dwRetrievalFlags : DWORD -> "wptr"
; dwTimeout : DWORD -> "wptr"
; ppvObject : void** out -> "wptr"
; hAsyncRetrieve : HCRYPTASYNC optional -> "wptr"
; pCredentials : CRYPT_CREDENTIALS* optional -> "wptr"
; pvVerify : void* optional -> "wptr"
; pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out -> "wptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "CRYPTNET.dll"
#cfunc global CryptRetrieveObjectByUrlW "CryptRetrieveObjectByUrlW" wstr, str, int, int, sptr, sptr, var, sptr, var
; res = CryptRetrieveObjectByUrlW(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo)
; pszUrl : LPCWSTR -> "wstr"
; pszObjectOid : LPCSTR optional -> "str"
; dwRetrievalFlags : DWORD -> "int"
; dwTimeout : DWORD -> "int"
; ppvObject : void** out -> "sptr"
; hAsyncRetrieve : HCRYPTASYNC optional -> "sptr"
; pCredentials : CRYPT_CREDENTIALS* optional -> "var"
; pvVerify : void* optional -> "sptr"
; pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; BOOL CryptRetrieveObjectByUrlW(LPCWSTR pszUrl, LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, void** ppvObject, HCRYPTASYNC hAsyncRetrieve, CRYPT_CREDENTIALS* pCredentials, void* pvVerify, CRYPT_RETRIEVE_AUX_INFO* pAuxInfo)
#uselib "CRYPTNET.dll"
#cfunc global CryptRetrieveObjectByUrlW "CryptRetrieveObjectByUrlW" wstr, str, int, int, intptr, intptr, var, intptr, var
; res = CryptRetrieveObjectByUrlW(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo)
; pszUrl : LPCWSTR -> "wstr"
; pszObjectOid : LPCSTR optional -> "str"
; dwRetrievalFlags : DWORD -> "int"
; dwTimeout : DWORD -> "int"
; ppvObject : void** out -> "intptr"
; hAsyncRetrieve : HCRYPTASYNC optional -> "intptr"
; pCredentials : CRYPT_CREDENTIALS* optional -> "var"
; pvVerify : void* optional -> "intptr"
; pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	cryptnet = windows.NewLazySystemDLL("CRYPTNET.dll")
	procCryptRetrieveObjectByUrlW = cryptnet.NewProc("CryptRetrieveObjectByUrlW")
)

// pszUrl (LPCWSTR), pszObjectOid (LPCSTR optional), dwRetrievalFlags (DWORD), dwTimeout (DWORD), ppvObject (void** out), hAsyncRetrieve (HCRYPTASYNC optional), pCredentials (CRYPT_CREDENTIALS* optional), pvVerify (void* optional), pAuxInfo (CRYPT_RETRIEVE_AUX_INFO* optional, in/out)
r1, _, err := procCryptRetrieveObjectByUrlW.Call(
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pszUrl))),
	uintptr(unsafe.Pointer(windows.BytePtrFromString(pszObjectOid))),
	uintptr(dwRetrievalFlags),
	uintptr(dwTimeout),
	uintptr(ppvObject),
	uintptr(hAsyncRetrieve),
	uintptr(pCredentials),
	uintptr(pvVerify),
	uintptr(pAuxInfo),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // BOOL
function CryptRetrieveObjectByUrlW(
  pszUrl: PWideChar;   // LPCWSTR
  pszObjectOid: PAnsiChar;   // LPCSTR optional
  dwRetrievalFlags: DWORD;   // DWORD
  dwTimeout: DWORD;   // DWORD
  ppvObject: Pointer;   // void** out
  hAsyncRetrieve: NativeInt;   // HCRYPTASYNC optional
  pCredentials: Pointer;   // CRYPT_CREDENTIALS* optional
  pvVerify: Pointer;   // void* optional
  pAuxInfo: Pointer   // CRYPT_RETRIEVE_AUX_INFO* optional, in/out
): BOOL; stdcall;
  external 'CRYPTNET.dll' name 'CryptRetrieveObjectByUrlW';
result := DllCall("CRYPTNET\CryptRetrieveObjectByUrlW"
    , "WStr", pszUrl   ; LPCWSTR
    , "AStr", pszObjectOid   ; LPCSTR optional
    , "UInt", dwRetrievalFlags   ; DWORD
    , "UInt", dwTimeout   ; DWORD
    , "Ptr", ppvObject   ; void** out
    , "Ptr", hAsyncRetrieve   ; HCRYPTASYNC optional
    , "Ptr", pCredentials   ; CRYPT_CREDENTIALS* optional
    , "Ptr", pvVerify   ; void* optional
    , "Ptr", pAuxInfo   ; CRYPT_RETRIEVE_AUX_INFO* optional, in/out
    , "Int")   ; return: BOOL
●CryptRetrieveObjectByUrlW(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo) = DLL("CRYPTNET.dll", "bool CryptRetrieveObjectByUrlW(char*, char*, dword, dword, void*, int, void*, void*, void*)")
# 呼び出し: CryptRetrieveObjectByUrlW(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo)
# pszUrl : LPCWSTR -> "char*"
# pszObjectOid : LPCSTR optional -> "char*"
# dwRetrievalFlags : DWORD -> "dword"
# dwTimeout : DWORD -> "dword"
# ppvObject : void** out -> "void*"
# hAsyncRetrieve : HCRYPTASYNC optional -> "int"
# pCredentials : CRYPT_CREDENTIALS* optional -> "void*"
# pvVerify : void* optional -> "void*"
# pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※-W(Unicode)関数。なでしこ1はANSIのため -A 版の利用を推奨。