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

CertSrvBackupPrepareW

関数
証明書サービスデータベースのバックアップを開始準備する。
DLLcertadm.dll呼出規約winapi対応OSwindowsserver2003

シグネチャ

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

HRESULT CertSrvBackupPrepareW(
    LPCWSTR pwszServerName,
    DWORD grbitJet,
    CSBACKUP_TYPE dwBackupFlags,
    void** phbc
);

パラメーター

名前型方向説明
pwszServerNameLPCWSTRinオンラインバックアップの準備を行うサーバーのマシン名へのポインター。この名前は NetBIOS 名でも DNS 名でもかまいません。
grbitJetDWORDinデータベースエンジンが使用する値。この値はゼロに設定してください。
dwBackupFlagsCSBACKUP_TYPEin

バックアップの種類を指定します。次のいずれかの値を指定できます。

値 意味
CSBACKUP_TYPE_FULL
Certificate Services のデータベース、ログ、および関連ファイルをバックアップします。
CSBACKUP_TYPE_LOGS_ONLY
ログファイルのみをバックアップします。
phbcvoid**inoutCertificate Services のバックアップコンテキストハンドル (HCSBC) へのポインター。

戻り値の型: HRESULT

公式ドキュメント

Certificate Services サーバーをバックアップ操作に備えて準備するために使用します。

戻り値

戻り値は HRESULT です。S_OK は成功を示し、*phbc には、他の Certificate Services バックアップ API で使用できる HCSBC が設定されます。

解説(Remarks)

Certificate Services のバックアップを実行する前に、CertSrvBackupPrepare によって HCSBC を作成する必要があります。作成された HCSBC は、ファイルの一覧表示、オープン、読み取り、クローズ、およびログファイルの切り捨てに使用できる Certificate Services バックアップ関数に必須のパラメーターです。

メモ バックアップセッションが完了したら、 CertSrvBackupEnd を呼び出して、CertSrvBackupPrepare の呼び出しで得られた HCSBC を解放する必要があります。
Certadm.dll におけるこの関数の名前は CertSrvBackupPrepareW です。GetProcAddress を呼び出すときは、この形式の名前を使用する必要があります。また、この関数は Certbcli.h ヘッダーファイルで FNCERTSRVBACKUPPREPAREW 型として定義されています。

この呼び出しを実行するには、バックアップ特権が必要です。詳細については、 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)

各言語での呼び出し定義

// 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   // HRESULT
function 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 を使用。

関連項目

公式の関連項目
使用する型