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


Функция JetOpenFile

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

Функция JetOpenFile

Функция JetOpenFile открывает присоединенную базу данных, файл исправлений базы данных или файл журнала транзакций активного экземпляра для выполнения нечеткого резервного копирования потоковой передачи. Данные из этих файлов можно впоследствии считывать через возвращенный дескриптор с помощью JetReadFile. Возвращаемый дескриптор должен быть закрыт с помощью JetCloseFile. Внешняя резервная копия экземпляра должна быть ранее инициирована с помощью JetBeginExternalBackup.

    JET_ERR JET_API JetOpenFile(
      __in          const tchar* szFileName,
      __out         JET_HANDLE* phfFile,
      __out         unsigned long* pulFileSizeLow,
      __out         unsigned long* pulFileSizeHigh
    );

Параметры

szFileName

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

phfFile

Выходной буфер, который получает дескриптор для считываемого файла.

pulFileSizeLow

Выходной буфер, который получает наименее значимые 32 бита от размера файла.

pulFileSizeHigh

Выходной буфер, который получает наиболее значительные 32 бита от размера файла.

Возвращаемое значение

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errBackupAbortByServer

Операция завершилась сбоем, так как текущая внешняя резервная копия была прервана вызовом JetStopBackup. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errClientRequestToStopJetService

Невозможно выполнить операцию, так как все действия экземпляра, связанного с сеансом, прекратились в результате вызова JetStopService.

JET_errFileAccessDenied

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

JET_errFileNotFound

Операция завершилась сбоем, так как не удалось открыть запрошенный файл, так как его не удалось найти по указанному пути. Эта ошибка будет возвращена только Windows 2000.

JET_errInstanceUnavailable

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, столкнулся с неустранимой ошибкой, требующей отмены доступа ко всем данным для защиты целостности этих данных. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errInvalidBackupSequence

Операция резервного копирования завершилась сбоем, так как она была вызвана из последовательности.

JET_errInvalidParameter

Один из предоставленных параметров содержал непредвиденное значение или значение, которое не имело смысла в сочетании со значением другого параметра. Это может произойти для JetOpenFile , когда:

  • Указанный дескриптор экземпляра недопустим (Windows XP и более поздние выпуски).

  • Указанный параметр filename имеет значение NULL или строка нулевой длины (Windows XP и более поздние версии).

JET_errInvalidPath

Операция завершилась сбоем, так как не удалось найти указанный путь.

JET_errMissingFileToBackup

Не удалось открыть запрошенный файл для резервного копирования, так как его не удалось найти. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errNoBackup

Операция завершилась сбоем, так как внешнее резервное копирование не выполняется.

JET_errNotInitialized

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, еще не инициализирован.

JET_errOutOfMemory

Операция завершилась сбоем, так как для ее завершения не удалось выделить недостаточно памяти. JetOpenFile вернет JET_errOutOfMemory, если предпринята попытка открыть другой файл до того, как предыдущий файл, открытый с помощью JetOpenFile , был закрыт JetCloseFile. В настоящее время поддерживается только один необработанные дескриптор файла.

JET_errRunningInMultiInstanceMode

Операция завершилась сбоем, так как была предпринята попытка использовать подсистему в устаревшем режиме (режим совместимости с Windows 2000), где поддерживается только один экземпляр, если на самом деле уже существует несколько экземпляров.

JET_errTermInProgress

Невозможно завершить операцию, так как экземпляр, связанный с сеансом, завершает работу. JET_errRestoreInProgress Невозможно выполнить операцию, так как операция восстановления выполняется в экземпляре, связанном с сеансом.

При успешном выполнении будет возвращен дескриптор запрошенного файла. Если дескриптор предназначен для файла базы данных, этот файл базы данных будет подготовлен для потоковой архивации, что может привести к созданию файла исправлений базы данных в том же расположении, что и файл базы данных. Файл исправлений базы данных имеет тот же путь и имя файла, что и файл базы данных, но имеет . Расширение PAT. Также будет возвращен размер файла.

При сбое состояние выходных буферов будет неопределенным. Файл исправлений базы данных может быть временно создан на диске, а любой существующий файл в расположении исправления может быть удален. Сбой приведет к отмене всего процесса резервного копирования экземпляра. В Windows XP и более поздних выпусках резервное копирование не будет отменено, если была предпринята попытка создать резервную копию базы данных, которая не была подключена к экземпляру во время вызова.

Предупреждение В целях безопасности важно отметить, что JetOpenFile не проверяет, связан ли запрошенный путь к файлу с набором файлов, для резервного копирования для экземпляра. В результате эту функцию можно использовать для доступа к любому файлу, который может быть открыт текущим контекстом безопасности потока. Крайне важно, чтобы приложение ограничивло пути, передаваемые в эту функцию, известным набором хороших путей к файлам, иначе можно было бы сделать возможным раскрытие информации.

Комментарии

Для этого необходимо наличие буферов вывода дескриптора и размера файла. Если они отсутствуют, подсистема аварийно завершает работу, так как параметры выходного буфера не проверяются.

В настоящее время можно открыть только один файл для резервного копирования в любой момент времени.

JetOpenFile не утверждает права резервного копирования перед открытием запрошенного файла.

Размер считываемого файла, сообщаемый этой функцией, может не соответствовать размеру файла на диске. В Windows XP и более поздних версиях дополнительные сведения могут добавляться в файл базы данных, который используется ядром СУБД во время операции восстановления. Таким образом, приложение должно полагаться только на размер файла, возвращаемый JetOpenFile , или на фактическое количество байтов данных, возвращаемых JetReadFile.

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Professional.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлено в Esent.h.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

Юникод

Реализовано как JetOpenFileW (Юникод) и JetOpenFileA (ANSI).

См. также:

JET_ERR
JET_HANDLE
JET_INSTANCE
JetAttachDatabase
JetBeginExternalBackup
JetCloseFile
JetGetAttachInfo
JetGetLogInfo
JetReadFile
JetStopBackup
JetStopService
JetTruncateLog