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

JetInit3A

関数
復元情報を指定してESEインスタンスを初期化する(ANSI版)。
DLLESENT.dll文字セットANSI (-A)呼出規約winapi

シグネチャ

// ESENT.dll  (ANSI / -A)
#include <windows.h>

INT JetInit3A(
    JET_INSTANCE* pinstance,   // optional
    JET_RSTINFO_A* prstInfo,   // optional
    DWORD grbit
);

パラメーター

名前型方向説明
pinstanceJET_INSTANCE*inoutoptional初期化するインスタンスハンドルへのポインタ。NULLまたはNilで既定インスタンスを生成する。
prstInfoJET_RSTINFO_A*inoptionalリカバリ進捗状況や追加データベース指定を行うJET_RSTINFO_A構造体へのポインタ。NULL可。
grbitDWORDin初期化動作を制御するJET_bitInitオプションのビットフラグ。

戻り値の型: INT

公式ドキュメント

JetInit3 関数は、アプリケーションがデータベースファイルを使用できる状態にデータベースエンジンを移行します。エンジンは、あらかじめ初期化に向けて適切に構成されている必要があり、その構成は JetSetSystemParameter 関数を使用して行います。データベースのクラッシュ回復は、初期化処理の一部として自動的に実行される点に注意してください。

戻り値

この関数は、次のいずれかの戻りコードを伴う JET_ERR データ型を返します。発生する可能性がある Extensible Storage Engine (ESE) のエラーについて詳しくは、Extensible Storage Engine のエラー および エラー処理パラメーター を参照してください。

解説

インスタンスは、JetSetSystemParameter 関数以外から使用する前に、JetInit3 関数の呼び出しによって初期化しておく必要があります。

インスタンスは、JetInit 関数で初期化されていない場合でも、JetTerm 関数の呼び出しによって破棄されます。インスタンスは、データベースエンジンにおける回復可能性の単位です。インスタンスは、一連のデータベースファイル内のデータの整合性を保護するために使用されるすべてのファイルのライフサイクルを制御します。これらのファイルには、チェックポイントファイルとトランザクションログファイルが含まれます。JetInit3 関数が失敗した場合は、JetTerm を呼び出さないでください。ただし、JetInit3 が一度も呼び出されなかった場合、または JetInit3 が成功した場合は、JetCreateInstance2 によって作成されたすべてのインスタンスに対して JetTerm を呼び出す必要があります。

関連するデータベースの一部が存在しないログのセットに対して回復を実行しており(通常の状況では JET_errAttachedDatabaseMismatch エラーが返されます)、データベースが存在しなくてもクライアントが回復の続行を望む場合は、JET_bitReplayIgnoreMissingDB を使用して、利用可能なデータベースについて回復を続行します。

クラッシュ回復は通常、クラッシュ時と同じコンピューター上で(かつ同じ構成で)実行されるとは限らないものの、データベースの場所は通常変わりません。ただし、ファイルを別のコンピューターに移動する場合や、スナップショットバックアップを別の場所に復元する場合などの特定のシナリオでは、これは当てはまりません。JetInit3 関数では、(JET_RSTINFO 構造体および JET_RSTMAP 構造体を使用して) 以前のデータベースの場所と新しい場所との間のマッピングを指定できます。実際には、データベースファイルがその場所に存在していれば、新しい場所だけを指定すれば十分です。復元されたデータベースの場所が判明すれば、復元処理を通じてデータベースを識別するためにデータベースの署名が使用されます。以前のデータベースの場所が必要になるのは、データベースを再作成する必要がある場合だけであり、その場合は署名が判明しています。

さらに、Undo 操作の後に回復を停止する必要がある場合は、回復を停止する特定のログ位置を指定できます。これには、指定した位置が対象のログ生成に含まれているものの実際のログの末尾を超えている場合に、その特定のログ生成の末尾で停止する機能も含まれる点に注意してください。

詳しくは、JetInit のトピックの「解説」セクションを参照してください。

要件

要件 値

クライアント

Windows Vista が必要です。

サーバー

Windows Server 2008 が必要です。

ヘッダー

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

ライブラリ

ESENT.lib を使用します。

DLL

ESENT.dll が必要です。

Unicode

JetInit3W (Unicode) および JetInit3A (ANSI) として実装されています。

関連項目

Extensible Storage Engine のファイル
JET_ERR
JET_GRBIT
JET_INSTANCE
JET_RSTINFO
JET_RSTMAP
JetCreateInstance
JetInit
JetInit2
JetSetSystemParameter
リソースパラメーター

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

各言語での呼び出し定義

// ESENT.dll  (ANSI / -A)
#include <windows.h>

INT JetInit3A(
    JET_INSTANCE* pinstance,   // optional
    JET_RSTINFO_A* prstInfo,   // optional
    DWORD grbit
);
[DllImport("ESENT.dll", CharSet = CharSet.Ansi, ExactSpelling = true)]
static extern int JetInit3A(
    IntPtr pinstance,   // JET_INSTANCE* optional, in/out
    IntPtr prstInfo,   // JET_RSTINFO_A* optional
    uint grbit   // DWORD
);
<DllImport("ESENT.dll", CharSet:=CharSet.Ansi, ExactSpelling:=True)>
Public Shared Function JetInit3A(
    pinstance As IntPtr,   ' JET_INSTANCE* optional, in/out
    prstInfo As IntPtr,   ' JET_RSTINFO_A* optional
    grbit As UInteger   ' DWORD
) As Integer
End Function
' pinstance : JET_INSTANCE* optional, in/out
' prstInfo : JET_RSTINFO_A* optional
' grbit : DWORD
Declare PtrSafe Function JetInit3A Lib "esent" ( _
    ByVal pinstance As LongPtr, _
    ByVal prstInfo 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

JetInit3A = ctypes.windll.esent.JetInit3A
JetInit3A.restype = ctypes.c_int
JetInit3A.argtypes = [
    ctypes.c_void_p,  # pinstance : JET_INSTANCE* optional, in/out
    ctypes.c_void_p,  # prstInfo : JET_RSTINFO_A* optional
    wintypes.DWORD,  # grbit : DWORD
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ESENT.dll')
JetInit3A = Fiddle::Function.new(
  lib['JetInit3A'],
  [
    Fiddle::TYPE_VOIDP,  # pinstance : JET_INSTANCE* optional, in/out
    Fiddle::TYPE_VOIDP,  # prstInfo : JET_RSTINFO_A* optional
    -Fiddle::TYPE_INT,  # grbit : DWORD
  ],
  Fiddle::TYPE_INT)
#[link(name = "esent")]
extern "system" {
    fn JetInit3A(
        pinstance: *mut usize,  // JET_INSTANCE* optional, in/out
        prstInfo: *mut JET_RSTINFO_A,  // JET_RSTINFO_A* optional
        grbit: u32  // DWORD
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ESENT.dll", CharSet = CharSet.Ansi)]
public static extern int JetInit3A(IntPtr pinstance, IntPtr prstInfo, uint grbit);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ESENT_JetInit3A' -Namespace Win32 -PassThru
# $api::JetInit3A(pinstance, prstInfo, grbit)
#uselib "ESENT.dll"
#func global JetInit3A "JetInit3A" sptr, sptr, sptr
; JetInit3A varptr(pinstance), varptr(prstInfo), grbit   ; 戻り値は stat
; pinstance : JET_INSTANCE* optional, in/out -> "sptr"
; prstInfo : JET_RSTINFO_A* optional -> "sptr"
; grbit : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "ESENT.dll"
#cfunc global JetInit3A "JetInit3A" var, var, int
; res = JetInit3A(pinstance, prstInfo, grbit)
; pinstance : JET_INSTANCE* optional, in/out -> "var"
; prstInfo : JET_RSTINFO_A* optional -> "var"
; grbit : DWORD -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; INT JetInit3A(JET_INSTANCE* pinstance, JET_RSTINFO_A* prstInfo, DWORD grbit)
#uselib "ESENT.dll"
#cfunc global JetInit3A "JetInit3A" var, var, int
; res = JetInit3A(pinstance, prstInfo, grbit)
; pinstance : JET_INSTANCE* optional, in/out -> "var"
; prstInfo : JET_RSTINFO_A* optional -> "var"
; grbit : DWORD -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	esent = windows.NewLazySystemDLL("ESENT.dll")
	procJetInit3A = esent.NewProc("JetInit3A")
)

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

extern "esent" fn JetInit3A(
    pinstance: [*c]usize, // JET_INSTANCE* optional, in/out
    prstInfo: [*c]JET_RSTINFO_A, // JET_RSTINFO_A* optional
    grbit: u32 // DWORD
) callconv(std.os.windows.WINAPI) i32;
proc JetInit3A(
    pinstance: ptr uint,  # JET_INSTANCE* optional, in/out
    prstInfo: ptr JET_RSTINFO_A,  # JET_RSTINFO_A* optional
    grbit: uint32  # DWORD
): int32 {.importc: "JetInit3A", stdcall, dynlib: "ESENT.dll".}
pragma(lib, "esent");
extern(Windows)
int JetInit3A(
    size_t* pinstance,   // JET_INSTANCE* optional, in/out
    JET_RSTINFO_A* prstInfo,   // JET_RSTINFO_A* optional
    uint grbit   // DWORD
);
ccall((:JetInit3A, "ESENT.dll"), stdcall, Int32,
      (Ptr{Csize_t}, Ptr{JET_RSTINFO_A}, UInt32),
      pinstance, prstInfo, grbit)
# pinstance : JET_INSTANCE* optional, in/out -> Ptr{Csize_t}
# prstInfo : JET_RSTINFO_A* optional -> Ptr{JET_RSTINFO_A}
# grbit : DWORD -> UInt32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t JetInit3A(
    uintptr_t* pinstance,
    void* prstInfo,
    uint32_t grbit);
]]
local esent = ffi.load("esent")
-- esent.JetInit3A(pinstance, prstInfo, grbit)
-- pinstance : JET_INSTANCE* optional, in/out
-- prstInfo : JET_RSTINFO_A* optional
-- grbit : DWORD
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('ESENT.dll');
const JetInit3A = lib.func('__stdcall', 'JetInit3A', 'int32_t', ['uintptr_t *', 'void *', 'uint32_t']);
// JetInit3A(pinstance, prstInfo, grbit)
// pinstance : JET_INSTANCE* optional, in/out -> 'uintptr_t *'
// prstInfo : JET_RSTINFO_A* optional -> 'void *'
// grbit : DWORD -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("ESENT.dll", {
  JetInit3A: { parameters: ["pointer", "pointer", "u32"], result: "i32" },
});
// lib.symbols.JetInit3A(pinstance, prstInfo, grbit)
// pinstance : JET_INSTANCE* optional, in/out -> "pointer"
// prstInfo : JET_RSTINFO_A* optional -> "pointer"
// grbit : DWORD -> "u32"
// 文字列は "buffer"。ANSI(-A) は new TextEncoder() で UTF-8/ANSI バイト列(末尾に \x00)を渡す。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t JetInit3A(
    size_t* pinstance,
    void* prstInfo,
    uint32_t grbit);
C, "ESENT.dll");
// $ffi->JetInit3A(pinstance, prstInfo, grbit);
// pinstance : JET_INSTANCE* optional, in/out
// prstInfo : JET_RSTINFO_A* optional
// 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, W32APIOptions.ASCII_OPTIONS);
    int JetInit3A(
        LongByReference pinstance,   // JET_INSTANCE* optional, in/out
        Pointer prstInfo,   // JET_RSTINFO_A* optional
        int grbit   // DWORD
    );
}
@[Link("esent")]
lib LibESENT
  fun JetInit3A = JetInit3A(
    pinstance : LibC::SizeT*,   # JET_INSTANCE* optional, in/out
    prstInfo : JET_RSTINFO_A*,   # JET_RSTINFO_A* optional
    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 JetInit3ANative = Int32 Function(Pointer<UintPtr>, Pointer<Void>, Uint32);
typedef JetInit3ADart = int Function(Pointer<UintPtr>, Pointer<Void>, int);
final JetInit3A = DynamicLibrary.open('ESENT.dll')
    .lookupFunction<JetInit3ANative, JetInit3ADart>('JetInit3A');
// pinstance : JET_INSTANCE* optional, in/out -> Pointer<UintPtr>
// prstInfo : JET_RSTINFO_A* optional -> Pointer<Void>
// grbit : DWORD -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function JetInit3A(
  pinstance: Pointer;   // JET_INSTANCE* optional, in/out
  prstInfo: Pointer;   // JET_RSTINFO_A* optional
  grbit: DWORD   // DWORD
): Integer; stdcall;
  external 'ESENT.dll' name 'JetInit3A';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "JetInit3A"
  c_JetInit3A :: Ptr CUIntPtr -> Ptr () -> Word32 -> IO Int32
-- pinstance : JET_INSTANCE* optional, in/out -> Ptr CUIntPtr
-- prstInfo : JET_RSTINFO_A* optional -> Ptr ()
-- grbit : DWORD -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let jetinit3a =
  foreign "JetInit3A"
    ((ptr size_t) @-> (ptr void) @-> uint32_t @-> returning int32_t)
(* pinstance : JET_INSTANCE* optional, in/out -> (ptr size_t) *)
(* prstInfo : JET_RSTINFO_A* optional -> (ptr void) *)
(* 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 ("JetInit3A" jet-init3-a :convention :stdcall) :int32
  (pinstance :pointer)   ; JET_INSTANCE* optional, in/out
  (prst-info :pointer)   ; JET_RSTINFO_A* optional
  (grbit :uint32))   ; DWORD
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $JetInit3A = Win32::API::More->new('ESENT',
    'int JetInit3A(LPVOID pinstance, LPVOID prstInfo, DWORD grbit)');
# my $ret = $JetInit3A->Call($pinstance, $prstInfo, $grbit);
# pinstance : JET_INSTANCE* optional, in/out -> LPVOID
# prstInfo : JET_RSTINFO_A* optional -> LPVOID
# grbit : DWORD -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

文字セット違い
類似 API
使用する型