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 Modulfunktionsformat ! 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 nach der tatsächlichen 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 echte 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, wäre die erforderliche Zeichenfolge \ "C: \ MyApplication \MyCallback.DLL! UserDefinedDefaultCallback".

Hinweis: Embedded " ! " " -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 ( ) verziert sind, da diese Aufrufkonvention nur auf UserDefinedDefaultCallback@32 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 implementieren soll. Wenn ein relativer Pfad verwendet wird, kann der Prozess, der die Datenbank hosten, 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 geladen die Binärdatei, um zu überprüfen, ob sie vorhanden ist, wenn die zugeordnete Spalte erstellt wird. Wenn der Pfad zur Binärdatei nicht überprüft wird oder als vertrauenswürdig eingestuft wird, kann er den Prozess angreifen, der die Datenbank hosten soll.

pbUserData

Ein eigenständiger Block von benutzerdefinierten Daten, die beim Aufrufen an den Rückruf übergeben werden sollen. Der bereitgestellte Datenblock wird als Teil des Spaltenschemas beibehalten. Daher muss der Datenblock vollständig in sich geschlossen sein und darf nicht auf Daten verweisen, die außerhalb des Gültigkeitsbereichs der Datenbank sind.

Wenn pbUserData 0 (null) ist, wird der Wert von cbUserData ignoriert. In diesem Fall werden keine benutzerdefinierten Daten an den Rückruf übergeben, wenn sie aufgerufen werden.

cbUserData

Weitere Informationen finden Sie unter pbUserData.

szDependantColumns

Für die zukünftige Verwendung reserviert.

Dieser Member sollte immer auf NULL festgelegt werden.

Anforderungen

| | |

Client

|

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

| |

Server

|

Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server.

| |

Header

|

Wird in Esent.h deklariert.

| |

Unicode

|

Wird als JET_ USERDEFINEDDEFAULT_W (Unicode) und JET_ USERDEFINEDDEFAULT_A (ANSI) implementiert.

|

Weitere Informationen

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF