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

NCryptProtectSecret

関数
保護記述子を用いてデータを暗号化保護する。
DLLncrypt.dll呼出規約winapi対応OSwindows8.0

シグネチャ

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

HRESULT NCryptProtectSecret(
    NCRYPT_DESCRIPTOR_HANDLE hDescriptor,
    DWORD dwFlags,
    const BYTE* pbData,
    DWORD cbData,
    const NCRYPT_ALLOC_PARA* pMemPara,   // optional
    HWND hWnd,   // optional
    BYTE** ppbProtectedBlob,
    DWORD* pcbProtectedBlob
);

パラメーター

名前方向
hDescriptorNCRYPT_DESCRIPTOR_HANDLEin
dwFlagsDWORDin
pbDataBYTE*in
cbDataDWORDin
pMemParaNCRYPT_ALLOC_PARA*inoptional
hWndHWNDinoptional
ppbProtectedBlobBYTE**out
pcbProtectedBlobDWORD*out

戻り値の型: HRESULT

各言語での呼び出し定義

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

HRESULT NCryptProtectSecret(
    NCRYPT_DESCRIPTOR_HANDLE hDescriptor,
    DWORD dwFlags,
    const BYTE* pbData,
    DWORD cbData,
    const NCRYPT_ALLOC_PARA* pMemPara,   // optional
    HWND hWnd,   // optional
    BYTE** ppbProtectedBlob,
    DWORD* pcbProtectedBlob
);
[DllImport("ncrypt.dll", ExactSpelling = true)]
static extern int NCryptProtectSecret(
    IntPtr hDescriptor,   // NCRYPT_DESCRIPTOR_HANDLE
    uint dwFlags,   // DWORD
    IntPtr pbData,   // BYTE*
    uint cbData,   // DWORD
    IntPtr pMemPara,   // NCRYPT_ALLOC_PARA* optional
    IntPtr hWnd,   // HWND optional
    IntPtr ppbProtectedBlob,   // BYTE** out
    out uint pcbProtectedBlob   // DWORD* out
);
<DllImport("ncrypt.dll", ExactSpelling:=True)>
Public Shared Function NCryptProtectSecret(
    hDescriptor As IntPtr,   ' NCRYPT_DESCRIPTOR_HANDLE
    dwFlags As UInteger,   ' DWORD
    pbData As IntPtr,   ' BYTE*
    cbData As UInteger,   ' DWORD
    pMemPara As IntPtr,   ' NCRYPT_ALLOC_PARA* optional
    hWnd As IntPtr,   ' HWND optional
    ppbProtectedBlob As IntPtr,   ' BYTE** out
    <Out> ByRef pcbProtectedBlob As UInteger   ' DWORD* out
) As Integer
End Function
' hDescriptor : NCRYPT_DESCRIPTOR_HANDLE
' dwFlags : DWORD
' pbData : BYTE*
' cbData : DWORD
' pMemPara : NCRYPT_ALLOC_PARA* optional
' hWnd : HWND optional
' ppbProtectedBlob : BYTE** out
' pcbProtectedBlob : DWORD* out
Declare PtrSafe Function NCryptProtectSecret Lib "ncrypt" ( _
    ByVal hDescriptor As LongPtr, _
    ByVal dwFlags As Long, _
    ByVal pbData As LongPtr, _
    ByVal cbData As Long, _
    ByVal pMemPara As LongPtr, _
    ByVal hWnd As LongPtr, _
    ByVal ppbProtectedBlob As LongPtr, _
    ByRef pcbProtectedBlob As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

NCryptProtectSecret = ctypes.windll.ncrypt.NCryptProtectSecret
NCryptProtectSecret.restype = ctypes.c_int
NCryptProtectSecret.argtypes = [
    wintypes.HANDLE,  # hDescriptor : NCRYPT_DESCRIPTOR_HANDLE
    wintypes.DWORD,  # dwFlags : DWORD
    ctypes.POINTER(ctypes.c_ubyte),  # pbData : BYTE*
    wintypes.DWORD,  # cbData : DWORD
    ctypes.c_void_p,  # pMemPara : NCRYPT_ALLOC_PARA* optional
    wintypes.HANDLE,  # hWnd : HWND optional
    ctypes.c_void_p,  # ppbProtectedBlob : BYTE** out
    ctypes.POINTER(wintypes.DWORD),  # pcbProtectedBlob : DWORD* out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ncrypt.dll')
NCryptProtectSecret = Fiddle::Function.new(
  lib['NCryptProtectSecret'],
  [
    Fiddle::TYPE_VOIDP,  # hDescriptor : NCRYPT_DESCRIPTOR_HANDLE
    -Fiddle::TYPE_INT,  # dwFlags : DWORD
    Fiddle::TYPE_VOIDP,  # pbData : BYTE*
    -Fiddle::TYPE_INT,  # cbData : DWORD
    Fiddle::TYPE_VOIDP,  # pMemPara : NCRYPT_ALLOC_PARA* optional
    Fiddle::TYPE_VOIDP,  # hWnd : HWND optional
    Fiddle::TYPE_VOIDP,  # ppbProtectedBlob : BYTE** out
    Fiddle::TYPE_VOIDP,  # pcbProtectedBlob : DWORD* out
  ],
  Fiddle::TYPE_INT)
#[link(name = "ncrypt")]
extern "system" {
    fn NCryptProtectSecret(
        hDescriptor: *mut core::ffi::c_void,  // NCRYPT_DESCRIPTOR_HANDLE
        dwFlags: u32,  // DWORD
        pbData: *const u8,  // BYTE*
        cbData: u32,  // DWORD
        pMemPara: *const NCRYPT_ALLOC_PARA,  // NCRYPT_ALLOC_PARA* optional
        hWnd: *mut core::ffi::c_void,  // HWND optional
        ppbProtectedBlob: *mut *mut u8,  // BYTE** out
        pcbProtectedBlob: *mut u32  // DWORD* out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ncrypt.dll")]
public static extern int NCryptProtectSecret(IntPtr hDescriptor, uint dwFlags, IntPtr pbData, uint cbData, IntPtr pMemPara, IntPtr hWnd, IntPtr ppbProtectedBlob, out uint pcbProtectedBlob);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ncrypt_NCryptProtectSecret' -Namespace Win32 -PassThru
# $api::NCryptProtectSecret(hDescriptor, dwFlags, pbData, cbData, pMemPara, hWnd, ppbProtectedBlob, pcbProtectedBlob)
#uselib "ncrypt.dll"
#func global NCryptProtectSecret "NCryptProtectSecret" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; NCryptProtectSecret hDescriptor, dwFlags, varptr(pbData), cbData, varptr(pMemPara), hWnd, varptr(ppbProtectedBlob), varptr(pcbProtectedBlob)   ; 戻り値は stat
; hDescriptor : NCRYPT_DESCRIPTOR_HANDLE -> "sptr"
; dwFlags : DWORD -> "sptr"
; pbData : BYTE* -> "sptr"
; cbData : DWORD -> "sptr"
; pMemPara : NCRYPT_ALLOC_PARA* optional -> "sptr"
; hWnd : HWND optional -> "sptr"
; ppbProtectedBlob : BYTE** out -> "sptr"
; pcbProtectedBlob : DWORD* out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "ncrypt.dll"
#cfunc global NCryptProtectSecret "NCryptProtectSecret" sptr, int, var, int, var, sptr, var, var
; res = NCryptProtectSecret(hDescriptor, dwFlags, pbData, cbData, pMemPara, hWnd, ppbProtectedBlob, pcbProtectedBlob)
; hDescriptor : NCRYPT_DESCRIPTOR_HANDLE -> "sptr"
; dwFlags : DWORD -> "int"
; pbData : BYTE* -> "var"
; cbData : DWORD -> "int"
; pMemPara : NCRYPT_ALLOC_PARA* optional -> "var"
; hWnd : HWND optional -> "sptr"
; ppbProtectedBlob : BYTE** out -> "var"
; pcbProtectedBlob : DWORD* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT NCryptProtectSecret(NCRYPT_DESCRIPTOR_HANDLE hDescriptor, DWORD dwFlags, BYTE* pbData, DWORD cbData, NCRYPT_ALLOC_PARA* pMemPara, HWND hWnd, BYTE** ppbProtectedBlob, DWORD* pcbProtectedBlob)
#uselib "ncrypt.dll"
#cfunc global NCryptProtectSecret "NCryptProtectSecret" intptr, int, var, int, var, intptr, var, var
; res = NCryptProtectSecret(hDescriptor, dwFlags, pbData, cbData, pMemPara, hWnd, ppbProtectedBlob, pcbProtectedBlob)
; hDescriptor : NCRYPT_DESCRIPTOR_HANDLE -> "intptr"
; dwFlags : DWORD -> "int"
; pbData : BYTE* -> "var"
; cbData : DWORD -> "int"
; pMemPara : NCRYPT_ALLOC_PARA* optional -> "var"
; hWnd : HWND optional -> "intptr"
; ppbProtectedBlob : BYTE** out -> "var"
; pcbProtectedBlob : DWORD* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	ncrypt = windows.NewLazySystemDLL("ncrypt.dll")
	procNCryptProtectSecret = ncrypt.NewProc("NCryptProtectSecret")
)

// hDescriptor (NCRYPT_DESCRIPTOR_HANDLE), dwFlags (DWORD), pbData (BYTE*), cbData (DWORD), pMemPara (NCRYPT_ALLOC_PARA* optional), hWnd (HWND optional), ppbProtectedBlob (BYTE** out), pcbProtectedBlob (DWORD* out)
r1, _, err := procNCryptProtectSecret.Call(
	uintptr(hDescriptor),
	uintptr(dwFlags),
	uintptr(pbData),
	uintptr(cbData),
	uintptr(pMemPara),
	uintptr(hWnd),
	uintptr(ppbProtectedBlob),
	uintptr(pcbProtectedBlob),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function NCryptProtectSecret(
  hDescriptor: THandle;   // NCRYPT_DESCRIPTOR_HANDLE
  dwFlags: DWORD;   // DWORD
  pbData: Pointer;   // BYTE*
  cbData: DWORD;   // DWORD
  pMemPara: Pointer;   // NCRYPT_ALLOC_PARA* optional
  hWnd: THandle;   // HWND optional
  ppbProtectedBlob: Pointer;   // BYTE** out
  pcbProtectedBlob: Pointer   // DWORD* out
): Integer; stdcall;
  external 'ncrypt.dll' name 'NCryptProtectSecret';
result := DllCall("ncrypt\NCryptProtectSecret"
    , "Ptr", hDescriptor   ; NCRYPT_DESCRIPTOR_HANDLE
    , "UInt", dwFlags   ; DWORD
    , "Ptr", pbData   ; BYTE*
    , "UInt", cbData   ; DWORD
    , "Ptr", pMemPara   ; NCRYPT_ALLOC_PARA* optional
    , "Ptr", hWnd   ; HWND optional
    , "Ptr", ppbProtectedBlob   ; BYTE** out
    , "Ptr", pcbProtectedBlob   ; DWORD* out
    , "Int")   ; return: HRESULT
●NCryptProtectSecret(hDescriptor, dwFlags, pbData, cbData, pMemPara, hWnd, ppbProtectedBlob, pcbProtectedBlob) = DLL("ncrypt.dll", "int NCryptProtectSecret(void*, dword, void*, dword, void*, void*, void*, void*)")
# 呼び出し: NCryptProtectSecret(hDescriptor, dwFlags, pbData, cbData, pMemPara, hWnd, ppbProtectedBlob, pcbProtectedBlob)
# hDescriptor : NCRYPT_DESCRIPTOR_HANDLE -> "void*"
# dwFlags : DWORD -> "dword"
# pbData : BYTE* -> "void*"
# cbData : DWORD -> "dword"
# pMemPara : NCRYPT_ALLOC_PARA* optional -> "void*"
# hWnd : HWND optional -> "void*"
# ppbProtectedBlob : BYTE** out -> "void*"
# pcbProtectedBlob : DWORD* out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。