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


Функция ReserveAndAppendLog (clfsw32.h)

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

Синтаксис

CLFSUSER_API BOOL ReserveAndAppendLog(
  [in]                PVOID             pvMarshal,
  [in, optional]      PCLFS_WRITE_ENTRY rgWriteEntries,
  [in]                ULONG             cWriteEntries,
  [in, optional]      PCLFS_LSN         plsnUndoNext,
  [in, optional]      PCLFS_LSN         plsnPrevious,
  [in]                ULONG             cReserveRecords,
  [in, out, optional] LONGLONG []       rgcbReservation,
  [in]                ULONG             fFlags,
  [out, optional]     PCLFS_LSN         plsn,
  [in, out, optional] LPOVERLAPPED      pOverlapped
);

Параметры

[in] pvMarshal

Указатель на контекст маршалинга, выделенный с помощью функции CreateLogMarshallingArea .

[in, optional] rgWriteEntries

Указатель на массив CLFS_WRITE_ENTRY буферов для маршалирования в одну запись.

Этот параметр игнорируется, если параметр cWriteEntries равен нулю.

[in] cWriteEntries

Количество записей записи в массиве rgWriteEntries .

Если это значение не равно нулю, необходимо указать буфер в параметре rgWriteEntries .

[in, optional] plsnUndoNext

Указатель на структуру CLFS_LSN , задающую порядковый номер журнала (LSN) следующей записи в цепочке отмены.

[in, optional] plsnPrevious

Указатель на структуру CLFS_LSN , указывающую номер LSN предыдущей записи в предыдущей цепочке.

[in] cReserveRecords

Количество размеров записей в массиве rgcbReservation .

[in, out, optional] rgcbReservation

Указатель на массив размеров резервирования для каждой записи, указанной параметром cReserveRecords .

Этот параметр игнорируется, если параметр cReserveRecords равен нулю. Если размер резервирования отрицательный, резервирование этого размера освобождается.

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

[in] fFlags

Флаги, определяющие поведение этой функции.

Можно объединить одно или несколько следующих значений.

Значение Значение
CLFS_FLAG_FORCE_APPEND
Назначает физическое расположение для всех добавленных записей в журнале, которым ранее не было назначено физическое расположение.

Все эти записи доступны для чтения из других контекстов маршалинга.

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

Все эти записи доступны для чтения из других контекстов маршалинга. Затем записи записываются на диск.

CLFS_FLAG_NO_FLAGS
Не назначает флаги.
CLFS_FLAG_USE_RESERVATION
Добавляет текущую запись, используя пробел, зарезервированный в области маршалинга.

[out, optional] plsn

Указатель на структуру CLFS_LSN , получающую номер LSN добавленной записи.

[in, out, optional] pOverlapped

Указатель на структуру OVERLAPPED .

Этот параметр может иметь значение NULL , если асинхронная операция не используется.

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

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Чтобы получить расширенные сведения об ошибке, вызовите функцию GetLastError .

В следующем списке указаны возможные коды ошибок:

Комментарии

Номер LSN, возвращаемый функцией ReserveAndAppendLog , не обязательно является следующим используемым номером LSN. Возвращаемый номер LSN представляет собой оценку следующего номера LSN и зависит от того, какие флаги задаются параметром fFlags . Возвращаемый номер LSN можно использовать при перемещении базового хвоста. Этот номер LSN становится недействительным при следующем вызове этой функции.

Если функция ReserveAndAppendLog возвращает ERROR_LOG_FILE_FULL, в журнале больше нет места. Это можно устранить одним из следующих способов:

  • Бесплатные ненужные резервирования.
  • Переведите базовый номер LSN, заключительный фрагмент архива журнала или и то, и другое, чтобы перезаработать контейнеры.
  • Добавьте контейнеры в журнал.
API управления CLFS также предоставляет способ обработки сценариев с использованием полных журналов.

Если функция ReserveAndAppendLog вызывается с допустимой структурой pOverlapped и дескриптор журнала создается с перекрывающимся параметром, то если вызов этой функции завершается сбоем с кодом ошибки ERROR_IO_PENDING, указатель на допустимый контекст чтения помещается в переменную, на которую указывает параметр ppvReadContext .

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

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2003 R2 [только классические приложения]
Целевая платформа Windows
Header clfsw32.h
Библиотека Clfsw32.lib
DLL Clfsw32.dll

См. также раздел

CLFS_LSN

CLFS_WRITE_ENTRY

Общие функции файловой системы журнала

ПЕРЕКРЫВАЮЩИХСЯ