Estrutura JET_USERDEFINEDDEFAULT
Aplica-se a: Windows | Windows Server
Estrutura JET_USERDEFINEDDEFAULT
A estrutura JET_USERDEFINEDDEFAULT é especificada em conjunto com JET_bitColumnUserDefinedDefault para dar a uma nova coluna um valor padrão que é determinado usando um retorno de chamada. Essa técnica pode ser usada para implementar colunas computadas.
Windows XP: A estrutura JET_USERDEFINEDDEFAULT é introduzida no Windows XP.
typedef struct tag_JET_USERDEFINEDDEFAULT {
tchar* szCallback;
unsigned char* pbUserData;
unsigned long cbUserData;
tchar* szDependantColumns;
} JET_USERDEFINEDDEFAULT;
Membros
szCallback
O nome de exportação da função que implementa o retorno de chamada no formato "module!function".
O retorno de chamada persiste como parte do esquema de coluna. O executável de host real e o nome de exportação da função devem persistir para habilitar a pesquisa do endereço verdadeiro da função em tempo de execução.
O nome do módulo é o nome do binário do host que contém a função . O nome da função é o nome da exportação para essa função. Essas duas informações serão usadas pelo mecanismo de banco de dados em runtime para localizar o endereço verdadeiro do retorno de chamada executando uma chamada LoadLibrary no nome do módulo seguido por uma chamada GetProcAddress no nome da função.
Por exemplo, se o retorno de chamada foi implementado em uma DLL chamada MyCallback.DLL e essa DLL foi armazenada em C:\MyApplication e a função que implementa o retorno de chamada foi exportada da DLL como UserDefinedDefaultCallback, a cadeia de caracteres necessária seria "C:\MyApplication\MyCallback.DLL! UserDefinedDefaultCallback".
Nota Não há suporte para caracteres "!" inseridos na parte do módulo do nome do retorno de chamada.
É altamente recomendável que você use um nome de retorno de chamada que não seja uma função da arquitetura do host. Por exemplo, não use exportações decoradas como stdcall (UserDefinedDefaultCallback@32) porque essa convenção de chamada só tem suporte em computadores x86. Se esse retorno de chamada fosse usado, o banco de dados só poderia ser usado em um computador x86. Um alias deve ser usado para fazer uma exportação independente de plataforma nesse caso.
É altamente recomendável que você use o caminho completo do nome do módulo que está implementando o retorno de chamada. Se um caminho relativo for usado, o processo que hospeda o banco de dados poderá ser suscetível a ataques por um binário não autorizado.
O aplicativo deve passar apenas retornos de chamada confiáveis para o mecanismo de banco de dados. O mecanismo de banco de dados carregará o binário para verificar sua existência quando a coluna associada for criada. Se o caminho para o binário não for validado ou conhecido como confiável, ele poderá atacar o processo que está hospedando o banco de dados.
pbUserData
Um bloco autocontido de dados definidos pelo usuário a ser passado para o retorno de chamada quando invocado. O bloco de dados fornecido persistirá como parte do esquema de coluna. Como resultado, o bloco de dados deve ser totalmente independente e não pode se referir a nenhum dado que esteja fora do escopo do banco de dados.
Se pbUserData for zero, o valor de cbUserData será ignorado. Nesse caso, nenhum dado definido pelo usuário será passado para o retorno de chamada quando invocado.
cbUserData
Consulte pbUserData.
szDependantColumns
Reservado para uso futuro.
Esse membro sempre deve ser definido como NULL.
Requisitos
Requisito | Valor |
---|---|
Cliente |
Requer Windows Vista, Windows XP ou Windows 2000 Professional. |
Servidor |
Requer o Windows Server 2008, o Windows Server 2003 ou o Windows 2000 Server. |
Cabeçalho |
Declarado em Esent.h. |
Unicode |
Implementado como JET_ USERDEFINEDDEFAULT_W (Unicode) e ANSI ( JET_ USERDEFINEDDEFAULT_A ). |