Struttura JET_USERDEFINEDDEFAULT
Si applica a: Windows | Windows Server
Struttura JET_USERDEFINEDDEFAULT
La struttura JET_USERDEFINEDDEFAULT viene specificata in combinazione con JET_bitColumnUserDefinedDefault per assegnare a una nuova colonna un valore predefinito determinato utilizzando un callback. Questa tecnica può essere usata per implementare colonne calcolate.
Windows XP: La struttura JET_USERDEFINEDDEFAULT è stata introdotta in Windows XP.
typedef struct tag_JET_USERDEFINEDDEFAULT {
tchar* szCallback;
unsigned char* pbUserData;
unsigned long cbUserData;
tchar* szDependantColumns;
} JET_USERDEFINEDDEFAULT;
Membri
szCallback
Nome di esportazione della funzione che implementa il callback in formato "module!function".
Il callback viene mantenuto come parte dello schema della colonna. L'eseguibile host effettivo e il nome di esportazione della funzione devono essere mantenuti per abilitare la ricerca dell'indirizzo true della funzione in fase di esecuzione.
Il nome del modulo è il nome del file binario host che contiene la funzione. Il nome della funzione è il nome dell'esportazione per tale funzione. Queste due informazioni verranno usate dal motore di database in fase di esecuzione per individuare il vero indirizzo del callback eseguendo una chiamata LoadLibrary sul nome del modulo seguito da una chiamata GetProcAddress sul nome della funzione.
Ad esempio, se il callback è stato implementato in una DLL denominata MyCallback.DLL e tale DLL è stata archiviata in C:\MyApplication e la funzione che implementa il callback è stata esportata dalla DLL come UserDefinedDefaultCallback, la stringa richiesta sarà "C:\MyApplication\MyCallback.DLL! UserDefinedDefaultCallback".
Nota I caratteri "!" incorporati nella parte del modulo del nome di callback non sono supportati.
È consigliabile usare un nome di callback che non è una funzione dell'architettura host. Ad esempio, non usare esportazioni decorate come stdcall (UserDefinedDefaultCallback@32) perché questa convenzione di chiamata è supportata solo nei computer x86. Se tale callback è stato usato, il database può essere usato solo in un computer x86. In questo caso, è necessario usare un alias per eseguire un'esportazione indipendente dalla piattaforma.
È consigliabile usare il percorso completo del nome del modulo che implementa il callback. Se viene usato un percorso relativo, il processo che ospita il database potrebbe essere soggetto ad attacchi da un file binario non autorizzato.
L'applicazione deve passare solo callback attendibili al motore di database. Il motore di database caricherà il file binario per verificarne l'esistenza quando viene creata la colonna associata. Se il percorso del file binario non viene convalidato o considerato attendibile, potrebbe attaccare il processo che ospita il database.
pbUserData
Blocco autonomo di dati definiti dall'utente da passare al callback quando viene richiamato. Il blocco di dati fornito verrà mantenuto come parte dello schema della colonna. Di conseguenza, il blocco di dati deve essere completamente indipendente e non può fare riferimento a dati esterni all'ambito del database.
Se pbUserData è zero, il valore di cbUserData viene ignorato. In questo caso, al callback non verranno passati dati definiti dall'utente quando viene richiamato.
cbUserData
Vedere pbUserData.
szDependantColumns
Riservato per utilizzi futuri.
Questo membro deve essere sempre impostato su NULL.
Requisiti
Requisito | Valore |
---|---|
Client |
Richiede Windows Vista, Windows XP o Windows 2000 Professional. |
Server |
Richiede Windows Server 2008, Windows Server 2003 o Windows 2000 Server. |
Intestazione |
Dichiarato in Esent.h. |
Unicode |
Implementato come JET_ USERDEFINEDDEFAULT_W (Unicode) e JET_ USERDEFINEDDEFAULT_A (ANSI). |