Compartilhar via


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 ).

Consulte Também

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF