JET_USERDEFINEDDEFAULT 结构

适用于: Windows |Windows服务器

JET_USERDEFINEDDEFAULT 结构

JET_USERDEFINEDDEFAULT 结构与 JET_bitColumnUserDefinedDefault一起指定,以向新列提供使用回调确定的默认值。 此方法可用于实现计算列。

Windows XP: JET_USERDEFINEDDEFAULT XP 中引入了 Windows 结构。

    typedef struct tag_JET_USERDEFINEDDEFAULT {
      tchar* szCallback;
      unsigned char* pbUserData;
      unsigned long cbUserData;
      tchar* szDependantColumns;
    } JET_USERDEFINEDDEFAULT;

成员

szCallback

以"module function"格式实现回调的函数的 ! 导出名称。

回调作为列架构的一部分保留。 必须保留函数的实际主机可执行文件和导出名称,以便运行时能够查找该函数的真实地址。

模块名称是包含函数的主机二进制文件的名称。 函数名称是该函数的导出名称。 数据库引擎将在运行时使用这两条信息,通过针对模块名称执行 LoadLibrary 调用,然后对函数名称执行 GetProcAddress 调用来查找回调的真实地址。

例如,如果在名为 MyCallback.DLL 的 DLL 中实现回调,并且该 DLL 存储在 C:MyApplication 中,并且实现回调的函数作为 \ UserDefinedDefaultCallback 从 DLL 导出,则所需的字符串为"C: \ MyApplication \MyCallback.DLL! UserDefinedDefaultCallback"。

注意 嵌入式 " ! " 不支持回调名称的模块部分中的字符。

强烈建议使用不是主机体系结构函数的回调名称。 例如,请勿使用修饰为 stdcall () ,因为此调用约定仅在 UserDefinedDefaultCallback@32 x86 计算机上受支持。 如果使用了此类回调,则数据库只能在 x86 计算机上使用。 在这种情况下,应该使用别名进行与平台无关的导出。

强烈建议使用实现回调的模块名称的完整路径。 如果使用相对路径,则承载数据库的进程可能容易受到恶意二进制文件的攻击。

应用程序应仅将受信任的回调传递给数据库引擎。 创建关联列时,数据库引擎将加载二进制文件以验证其是否存在。 如果二进制文件的路径未经过验证或已知受信任,则它可能会攻击托管数据库的进程。

pbUserData

在调用时要传递给回调的用户定义数据的自包含块。提供的数据块将保留为列架构的一部分。 因此,数据块必须完全独立,不能引用数据库范围之外的任何数据。

如果 pbUserData 为零,则 忽略 cbUserData 的值。 在这种情况下,调用时不会将用户定义的数据传递给回调。

cbUserData

请参阅 pbUserData

szDependantColumns

保留供将来使用。

此成员应始终设置为 NULL。

要求

| | |

客户端

|

需要Windows Vista、Windows XP 或 Windows 2000 Professional。

| |

服务器

|

需要Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

| |

标头

|

在 Esent.h 中声明。

| |

Unicode

|

在 ANSI JET_ USERDEFINEDDEFAULT_W ( Unicode) JET_ USERDEFINEDDEFAULT_A (实现) 。

|

另请参阅

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF