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) 。 |