JET_USERDEFINEDDEFAULT-Struktur
Gilt für: Windows | Windows Server
JET_USERDEFINEDDEFAULT-Struktur
Die JET_USERDEFINEDDEFAULT-Struktur wird in Verbindung mit JET_bitColumnUserDefinedDefault angegeben, um einer neuen Spalte einen Standardwert zu geben, der mithilfe eines Rückrufs bestimmt wird. Diese Technik kann verwendet werden, um berechnete Spalten zu implementieren.
Windows XP: Die JET_USERDEFINEDDEFAULT-Struktur wird in Windows XP eingeführt.
typedef struct tag_JET_USERDEFINEDDEFAULT {
tchar* szCallback;
unsigned char* pbUserData;
unsigned long cbUserData;
tchar* szDependantColumns;
} JET_USERDEFINEDDEFAULT;
Member
szCallback
Der Exportname der Funktion, die den Rückruf im Format "module!function" implementiert.
Der Rückruf wird als Teil des Spaltenschemas beibehalten. Die tatsächliche ausführbare Hostdatei und der Exportname der Funktion müssen beibehalten werden, um die Suche der wahren Adresse der Funktion zur Laufzeit zu ermöglichen.
Der Modulname ist der Name der Hostbinärdatei, die die Funktion enthält. Der Funktionsname ist der Name des Exports für diese Funktion. Diese beiden Informationen werden von der Datenbank-Engine zur Laufzeit verwendet, um die wahre Adresse des Rückrufs zu ermitteln, indem ein LoadLibrary-Aufruf für den Modulnamen gefolgt von einem GetProcAddress-Aufruf für den Funktionsnamen ausgeführt wird.
Wenn der Rückruf beispielsweise in einer DLL namens MyCallback.DLL implementiert wurde und diese DLL in C:\MyApplication gespeichert wurde und die Funktion, die den Rückruf implementiert, aus der DLL als UserDefinedDefaultCallback exportiert wurde, lautet die erforderliche Zeichenfolge "C:\MyApplication\MyCallback.DLL! UserDefinedDefaultCallback".
Hinweis Eingebettete "!"-Zeichen im Modulteil des Rückrufnamens werden nicht unterstützt.
Es wird dringend empfohlen, einen Rückrufnamen zu verwenden, der keine Funktion der Hostarchitektur ist. Verwenden Sie beispielsweise keine Exporte, die als stdcall (UserDefinedDefaultCallback@32) versehen sind, da diese Aufrufkonvention nur auf x86-Computern unterstützt wird. Wenn ein solcher Rückruf verwendet wird, kann die Datenbank nur auf einem x86-Computer verwendet werden. In diesem Fall sollte ein Alias verwendet werden, um einen plattformunabhängigen Export zu erstellen.
Es wird dringend empfohlen, den vollständigen Pfad des Modulnamens zu verwenden, der den Rückruf implementiert. Wenn ein relativer Pfad verwendet wird, kann der Prozess, der die Datenbank hostt, anfällig für Angriffe durch eine nicht autorisierte Binärdatei sein.
Die Anwendung sollte nur vertrauenswürdige Rückrufe an die Datenbank-Engine übergeben. Die Datenbank-Engine lädt die Binärdatei, um ihre Existenz zu überprüfen, wenn die zugeordnete Spalte erstellt wird. Wenn der Pfad zur Binärdatei nicht überprüft oder als vertrauenswürdig bekannt ist, kann er den Prozess angreifen, der die Datenbank hostt.
pbUserData
Ein eigenständiger Block von benutzerdefinierten Daten, die beim Aufruf an den Rückruf übergeben werden sollen. Der bereitgestellte Datenblock wird als Teil des Spaltenschemas beibehalten. Daher muss der Datenblock vollständig eigenständig sein und kann nicht auf Daten verweisen, die außerhalb des Bereichs der Datenbank sind.
Wenn pbUserData null ist, wird der Wert von cbUserData ignoriert. In diesem Fall werden beim Aufrufen keine benutzerdefinierten Daten an den Rückruf übergeben.
cbUserData
Weitere Informationen finden Sie unter pbUserData.
szDependantColumns
Für die zukünftige Verwendung reserviert.
Dieser Member sollte immer auf NULL festgelegt werden.
Anforderungen
Anforderung | Wert |
---|---|
Client |
Erfordert Windows Vista, Windows XP oder Windows 2000 Professional. |
Server |
Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server. |
Kopfzeile |
Deklariert in Esent.h. |
Unicode |
Implementiert als JET_ USERDEFINEDDEFAULT_W (Unicode) und JET_ USERDEFINEDDEFAULT_A (ANSI). |