ホーム › Security.Cryptography › CryptRetrieveObjectByUrlW
CryptRetrieveObjectByUrlW
関数URL(Unicode)から証明書やCRLなどの暗号オブジェクトを取得する。
シグネチャ
// 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
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| pszUrl | LPCWSTR | in |
| pszObjectOid | LPCSTR | inoptional |
| dwRetrievalFlags | DWORD | in |
| dwTimeout | DWORD | in |
| ppvObject | void** | out |
| hAsyncRetrieve | HCRYPTASYNC | inoptional |
| pCredentials | CRYPT_CREDENTIALS* | inoptional |
| pvVerify | void* | inoptional |
| pAuxInfo | CRYPT_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 方式にも切替可。#uselib "CRYPTNET.dll" #cfunc global CryptRetrieveObjectByUrlW "CryptRetrieveObjectByUrlW" wstr, str, int, int, sptr, sptr, sptr, sptr, sptr ; res = CryptRetrieveObjectByUrlW(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, varptr(pCredentials), pvVerify, varptr(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 -> "sptr" ; pvVerify : void* optional -> "sptr" ; pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは 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 方式にも切替可。; 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, intptr, intptr, intptr ; res = CryptRetrieveObjectByUrlW(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, varptr(pCredentials), pvVerify, varptr(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 -> "intptr" ; pvVerify : void* optional -> "intptr" ; pAuxInfo : CRYPT_RETRIEVE_AUX_INFO* optional, in/out -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは 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 // BOOLfunction 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 版の利用を推奨。