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 Hostdatei und der Exportname der Funktion müssen beibehalten werden, um die Nachschlagefunktion der true-Adresse der Funktion zur Laufzeit zu aktivieren.

Der Modulname ist der Name der Host-Binärdatei, die die Funktion enthält. Der Funktionsname ist der Name des Exports für diese Funktion. Diese beiden Informationen werden vom Datenbankmodul zur Laufzeit verwendet, um die wahre Adresse des Rückrufs zu suchen, indem ein LoadLibrary-Aufruf auf dem Modulnamen ausgeführt wird, gefolgt von einem GetProcAddress-Aufruf auf dem Funktionsnamen.

Wenn der Rückruf beispielsweise in einer DLL mit dem Namen MyCallback.DLL implementiert wurde und die DLL in C:\MyApplication gespeichert wurde und die Funktion, die das Rückruf implementiert, aus der DLL als UserDefinedDefaultCallback exportiert wurde, wäre 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 z. B. keine Exporte, die als stdcall (UserDefinedDefaultCallback@32) gekennzeichnet sind, da diese Aufrufkonvention nur auf x86-Computern unterstützt wird. Wenn ein solcher Rückruf verwendet wurde, konnte die Datenbank nur auf einem x86-Computer verwendet werden. Ein Alias sollte verwendet werden, um einen plattformagnostischen Export in diesem Fall vorzunehmen.

Es wird dringend empfohlen, den vollständigen Pfad des Modulnamens zu verwenden, der den Rückruf implementiert. Wenn ein relativer Pfad verwendet wird, ist der Prozess, der die Datenbank hostt, möglicherweise anfällig für Angriffe durch eine rogue-Binärdatei.

Die Anwendung sollte nur vertrauenswürdige Rückrufe an das Datenbankmodul übergeben. Das Datenbankmodul lädt die Binärdatei, um die Existenz zu überprüfen, wenn die zugeordnete Spalte erstellt wird. Wenn der Pfad zur Binärdatei nicht überprüft oder bekannt ist, kann es den Prozess angreifen, der die Datenbank hostt.

pbUserData

Ein eigenständiger Block von benutzerdefinierten Daten, die an den Rückruf übergeben werden sollen, wenn aufgerufen wird. Der bereitgestellte Datenblock wird als Teil des Spaltenschemas beibehalten. Dadurch muss der Datenblock vollständig selbst enthalten sein und kann nicht auf Daten verweisen, die außerhalb des Bereichs der Datenbank stehen.

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

cbUserData

Siehe pbUserData.

szDependantColumns

Für die zukünftige Verwendung reserviert.

Dieses Element sollte immer auf NULL festgelegt werden.

Requirements (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).

Weitere Informationen

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF