ホーム › Security.Cryptography.Certificates › CertSrvBackupPrepareW
CertSrvBackupPrepareW
関数証明書サービスデータベースのバックアップを開始準備する。
シグネチャ
// certadm.dll
#include <windows.h>
HRESULT CertSrvBackupPrepareW(
LPCWSTR pwszServerName,
DWORD grbitJet,
CSBACKUP_TYPE dwBackupFlags,
void** phbc
);パラメーター
| 名前 | 型 | 方向 | 説明 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| pwszServerName | LPCWSTR | in | オンラインバックアップの準備を行うサーバーのマシン名へのポインター。この名前は NetBIOS 名でも DNS 名でもかまいません。 | ||||||
| grbitJet | DWORD | in | データベースエンジンが使用する値。この値はゼロに設定してください。 | ||||||
| dwBackupFlags | CSBACKUP_TYPE | in | バックアップの種類を指定します。次のいずれかの値を指定できます。
| ||||||
| phbc | void** | inout | Certificate Services のバックアップコンテキストハンドル (HCSBC) へのポインター。 |
戻り値の型: HRESULT
公式ドキュメント
Certificate Services サーバーをバックアップ操作に備えて準備するために使用します。
戻り値
戻り値は HRESULT です。S_OK は成功を示し、*phbc には、他の Certificate Services バックアップ API で使用できる HCSBC が設定されます。
解説(Remarks)
Certificate Services のバックアップを実行する前に、CertSrvBackupPrepare によって HCSBC を作成する必要があります。作成された HCSBC は、ファイルの一覧表示、オープン、読み取り、クローズ、およびログファイルの切り捨てに使用できる Certificate Services バックアップ関数に必須のパラメーターです。
メモ バックアップセッションが完了したら、
CertSrvBackupEnd を呼び出して、CertSrvBackupPrepare の呼び出しで得られた HCSBC を解放する必要があります。
この呼び出しを実行するには、バックアップ特権が必要です。詳細については、 Setting the Backup and Restore Privileges を参照してください。
例
WCHAR * wszServer = L"MyCertServerMachine";
FNCERTSRVBACKUPPREPAREW* pfnBackupPrepare;
char * szBackPrepFunc = "CertSrvBackupPrepareW";
HINSTANCE hInst=0;
HCSBC hCSBC=NULL;
HRESULT hr=0;
// DLL を読み込みます。
hInst = LoadLibrary(L"Certadm.dll");
if ( NULL == hInst )
{
printf("Failed LoadLibrary, error=%d\n",
GetLastError() );
exit(1); // またはその他の適切なエラー処理を行います。
}
// 目的の関数のアドレスを取得します。
pfnBackupPrepare = (FNCERTSRVBACKUPPREPAREW*)GetProcAddress( hInst,
szBackPrepFunc );
if ( NULL == pfnBackupPrepare )
{
printf("Failed GetProcAddress - %s, error=%d\n",
szBackPrepFunc,
GetLastError() );
exit(1); // またはその他の適切なエラー処理を行います。
}
// CertServ をバックアップ用に準備します。
hr = pfnBackupPrepare(wszServer,
0,
CSBACKUP_TYPE_FULL,
&hCSBC);
if (FAILED(hr))
{
printf("Failed pfnBackupPrepare call [%x]\n", hr);
exit(1); // またはその他の適切なエラー処理を行います。
}
// HCSBC を使用してバックアップ操作を行います。
// ...
// 処理が完了したら、CertSrvBackupEnd を呼び出して
// HCSBC コンテキストを解放します (ここでは示していません)。
// ...
// 処理が完了したので、DLL を解放します。
if (hInst)
FreeLibrary(hInst);
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// certadm.dll
#include <windows.h>
HRESULT CertSrvBackupPrepareW(
LPCWSTR pwszServerName,
DWORD grbitJet,
CSBACKUP_TYPE dwBackupFlags,
void** phbc
);[DllImport("certadm.dll", ExactSpelling = true)]
static extern int CertSrvBackupPrepareW(
[MarshalAs(UnmanagedType.LPWStr)] string pwszServerName, // LPCWSTR
uint grbitJet, // DWORD
uint dwBackupFlags, // CSBACKUP_TYPE
IntPtr phbc // void** in/out
);<DllImport("certadm.dll", ExactSpelling:=True)>
Public Shared Function CertSrvBackupPrepareW(
<MarshalAs(UnmanagedType.LPWStr)> pwszServerName As String, ' LPCWSTR
grbitJet As UInteger, ' DWORD
dwBackupFlags As UInteger, ' CSBACKUP_TYPE
phbc As IntPtr ' void** in/out
) As Integer
End Function' pwszServerName : LPCWSTR
' grbitJet : DWORD
' dwBackupFlags : CSBACKUP_TYPE
' phbc : void** in/out
Declare PtrSafe Function CertSrvBackupPrepareW Lib "certadm" ( _
ByVal pwszServerName As LongPtr, _
ByVal grbitJet As Long, _
ByVal dwBackupFlags As Long, _
ByVal phbc As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
CertSrvBackupPrepareW = ctypes.windll.certadm.CertSrvBackupPrepareW
CertSrvBackupPrepareW.restype = ctypes.c_int
CertSrvBackupPrepareW.argtypes = [
wintypes.LPCWSTR, # pwszServerName : LPCWSTR
wintypes.DWORD, # grbitJet : DWORD
wintypes.DWORD, # dwBackupFlags : CSBACKUP_TYPE
ctypes.c_void_p, # phbc : void** in/out
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('certadm.dll')
CertSrvBackupPrepareW = Fiddle::Function.new(
lib['CertSrvBackupPrepareW'],
[
Fiddle::TYPE_VOIDP, # pwszServerName : LPCWSTR
-Fiddle::TYPE_INT, # grbitJet : DWORD
-Fiddle::TYPE_INT, # dwBackupFlags : CSBACKUP_TYPE
Fiddle::TYPE_VOIDP, # phbc : void** in/out
],
Fiddle::TYPE_INT)#[link(name = "certadm")]
extern "system" {
fn CertSrvBackupPrepareW(
pwszServerName: *const u16, // LPCWSTR
grbitJet: u32, // DWORD
dwBackupFlags: u32, // CSBACKUP_TYPE
phbc: *mut *mut () // void** in/out
) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("certadm.dll")]
public static extern int CertSrvBackupPrepareW([MarshalAs(UnmanagedType.LPWStr)] string pwszServerName, uint grbitJet, uint dwBackupFlags, IntPtr phbc);
"@
$api = Add-Type -MemberDefinition $sig -Name 'certadm_CertSrvBackupPrepareW' -Namespace Win32 -PassThru
# $api::CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc)#uselib "certadm.dll"
#func global CertSrvBackupPrepareW "CertSrvBackupPrepareW" sptr, sptr, sptr, sptr
; CertSrvBackupPrepareW pwszServerName, grbitJet, dwBackupFlags, phbc ; 戻り値は stat
; pwszServerName : LPCWSTR -> "sptr"
; grbitJet : DWORD -> "sptr"
; dwBackupFlags : CSBACKUP_TYPE -> "sptr"
; phbc : void** in/out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "certadm.dll"
#cfunc global CertSrvBackupPrepareW "CertSrvBackupPrepareW" wstr, int, int, sptr
; res = CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc)
; pwszServerName : LPCWSTR -> "wstr"
; grbitJet : DWORD -> "int"
; dwBackupFlags : CSBACKUP_TYPE -> "int"
; phbc : void** in/out -> "sptr"; HRESULT CertSrvBackupPrepareW(LPCWSTR pwszServerName, DWORD grbitJet, CSBACKUP_TYPE dwBackupFlags, void** phbc)
#uselib "certadm.dll"
#cfunc global CertSrvBackupPrepareW "CertSrvBackupPrepareW" wstr, int, int, intptr
; res = CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc)
; pwszServerName : LPCWSTR -> "wstr"
; grbitJet : DWORD -> "int"
; dwBackupFlags : CSBACKUP_TYPE -> "int"
; phbc : void** in/out -> "intptr"import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
certadm = windows.NewLazySystemDLL("certadm.dll")
procCertSrvBackupPrepareW = certadm.NewProc("CertSrvBackupPrepareW")
)
// pwszServerName (LPCWSTR), grbitJet (DWORD), dwBackupFlags (CSBACKUP_TYPE), phbc (void** in/out)
r1, _, err := procCertSrvBackupPrepareW.Call(
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pwszServerName))),
uintptr(grbitJet),
uintptr(dwBackupFlags),
uintptr(phbc),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // HRESULTfunction CertSrvBackupPrepareW(
pwszServerName: PWideChar; // LPCWSTR
grbitJet: DWORD; // DWORD
dwBackupFlags: DWORD; // CSBACKUP_TYPE
phbc: Pointer // void** in/out
): Integer; stdcall;
external 'certadm.dll' name 'CertSrvBackupPrepareW';result := DllCall("certadm\CertSrvBackupPrepareW"
, "WStr", pwszServerName ; LPCWSTR
, "UInt", grbitJet ; DWORD
, "UInt", dwBackupFlags ; CSBACKUP_TYPE
, "Ptr", phbc ; void** in/out
, "Int") ; return: HRESULT●CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc) = DLL("certadm.dll", "int CertSrvBackupPrepareW(char*, dword, dword, void*)")
# 呼び出し: CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc)
# pwszServerName : LPCWSTR -> "char*"
# grbitJet : DWORD -> "dword"
# dwBackupFlags : CSBACKUP_TYPE -> "dword"
# phbc : void** in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "certadm" fn CertSrvBackupPrepareW(
pwszServerName: [*c]const u16, // LPCWSTR
grbitJet: u32, // DWORD
dwBackupFlags: u32, // CSBACKUP_TYPE
phbc: ?*anyopaque // void** in/out
) callconv(std.os.windows.WINAPI) i32;proc CertSrvBackupPrepareW(
pwszServerName: WideCString, # LPCWSTR
grbitJet: uint32, # DWORD
dwBackupFlags: uint32, # CSBACKUP_TYPE
phbc: pointer # void** in/out
): int32 {.importc: "CertSrvBackupPrepareW", stdcall, dynlib: "certadm.dll".}pragma(lib, "certadm");
extern(Windows)
int CertSrvBackupPrepareW(
const(wchar)* pwszServerName, // LPCWSTR
uint grbitJet, // DWORD
uint dwBackupFlags, // CSBACKUP_TYPE
void** phbc // void** in/out
);ccall((:CertSrvBackupPrepareW, "certadm.dll"), stdcall, Int32,
(Cwstring, UInt32, UInt32, Ptr{Cvoid}),
pwszServerName, grbitJet, dwBackupFlags, phbc)
# pwszServerName : LPCWSTR -> Cwstring
# grbitJet : DWORD -> UInt32
# dwBackupFlags : CSBACKUP_TYPE -> UInt32
# phbc : void** in/out -> Ptr{Cvoid}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。local ffi = require("ffi")
ffi.cdef[[
int32_t CertSrvBackupPrepareW(
const uint16_t* pwszServerName,
uint32_t grbitJet,
uint32_t dwBackupFlags,
void** phbc);
]]
local certadm = ffi.load("certadm")
-- certadm.CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc)
-- pwszServerName : LPCWSTR
-- grbitJet : DWORD
-- dwBackupFlags : CSBACKUP_TYPE
-- phbc : void** in/out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('certadm.dll');
const CertSrvBackupPrepareW = lib.func('__stdcall', 'CertSrvBackupPrepareW', 'int32_t', ['str16', 'uint32_t', 'uint32_t', 'void *']);
// CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc)
// pwszServerName : LPCWSTR -> 'str16'
// grbitJet : DWORD -> 'uint32_t'
// dwBackupFlags : CSBACKUP_TYPE -> 'uint32_t'
// phbc : void** in/out -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("certadm.dll", {
CertSrvBackupPrepareW: { parameters: ["buffer", "u32", "u32", "pointer"], result: "i32" },
});
// lib.symbols.CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc)
// pwszServerName : LPCWSTR -> "buffer"
// grbitJet : DWORD -> "u32"
// dwBackupFlags : CSBACKUP_TYPE -> "u32"
// phbc : void** in/out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
int32_t CertSrvBackupPrepareW(
const uint16_t* pwszServerName,
uint32_t grbitJet,
uint32_t dwBackupFlags,
void** phbc);
C, "certadm.dll");
// $ffi->CertSrvBackupPrepareW(pwszServerName, grbitJet, dwBackupFlags, phbc);
// pwszServerName : LPCWSTR
// grbitJet : DWORD
// dwBackupFlags : CSBACKUP_TYPE
// phbc : void** in/out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public interface Certadm extends StdCallLibrary {
Certadm INSTANCE = Native.load("certadm", Certadm.class);
int CertSrvBackupPrepareW(
WString pwszServerName, // LPCWSTR
int grbitJet, // DWORD
int dwBackupFlags, // CSBACKUP_TYPE
Pointer phbc // void** in/out
);
}@[Link("certadm")]
lib Libcertadm
fun CertSrvBackupPrepareW = CertSrvBackupPrepareW(
pwszServerName : UInt16*, # LPCWSTR
grbitJet : UInt32, # DWORD
dwBackupFlags : UInt32, # CSBACKUP_TYPE
phbc : Void** # void** in/out
) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef CertSrvBackupPrepareWNative = Int32 Function(Pointer<Utf16>, Uint32, Uint32, Pointer<Void>);
typedef CertSrvBackupPrepareWDart = int Function(Pointer<Utf16>, int, int, Pointer<Void>);
final CertSrvBackupPrepareW = DynamicLibrary.open('certadm.dll')
.lookupFunction<CertSrvBackupPrepareWNative, CertSrvBackupPrepareWDart>('CertSrvBackupPrepareW');
// pwszServerName : LPCWSTR -> Pointer<Utf16>
// grbitJet : DWORD -> Uint32
// dwBackupFlags : CSBACKUP_TYPE -> Uint32
// phbc : void** in/out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function CertSrvBackupPrepareW(
pwszServerName: PWideChar; // LPCWSTR
grbitJet: DWORD; // DWORD
dwBackupFlags: DWORD; // CSBACKUP_TYPE
phbc: Pointer // void** in/out
): Integer; stdcall;
external 'certadm.dll' name 'CertSrvBackupPrepareW';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "CertSrvBackupPrepareW"
c_CertSrvBackupPrepareW :: CWString -> Word32 -> Word32 -> Ptr () -> IO Int32
-- pwszServerName : LPCWSTR -> CWString
-- grbitJet : DWORD -> Word32
-- dwBackupFlags : CSBACKUP_TYPE -> Word32
-- phbc : void** in/out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let certsrvbackuppreparew =
foreign "CertSrvBackupPrepareW"
((ptr uint16_t) @-> uint32_t @-> uint32_t @-> (ptr void) @-> returning int32_t)
(* pwszServerName : LPCWSTR -> (ptr uint16_t) *)
(* grbitJet : DWORD -> uint32_t *)
(* dwBackupFlags : CSBACKUP_TYPE -> uint32_t *)
(* phbc : void** in/out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library certadm (t "certadm.dll"))
(cffi:use-foreign-library certadm)
(cffi:defcfun ("CertSrvBackupPrepareW" cert-srv-backup-prepare-w :convention :stdcall) :int32
(pwsz-server-name (:string :encoding :utf-16le)) ; LPCWSTR
(grbit-jet :uint32) ; DWORD
(dw-backup-flags :uint32) ; CSBACKUP_TYPE
(phbc :pointer)) ; void** in/out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $CertSrvBackupPrepareW = Win32::API::More->new('certadm',
'int CertSrvBackupPrepareW(LPCWSTR pwszServerName, DWORD grbitJet, DWORD dwBackupFlags, LPVOID phbc)');
# my $ret = $CertSrvBackupPrepareW->Call($pwszServerName, $grbitJet, $dwBackupFlags, $phbc);
# pwszServerName : LPCWSTR -> LPCWSTR
# grbitJet : DWORD -> DWORD
# dwBackupFlags : CSBACKUP_TYPE -> DWORD
# phbc : void** in/out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
公式の関連項目
- f CertSrvBackupEnd — 証明書サービスのバックアップ処理を終了する。
使用する型