JET_USERDEFINEDDEFAULT Structure

S’applique à : Windows | serveur Windows

JET_USERDEFINEDDEFAULT Structure

La structure JET_USERDEFINEDDEFAULT est spécifiée conjointement avec JET_bitColumnUserDefinedDefault pour donner à une nouvelle colonne une valeur par défaut déterminée à l’aide d’un rappel. Cette technique peut être utilisée pour implémenter des colonnes calculées.

Windows XP : la structure JET_USERDEFINEDDEFAULT est introduite dans Windows XP.

    typedef struct tag_JET_USERDEFINEDDEFAULT {
      tchar* szCallback;
      unsigned char* pbUserData;
      unsigned long cbUserData;
      tchar* szDependantColumns;
    } JET_USERDEFINEDDEFAULT;

Membres

szCallback

Nom d’exportation de la fonction qui implémente le rappel au format « module!function ».

Le rappel persiste dans le cadre du schéma de colonne. L’exécutable de l’hôte réel et le nom d’exportation de la fonction doivent persister pour activer la recherche de la véritable adresse de la fonction au moment de l’exécution.

Le nom du module est le nom du fichier binaire hôte qui contient la fonction. Le nom de la fonction est le nom de l’exportation pour cette fonction. Ces deux informations seront utilisées par le moteur de base de données au moment de l’exécution pour localiser la véritable adresse du rappel en exécutant un appel LoadLibrary sur le nom du module suivi d’un appel GetProcAddress sur le nom de la fonction.

Par exemple, si le rappel a été implémenté dans une DLL appelée MyCallback.DLL et que la DLL a été stockée dans C:\MyApplication et que la fonction qui implémente le rappel a été exportée à partir de la DLL en tant que UserDefinedDefaultCallback, la chaîne requise serait « C:\MyApplication\MyCallback.DLL ! UserDefinedDefaultCallback ».

Note Les caractères incorporés « ! » » dans la partie module du nom de rappel ne sont pas pris en charge.

Il est vivement recommandé d’utiliser un nom de rappel qui n’est pas une fonction de l’architecture hôte. Par exemple, n’utilisez pas d’exportations décorées en tant que stdcall (UserDefinedDefaultCallback@32), car cette convention d’appel n’est prise en charge que sur les machines x86. Si un tel rappel a été utilisé, la base de données ne peut être utilisée que sur un ordinateur x86. Un alias doit être utilisé pour créer une exportation indépendante de la plateforme dans ce cas.

Il est vivement recommandé d’utiliser le chemin d’accès complet du nom du module qui implémente le rappel. Si un chemin relatif est utilisé, le processus qui héberge la base de données peut être susceptible d’être attaqué par un binaire non autorisé.

L’application doit transmettre uniquement des rappels approuvés au moteur de base de données. Le moteur de base de données charge le fichier binaire pour vérifier son existence lors de la création de la colonne associée. Si le chemin d’accès au fichier binaire n’est pas validé ou connu pour être approuvé, il peut attaquer le processus qui héberge la base de données.

pbUserData

Bloc autonome de données définies par l’utilisateur à passer au rappel lorsqu’il est appelé. Le bloc de données fourni est conservé dans le cadre du schéma de colonne. Par conséquent, le bloc de données doit être entièrement autonome et ne peut pas faire référence à des données extérieures à la portée de la base de données.

Si pbUserData est égal à zéro, la valeur de cbUserData est ignorée. Dans ce cas, aucune donnée définie par l’utilisateur n’est transmise au rappel lorsqu’elle est appelée.

cbUserData

Voir pbUserData.

szDependantColumns

Réservé pour un usage futur.

Ce membre doit toujours avoir la valeur NULL.

Spécifications

Condition requise Valeur

Client

Nécessite Windows Vista, Windows XP ou Windows 2000 Professional.

Serveur

Nécessite Windows Server 2008, Windows Server 2003 ou Windows 2000 Server.

En-tête

Déclaré dans Esent.h.

Unicode

Implémenté en tant que JET_ USERDEFINEDDEFAULT_W (Unicode) et JET_ USERDEFINEDDEFAULT_A (ANSI).

Voir aussi

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF