JET_USERDEFINEDDEFAULT 結構

適用于: Windows |Windows Server

JET_USERDEFINEDDEFAULT 結構

JET_USERDEFINEDDEFAULT結構會與JET_bitColumnUserDefinedDefault一起指定,以提供使用回呼決定的新資料行預設值。 這項技術可用來實作計算資料行。

Windowsxp:JET_USERDEFINEDDEFAULT結構是在 Windows XP 中引進。

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

成員

szCallback

以 「module!function」 格式實作回呼的函式匯出名稱。

回呼會保存為數據行架構的一部分。 函式的實際主機可執行檔和匯出名稱必須保存,才能在執行時間查閱函式的實際位址。

模組名稱是包含函式的主機二進位檔名稱。 函式名稱是該函式的匯出名稱。 這兩項資訊將由資料庫引擎在執行時間使用,藉由在模組名稱上執行 LoadLibrary 呼叫,然後在函式名稱上執行 GetProcAddress 呼叫,以找出回呼的實際位址。

例如,如果在名為 MyCallback.DLL 的 DLL 中實作回呼,且該 DLL 儲存在 C:\MyApplication 中,而實作回呼的函式是從 DLL 匯出為 UserDefinedDefaultCallback,則所需的字串會是 「C:\MyApplication\MyCallback.DLL!UserDefinedDefaultCallback」。

注意 不支援回呼名稱模組部分中的內嵌 「!」 字元。

強烈建議您使用不是主機架構功能的回呼名稱。 例如,請勿使用裝飾為 stdcall 的匯出 (UserDefinedDefaultCallback@32) ,因為 x86 電腦上僅支援此呼叫慣例。 如果使用這類回呼,則資料庫只能在 x86 電腦上使用。 在此案例中,應該使用別名來建立與平臺無關的匯出。

強烈建議您使用實作回呼之模組名稱的完整路徑。 如果使用相對路徑,裝載資料庫的進程可能會受到惡意二進位檔的攻擊。

應用程式應該只會將信任的回呼傳遞至資料庫引擎。 資料庫引擎會載入二進位檔,以在建立相關聯的資料行時驗證其是否存在。 如果未驗證或已知信任二進位檔的路徑,它可能會攻擊裝載資料庫的進程。

pbUserData

叫用時要傳遞至回呼的使用者定義資料獨立區塊。提供的資料區塊會保存為數據行架構的一部分。 因此,資料區塊必須完全獨立,而且無法參考資料庫範圍以外的任何資料。

如果 pbUserData 為零,則會忽略 cbUserData 的值。 在此情況下,在叫用時,不會將使用者定義的資料傳遞至回呼。

cbUserData

請參閱 pbUserData

szDependantColumns

保留供未來使用。

此成員應一律設定為 Null。

規格需求

需求

用戶端

需要 Windows Vista、Windows XP 或 Windows 2000 Professional。

Server

需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

標頭

在 Esent.h 中宣告。

Unicode

實作為JET_ USERDEFINEDDEFAULT_W (Unicode ) 和 JET_ USERDEFINEDDEFAULT_A (ANSI) 。

另請參閱

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF