JET_USERDEFINEDDEFAULT 結構

適用于:Windows |Windows伺服器

JET_USERDEFINEDDEFAULT 結構

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

Windows XP:Windows XP中引進JET_USERDEFINEDDEFAULT結構。

    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 ) 和 anSI JET_ USERDEFINEDDEFAULT_A (ANSI) 。

另請參閱

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF