estructura de JET_USERDEFINEDDEFAULT
Se aplica a: Windows | Windows Server
estructura de JET_USERDEFINEDDEFAULT
La estructura JET_USERDEFINEDDEFAULT se especifica junto con JET_bitColumnUserDefinedDefault para proporcionar a una nueva columna un valor predeterminado determinado mediante una devolución de llamada. Esta técnica se puede usar para implementar columnas calculadas.
Windows XP: La estructura JET_USERDEFINEDDEFAULT se introduce en Windows XP.
typedef struct tag_JET_USERDEFINEDDEFAULT {
tchar* szCallback;
unsigned char* pbUserData;
unsigned long cbUserData;
tchar* szDependantColumns;
} JET_USERDEFINEDDEFAULT;
Miembros
szCallback
Nombre de exportación de la función que implementa la devolución de llamada en formato "module!function".
La devolución de llamada persiste como parte del esquema de columna. El ejecutable del host real y el nombre de exportación de la función deben conservarse para habilitar la búsqueda de la dirección verdadera de la función en tiempo de ejecución.
El nombre del módulo es el nombre del binario host que contiene la función . El nombre de la función es el nombre de la exportación de esa función. El motor de base de datos usará estos dos fragmentos de información en tiempo de ejecución para buscar la dirección verdadera de la devolución de llamada ejecutando una llamada LoadLibrary en el nombre del módulo seguida de una llamada a GetProcAddress en el nombre de la función.
Por ejemplo, si la devolución de llamada se implementó en un archivo DLL denominado MyCallback.DLL y ese archivo DLL se almacenaron en C:\MyApplication y la función que implementa la devolución de llamada se exportaron desde el archivo DLL como UserDefinedDefaultCallback, la cadena necesaria sería "C:\MyApplication\MyCallback.DLL! UserDefinedDefaultCallback".
Nota No se admiten los caracteres incrustados "!" en la parte del módulo del nombre de devolución de llamada.
Se recomienda encarecidamente usar un nombre de devolución de llamada que no sea una función de la arquitectura del host. Por ejemplo, no use exportaciones decoradas como stdcall (UserDefinedDefaultCallback@32) porque esta convención de llamada solo se admite en máquinas x86. Si se usaba dicha devolución de llamada, la base de datos solo se podía usar en un equipo x86. En este caso, se debe usar un alias para realizar una exportación independiente de la plataforma.
Se recomienda encarecidamente usar la ruta de acceso completa del nombre del módulo que implementa la devolución de llamada. Si se usa una ruta de acceso relativa, el proceso que hospeda la base de datos podría ser susceptible a ataques por un binario no autorizado.
La aplicación solo debe pasar devoluciones de llamada de confianza al motor de base de datos. El motor de base de datos cargará el binario para comprobar su existencia cuando se cree la columna asociada. Si la ruta de acceso al binario no se valida o se sabe que es de confianza, podría atacar el proceso que hospeda la base de datos.
pbUserData
Bloque autocontenido de datos definidos por el usuario que se pasará a la devolución de llamada cuando se invoque. El bloque de datos proporcionado se conservará como parte del esquema de columna. Como resultado, el bloque de datos debe ser completamente independiente y no puede hacer referencia a ningún dato que esté fuera del ámbito de la base de datos.
Si pbUserData es cero, se omite el valor de cbUserData . En este caso, no se pasará ningún dato definido por el usuario a la devolución de llamada cuando se invoque.
cbUserData
Consulte pbUserData.
szDependantColumns
Reservado para uso futuro.
Este miembro siempre debe establecerse en NULL.
Requisitos
Requisito | Value |
---|---|
Cliente |
Requiere Windows Vista, Windows XP o Windows 2000 Professional. |
Servidor |
Requiere Windows Server 2008, Windows Server 2003 o Windows 2000 Server. |
Encabezado |
Declarado en Esent.h. |
Unicode |
Se implementa como JET_ USERDEFINEDDEFAULT_W (Unicode) y JET_ USERDEFINEDDEFAULT_A (ANSI). |