Partager via


JET_USERDEFINEDDEFAULT Structure

S’applique à : Windows | Windows Server

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 est conservé dans le schéma de colonne. L’exécutable hôte et le nom d’exportation réels de la fonction doivent être conservés pour permettre la recherche de la véritable adresse de la fonction au moment de l’exécution.

Le nom du module est le nom du 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 cette DLL a été stockée dans C:\MyApplication et que la fonction implémentant 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 fortement recommandé d’utiliser un nom de rappel qui n’est pas une fonction de l’architecture de l’hôte. Par exemple, n’utilisez pas d’exportations décorées en tant que stdcall (UserDefinedDefaultCallback@32), car cette convention d’appel est uniquement prise en charge sur les ordinateurs x86. Si un tel rappel était utilisé, la base de données ne pouvait être utilisée que sur un ordinateur x86. Un alias doit être utilisé pour effectuer 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 d’accès 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 les 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 n’est pas 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 lors de l’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 qui se trouvent en dehors de l’étendue 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 ne sera passée au rappel lors de l’appel.

cbUserData

Consultez pbUserData.

szDependantColumns

Réservé pour un usage futur.

Ce membre doit toujours être défini sur NULL.

Spécifications

Condition requise Valeur

Client

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

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