Win32 API 日本語リファレンス
ホーム › Storage.Jet › JetEndExternalBackupInstance2

JetEndExternalBackupInstance2

関数
オプション指定付きで外部バックアップを終了する。
DLLESENT.dll呼出規約winapi

シグネチャ

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

INT JetEndExternalBackupInstance2(
    JET_INSTANCE instance,
    DWORD grbit
);

パラメーター

名前型方向説明
instanceJET_INSTANCEin外部バックアップを終了する対象インスタンスのJET_INSTANCEハンドル。
grbitDWORDin終了動作を制御するビットフラグ。JET_bitBackupEndNormalで正常終了、JET_bitBackupEndAbortで中止を示す。

戻り値の型: INT

公式ドキュメント

JetEndExternalBackupInstance2 関数は、外部バックアップセッションを終了します。この API は、オンライン (VSS ベースではない) バックアップを正常に実行するために呼び出す必要がある一連の API のうち、最後の API です。

戻り値

この関数は JET_ERR データ型を返し、その値は次の戻り値コードのいずれかです。発生し得る ESE エラーの詳細については、「Extensible Storage Engine Errors」および「Error Handling Parameters」を参照してください。

戻り値コード

説明

JET_errSuccess

操作は正常に完了しました。

JET_errBackupAbortByCaller

Windows XP: この戻り値は Windows XP で導入されました。

呼び出し元が、JetStopBackup によって意図を通知することなく、バックアップシーケンスの途中でバックアップを終了しました。このエラーは、Windows Server 2003 以降におけるバックアップクライアントのバグによって生じます。Windows XP では、外部バックアップシーケンスを意図的に終了した場合にこのエラーが返されます。

JET_errBackupAbortByServer

Windows Server 2003: この戻り値は Windows Server 2003 で導入されました。

JetStopBackup の呼び出しによって現在の外部バックアップが中止されたため、操作は失敗しました。

JET_errClientRequestToStopJetService

JetStopService の呼び出しによって、セッションに関連付けられているインスタンス上のすべての処理が停止したため、操作を完了できません。

JET_errInstanceUnavailable

Windows XP: この戻り値は Windows XP で導入されました。

セッションに関連付けられているインスタンスで、データの整合性を保護するためにすべてのデータへのアクセスを取り消す必要がある致命的なエラーが発生したため、操作を完了できません。

JET_errNoBackup

外部バックアップが実行されていないため、操作は失敗しました。

JET_errNotInitialized

セッションに関連付けられているインスタンスがまだ初期化されていないため、操作を完了できません。

JET_errRestoreInProgress

セッションに関連付けられているインスタンスで復元操作が実行中であるため、操作を完了できません。

JET_errRunningInMultiInstanceMode

実際には複数のインスタンスが既に存在しているにもかかわらず、インスタンスを 1 つだけサポートするレガシーモード (Windows 2000 互換モード) でエンジンを使用しようとしたため、操作は失敗しました。

JET_errTermInProgress

セッションに関連付けられているインスタンスがシャットダウン処理中であるため、操作を完了できません。

関数が成功した場合、外部バックアップは成功しています。成功は、バックアップの種類 (JetBeginExternalBackup で指定) に応じた適切なすべてのファイル (データベースやログなど) がバックアップエンジンから取得されたことを示します。バックアップされたファイルは、ハードリカバリー (JetExternalRestore) によって復旧できます。

この関数が失敗した場合、通常は外部バックアップが終了します。失敗は、クライアントまたはアプリケーションの使用方法の誤りによってバックアップが無効であることを意味します。バックアップシーケンスが成功したことを確認するために、この API の戻り値を確認することが重要です。

解説

イベントをログに記録するようにエンジンが構成されている場合、外部バックアップの結果を示すイベントが記録されます。

バックアップシーケンスが順序どおりに実行されず、JetEndExternalBackup の呼び出しが成功して完了しなかった場合、以降の増分バックアップにアプリケーションが想定していたよりも多くのデータが含まれる可能性があります。

外部バックアップ API のシーケンスの詳細については、「JetBeginExternalBackup」を参照してください。

Windows Vista より前では、ログの切り捨てが行われなかった場合、エンジンはそのバックアップをコピーバックアップと見なしていました。しかし、そのバックアップは、切り捨てが行われなかった通常のバックアップである可能性もあります (たとえば、切り離されたデータベースが存在する場合など)。JET_bitBackupTruncateDone オプションを使用すると、このことをエンジンに通知し、データベースヘッダーの適切な変更を行わせることができます。

要件

要件 値

クライアント

Windows Vista または Windows XP が必要です。

サーバー

Windows Server 2008 または Windows Server 2003 が必要です。

ヘッダー

Esent.h で宣言されています。

ライブラリ

ESENT.lib を使用します。

DLL

ESENT.dll が必要です。

関連項目

Error Handling Parameters
Extensible Storage Engine Errors
JET_ERR
JET_GRBIT
JetAttachDatabase
JetBeginExternalBackup
JetBeginExternalBackupInstance
JetCloseFile
JetExternalRestore
JetGetAttachInfo
JetGetLogInfo
JET_INSTANCE
JetOpenFile
JetReadFile
JetStopBackup
JetStopService
JetTruncateLog

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)

各言語での呼び出し定義

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

INT JetEndExternalBackupInstance2(
    JET_INSTANCE instance,
    DWORD grbit
);
[DllImport("ESENT.dll", ExactSpelling = true)]
static extern int JetEndExternalBackupInstance2(
    UIntPtr instance,   // JET_INSTANCE
    uint grbit   // DWORD
);
<DllImport("ESENT.dll", ExactSpelling:=True)>
Public Shared Function JetEndExternalBackupInstance2(
    instance As UIntPtr,   ' JET_INSTANCE
    grbit As UInteger   ' DWORD
) As Integer
End Function
' instance : JET_INSTANCE
' grbit : DWORD
Declare PtrSafe Function JetEndExternalBackupInstance2 Lib "esent" ( _
    ByVal instance As LongPtr, _
    ByVal grbit As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

JetEndExternalBackupInstance2 = ctypes.windll.esent.JetEndExternalBackupInstance2
JetEndExternalBackupInstance2.restype = ctypes.c_int
JetEndExternalBackupInstance2.argtypes = [
    ctypes.c_size_t,  # instance : JET_INSTANCE
    wintypes.DWORD,  # grbit : DWORD
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ESENT.dll')
JetEndExternalBackupInstance2 = Fiddle::Function.new(
  lib['JetEndExternalBackupInstance2'],
  [
    Fiddle::TYPE_UINTPTR_T,  # instance : JET_INSTANCE
    -Fiddle::TYPE_INT,  # grbit : DWORD
  ],
  Fiddle::TYPE_INT)
#[link(name = "esent")]
extern "system" {
    fn JetEndExternalBackupInstance2(
        instance: usize,  // JET_INSTANCE
        grbit: u32  // DWORD
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ESENT.dll")]
public static extern int JetEndExternalBackupInstance2(UIntPtr instance, uint grbit);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ESENT_JetEndExternalBackupInstance2' -Namespace Win32 -PassThru
# $api::JetEndExternalBackupInstance2(instance, grbit)
#uselib "ESENT.dll"
#func global JetEndExternalBackupInstance2 "JetEndExternalBackupInstance2" sptr, sptr
; JetEndExternalBackupInstance2 instance, grbit   ; 戻り値は stat
; instance : JET_INSTANCE -> "sptr"
; grbit : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "ESENT.dll"
#cfunc global JetEndExternalBackupInstance2 "JetEndExternalBackupInstance2" sptr, int
; res = JetEndExternalBackupInstance2(instance, grbit)
; instance : JET_INSTANCE -> "sptr"
; grbit : DWORD -> "int"
; INT JetEndExternalBackupInstance2(JET_INSTANCE instance, DWORD grbit)
#uselib "ESENT.dll"
#cfunc global JetEndExternalBackupInstance2 "JetEndExternalBackupInstance2" intptr, int
; res = JetEndExternalBackupInstance2(instance, grbit)
; instance : JET_INSTANCE -> "intptr"
; grbit : DWORD -> "int"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	esent = windows.NewLazySystemDLL("ESENT.dll")
	procJetEndExternalBackupInstance2 = esent.NewProc("JetEndExternalBackupInstance2")
)

// instance (JET_INSTANCE), grbit (DWORD)
r1, _, err := procJetEndExternalBackupInstance2.Call(
	uintptr(instance),
	uintptr(grbit),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // INT
function JetEndExternalBackupInstance2(
  instance: NativeUInt;   // JET_INSTANCE
  grbit: DWORD   // DWORD
): Integer; stdcall;
  external 'ESENT.dll' name 'JetEndExternalBackupInstance2';
result := DllCall("ESENT\JetEndExternalBackupInstance2"
    , "UPtr", instance   ; JET_INSTANCE
    , "UInt", grbit   ; DWORD
    , "Int")   ; return: INT
●JetEndExternalBackupInstance2(instance, grbit) = DLL("ESENT.dll", "int JetEndExternalBackupInstance2(int, dword)")
# 呼び出し: JetEndExternalBackupInstance2(instance, grbit)
# instance : JET_INSTANCE -> "int"
# grbit : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "esent" fn JetEndExternalBackupInstance2(
    instance: usize, // JET_INSTANCE
    grbit: u32 // DWORD
) callconv(std.os.windows.WINAPI) i32;
proc JetEndExternalBackupInstance2(
    instance: uint,  # JET_INSTANCE
    grbit: uint32  # DWORD
): int32 {.importc: "JetEndExternalBackupInstance2", stdcall, dynlib: "ESENT.dll".}
pragma(lib, "esent");
extern(Windows)
int JetEndExternalBackupInstance2(
    size_t instance,   // JET_INSTANCE
    uint grbit   // DWORD
);
ccall((:JetEndExternalBackupInstance2, "ESENT.dll"), stdcall, Int32,
      (Csize_t, UInt32),
      instance, grbit)
# instance : JET_INSTANCE -> Csize_t
# grbit : DWORD -> UInt32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t JetEndExternalBackupInstance2(
    uintptr_t instance,
    uint32_t grbit);
]]
local esent = ffi.load("esent")
-- esent.JetEndExternalBackupInstance2(instance, grbit)
-- instance : JET_INSTANCE
-- grbit : DWORD
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('ESENT.dll');
const JetEndExternalBackupInstance2 = lib.func('__stdcall', 'JetEndExternalBackupInstance2', 'int32_t', ['uintptr_t', 'uint32_t']);
// JetEndExternalBackupInstance2(instance, grbit)
// instance : JET_INSTANCE -> 'uintptr_t'
// grbit : DWORD -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("ESENT.dll", {
  JetEndExternalBackupInstance2: { parameters: ["usize", "u32"], result: "i32" },
});
// lib.symbols.JetEndExternalBackupInstance2(instance, grbit)
// instance : JET_INSTANCE -> "usize"
// grbit : DWORD -> "u32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t JetEndExternalBackupInstance2(
    size_t instance,
    uint32_t grbit);
C, "ESENT.dll");
// $ffi->JetEndExternalBackupInstance2(instance, grbit);
// instance : JET_INSTANCE
// grbit : DWORD
// 構造体/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 Esent extends StdCallLibrary {
    Esent INSTANCE = Native.load("esent", Esent.class);
    int JetEndExternalBackupInstance2(
        long instance,   // JET_INSTANCE
        int grbit   // DWORD
    );
}
@[Link("esent")]
lib LibESENT
  fun JetEndExternalBackupInstance2 = JetEndExternalBackupInstance2(
    instance : LibC::SizeT,   # JET_INSTANCE
    grbit : UInt32   # DWORD
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef JetEndExternalBackupInstance2Native = Int32 Function(UintPtr, Uint32);
typedef JetEndExternalBackupInstance2Dart = int Function(int, int);
final JetEndExternalBackupInstance2 = DynamicLibrary.open('ESENT.dll')
    .lookupFunction<JetEndExternalBackupInstance2Native, JetEndExternalBackupInstance2Dart>('JetEndExternalBackupInstance2');
// instance : JET_INSTANCE -> UintPtr
// grbit : DWORD -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function JetEndExternalBackupInstance2(
  instance: NativeUInt;   // JET_INSTANCE
  grbit: DWORD   // DWORD
): Integer; stdcall;
  external 'ESENT.dll' name 'JetEndExternalBackupInstance2';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "JetEndExternalBackupInstance2"
  c_JetEndExternalBackupInstance2 :: CUIntPtr -> Word32 -> IO Int32
-- instance : JET_INSTANCE -> CUIntPtr
-- grbit : DWORD -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let jetendexternalbackupinstance2 =
  foreign "JetEndExternalBackupInstance2"
    (size_t @-> uint32_t @-> returning int32_t)
(* instance : JET_INSTANCE -> size_t *)
(* grbit : DWORD -> uint32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library esent (t "ESENT.dll"))
(cffi:use-foreign-library esent)

(cffi:defcfun ("JetEndExternalBackupInstance2" jet-end-external-backup-instance2 :convention :stdcall) :int32
  (instance :uint64)   ; JET_INSTANCE
  (grbit :uint32))   ; DWORD
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $JetEndExternalBackupInstance2 = Win32::API::More->new('ESENT',
    'int JetEndExternalBackupInstance2(WPARAM instance, DWORD grbit)');
# my $ret = $JetEndExternalBackupInstance2->Call($instance, $grbit);
# instance : JET_INSTANCE -> WPARAM
# grbit : DWORD -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

類似 API