ホーム › Security.Cryptography › CryptRetrieveObjectByUrlA
CryptRetrieveObjectByUrlA
関数URL(ANSI)から証明書やCRLなどの暗号オブジェクトを取得する。
シグネチャ
// CRYPTNET.dll (ANSI / -A)
#include <windows.h>
BOOL CryptRetrieveObjectByUrlA(
LPCSTR 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 | LPCSTR | 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 (ANSI / -A)
#include <windows.h>
BOOL CryptRetrieveObjectByUrlA(
LPCSTR 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.Ansi, ExactSpelling = true)]
static extern bool CryptRetrieveObjectByUrlA(
[MarshalAs(UnmanagedType.LPStr)] string pszUrl, // LPCSTR
[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.Ansi, ExactSpelling:=True)>
Public Shared Function CryptRetrieveObjectByUrlA(
<MarshalAs(UnmanagedType.LPStr)> pszUrl As String, ' LPCSTR
<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 : LPCSTR
' 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 CryptRetrieveObjectByUrlA Lib "cryptnet" ( _
ByVal pszUrl As String, _
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
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
CryptRetrieveObjectByUrlA = ctypes.windll.cryptnet.CryptRetrieveObjectByUrlA
CryptRetrieveObjectByUrlA.restype = wintypes.BOOL
CryptRetrieveObjectByUrlA.argtypes = [
wintypes.LPCSTR, # pszUrl : LPCSTR
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')
CryptRetrieveObjectByUrlA = Fiddle::Function.new(
lib['CryptRetrieveObjectByUrlA'],
[
Fiddle::TYPE_VOIDP, # pszUrl : LPCSTR
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)#[link(name = "cryptnet")]
extern "system" {
fn CryptRetrieveObjectByUrlA(
pszUrl: *const u8, // LPCSTR
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.Ansi)]
public static extern bool CryptRetrieveObjectByUrlA([MarshalAs(UnmanagedType.LPStr)] 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_CryptRetrieveObjectByUrlA' -Namespace Win32 -PassThru
# $api::CryptRetrieveObjectByUrlA(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo)#uselib "CRYPTNET.dll"
#func global CryptRetrieveObjectByUrlA "CryptRetrieveObjectByUrlA" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; CryptRetrieveObjectByUrlA pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, varptr(pCredentials), pvVerify, varptr(pAuxInfo) ; 戻り値は stat
; pszUrl : LPCSTR -> "sptr"
; pszObjectOid : LPCSTR optional -> "sptr"
; dwRetrievalFlags : DWORD -> "sptr"
; dwTimeout : DWORD -> "sptr"
; 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"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "CRYPTNET.dll" #cfunc global CryptRetrieveObjectByUrlA "CryptRetrieveObjectByUrlA" str, str, int, int, sptr, sptr, var, sptr, var ; res = CryptRetrieveObjectByUrlA(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo) ; pszUrl : LPCSTR -> "str" ; 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 CryptRetrieveObjectByUrlA "CryptRetrieveObjectByUrlA" str, str, int, int, sptr, sptr, sptr, sptr, sptr ; res = CryptRetrieveObjectByUrlA(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, varptr(pCredentials), pvVerify, varptr(pAuxInfo)) ; pszUrl : LPCSTR -> "str" ; 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 CryptRetrieveObjectByUrlA(LPCSTR 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 CryptRetrieveObjectByUrlA "CryptRetrieveObjectByUrlA" str, str, int, int, intptr, intptr, var, intptr, var ; res = CryptRetrieveObjectByUrlA(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo) ; pszUrl : LPCSTR -> "str" ; 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 CryptRetrieveObjectByUrlA(LPCSTR 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 CryptRetrieveObjectByUrlA "CryptRetrieveObjectByUrlA" str, str, int, int, intptr, intptr, intptr, intptr, intptr ; res = CryptRetrieveObjectByUrlA(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, varptr(pCredentials), pvVerify, varptr(pAuxInfo)) ; pszUrl : LPCSTR -> "str" ; 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")
procCryptRetrieveObjectByUrlA = cryptnet.NewProc("CryptRetrieveObjectByUrlA")
)
// pszUrl (LPCSTR), 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 := procCryptRetrieveObjectByUrlA.Call(
uintptr(unsafe.Pointer(windows.BytePtrFromString(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 CryptRetrieveObjectByUrlA(
pszUrl: PAnsiChar; // LPCSTR
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 'CryptRetrieveObjectByUrlA';result := DllCall("CRYPTNET\CryptRetrieveObjectByUrlA"
, "AStr", pszUrl ; LPCSTR
, "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●CryptRetrieveObjectByUrlA(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo) = DLL("CRYPTNET.dll", "bool CryptRetrieveObjectByUrlA(char*, char*, dword, dword, void*, int, void*, void*, void*)")
# 呼び出し: CryptRetrieveObjectByUrlA(pszUrl, pszObjectOid, dwRetrievalFlags, dwTimeout, ppvObject, hAsyncRetrieve, pCredentials, pvVerify, pAuxInfo)
# pszUrl : LPCSTR -> "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)。