Share via


JET_USERDEFINEDDEFAULT構造体

適用対象: Windows |Windows Server

JET_USERDEFINEDDEFAULT構造体

JET_USERDEFINEDDEFAULT構造体は、コールバックを使用して決定される既定値を新しい列に与えるために、JET_bitColumnUserDefinedDefaultと組み合わせて指定されます。 この手法を使用して、計算列を実装できます。

Windows XP:JET_USERDEFINEDDEFAULT構造は、Windows XP で導入されています。

    typedef struct tag_JET_USERDEFINEDDEFAULT {
      tchar* szCallback;
      unsigned char* pbUserData;
      unsigned long cbUserData;
      tchar* szDependantColumns;
    } JET_USERDEFINEDDEFAULT;

メンバー

szCallback

コールバックを実装する関数のエクスポート名を "module!function" 形式で指定します。

コールバックは、列スキーマの一部として保持されます。 関数の実際のホスト実行可能ファイルとエクスポート名は、実行時に関数の true アドレスの検索を有効にするために保持する必要があります。

モジュール名は、 関数を含むホスト バイナリの名前です。 関数名は、その関数のエクスポートの名前です。 これらの 2 つの情報は、実行時にデータベース エンジンによって使用され、モジュール名に 対して LoadLibrary 呼び出しを実行し、関数名に 対する GetProcAddress 呼び出しを実行することで、コールバックの真のアドレスを特定します。

たとえば、コールバックが MyCallback.DLL という DLL に実装され、その DLL が C:\MyApplication に格納され、コールバックを実装する関数が DLL から UserDefinedDefaultCallback としてエクスポートされた場合、必要な文字列は "C:\MyApplication\MyCallback.DLL!UserDefinedDefaultCallback"

メモ コールバック名のモジュール部分に埋め込まれた "!" 文字はサポートされていません。

ホスト アーキテクチャの関数ではないコールバック名を使用することを強くお勧めします。 たとえば、この呼び出し規則は x86 マシンでのみサポートされているため、stdcall (UserDefinedDefaultCallback@32) として装飾されたエクスポートは使用しないでください。 このようなコールバックが使用された場合、データベースは x86 マシンでのみ使用できます。 この場合、プラットフォームに依存しないエクスポートを行うには、エイリアスを使用する必要があります。

コールバックを実装するモジュール名の完全パスを使用することを強くお勧めします。 相対パスが使用されている場合、データベースをホストしているプロセスは、不正なバイナリによる攻撃の影響を受ける可能性があります。

アプリケーションは、信頼されたコールバックのみをデータベース エンジンに渡す必要があります。 データベース エンジンはバイナリを読み込み、関連付けられた列の作成時にその存在を確認します。 バイナリへのパスが検証されていないか、信頼されていることがわかっていない場合は、データベースをホストしているプロセスが攻撃される可能性があります。

pbUserData

呼び出されたときにコールバックに渡されるユーザー定義データの自己完結型ブロック。指定されたデータ ブロックは、列スキーマの一部として保持されます。 その結果、データ ブロックは完全に自己完結型である必要があり、データベースの範囲外のデータを参照することはできません。

pbUserData が 0 の場合、cbUserData の値は無視されます。 この場合、呼び出されたときにユーザー定義データはコールバックに渡されません。

cbUserData

pbUserData に関するページを参照してください。

szDependantColumns

将来利用するために予約されています。

このメンバーは常に NULL に設定する必要があります。

必要条件

要件

Client

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

[サーバー]

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

Header

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

Unicode

JET_ USERDEFINEDDEFAULT_W (Unicode) およびJET_ USERDEFINEDDEFAULT_A (ANSI) として実装されます。

参照

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF