Поделиться через


Структура JET_USERDEFINEDDEFAULT

Применимо к: Windows | Windows Server

Структура JET_USERDEFINEDDEFAULT

Структура JET_USERDEFINEDDEFAULT указывается в сочетании с JET_bitColumnUserDefinedDefault для предоставления новому столбцу значения по умолчанию, которое определяется с помощью обратного вызова. Этот метод можно использовать для реализации вычисляемых столбцов.

Windows XP: Структура JET_USERDEFINEDDEFAULT представлена в Windows XP.

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

Элементы

szCallback

Имя экспорта функции, реализующей обратный вызов в формате module!function.

Обратный вызов сохраняется как часть схемы столбца. Фактический исполняемый файл узла и имя экспорта функции должны сохраняться, чтобы обеспечить поиск истинного адреса функции во время выполнения.

Имя модуля — это имя двоичного файла узла, содержащего функцию . Имя функции — это имя экспорта для этой функции. Эти два элемента информации будут использоваться ядром СУБД во время выполнения для поиска истинного адреса обратного вызова путем выполнения вызова LoadLibrary по имени модуля, за которым следует вызов GetProcAddress по имени функции.

Например, если обратный вызов был реализован в библиотеке DLL с именем MyCallback.DLL и эта БИБЛИОТЕКА хранилась в C:\MyApplication, а функция, реализующая обратный вызов, экспортирована из библиотеки DLL как UserDefinedDefaultCallback, то необходимой строкой будет "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.

Юникод

Реализовано как JET_ USERDEFINEDDEFAULT_W (Юникод) и JET_ USERDEFINEDDEFAULT_A (ANSI).

См. также:

JET_CBTYP
JET_COLUMNCREATE
JET_COLUMNDEF