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


Функция ClfsReserveAndAppendLogAligned (wdm.h)

ClfsReserveAndAppendLogAligned обычно резервирует пространство в области маршаллинга или добавляет запись в область маршаллинга или делает оба атомарно. Данные записи выравниваются по указанным границам.

Синтаксис

CLFSUSER_API NTSTATUS ClfsReserveAndAppendLogAligned(
  [in]            PVOID             pvMarshalContext,
  [in, optional]  PCLFS_WRITE_ENTRY rgWriteEntries,
  [in]            ULONG             cWriteEntries,
  [in]            ULONG             cbEntryAlignment,
  [in, optional]  PCLFS_LSN         plsnUndoNext,
  [in, optional]  PCLFS_LSN         plsnPrevious,
  [in]            ULONG             cReserveRecords,
  [in, out]       PLONGLONG         rgcbReservation,
  [in]            ULONG             fFlags,
  [out, optional] PCLFS_LSN         plsn
);

Параметры

[in] pvMarshalContext

Указатель на непрозрачный контекст, представляющий область маршаллинга, связанную с потоком CLFS. Вызывающий объект ранее получил этот указатель путем вызова ClfsCreateMarshallingArea.

[in, optional] rgWriteEntries

Указатель на массив структур CLFS_WRITE_ENTRY, каждый из которых содержит указатель на буфер данных, который станет частью записи, добавляемой в журнал. Этот параметр может быть NULL, если cWriteEntries равно нулю.

[in] cWriteEntries

Количество элементов в массиве, на которое указывает rgWriteEntries. Этот параметр должен быть равен нулю, если rgWriteEntries NULL.

[in] cbEntryAlignment

Выравнивание байтов записей данных, на которые указывает rgWriteEntries, так как они маршалируются в одну запись. Значение одного указывает простую объединение (см. ClfsReserveAndAppendLog). Значение, превышающее одно, может привести к тому, что в записи помещаются нули между записями. Значение этого параметра должно быть больше нуля.

[in, optional] plsnUndoNext

Указатель на структуру CLFS_LSN, которая предоставляет добавленный номер LSN отмены.

[in, optional] plsnPrevious

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

[in] cReserveRecords

Количество элементов в массиве, на которое указывает rgcbReservation. Этот параметр должен быть равен нулю, если rgcbReservation NULL или флаг CLFS_FLAG_USE_RESERVATION fFlags.

[in, out] rgcbReservation

Указатель на массив переменных с типом LONGLONG. Вызывающий объект задает каждому элементу массива размер в байтах записи, которая должна иметь резерв места для него. При возврате каждый элемент массива получает фактический размер пространства, зарезервированного для записи. Это включает пространство, необходимое для заголовков и выравнивания. Если значение резервирования отрицательное, зарезервированная запись, которая почти соответствует абсолютному значению предоставленного отрицательного значения, будет освобождена. Этот параметр может быть null, если cReserveRecords равно нулю и должен быть null, если установлен флаг CLFS_FLAG_USE_RESERVATION fFlags.

[in] fFlags

Этот параметр может быть любым сочетанием следующих флагов.

Флаг Значение
CLFS_FLAG_FORCE_APPEND После добавления текущей записи к блоку ввода-вывода журнала блок блокируется в последовательности LSN в стабильное хранилище. Этот флаг не гарантирует, что запись вынуждена стабильно хранить (см. CLFS_FLAG_FORCE_FLUSH).
CLFS_FLAG_FORCE_FLUSH После добавления текущей записи к блоку ввода-вывода журнала блок принудительно выполняется стабильное хранение.
CLFS_FLAG_USE_RESERVATION Текущая запись помещается в зарезервированное пространство в блоке ввода-вывода. Количество зарезервированных записей в области маршалинга уменьшается на один. Если этот флаг задан, cReserveRecords должно быть равно нулю, а rgcbReservation должно быть NULL.

[out, optional] plsn

Указатель на структуру CLFS_LSN, которая получает LSN добавленной записи. Этот параметр может быть NULL, если cWriteEntries равно нулю.

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

ClfsReserveAndAppendLogAligned возвращает STATUS_SUCCESS в случае успешного выполнения; в противном случае возвращается один из кодов ошибок, определенных в Ntstatus.h.

Замечания

ClfsReserveAndAppendLogAligned изменяет его основное поведение на основе наличия необязательных параметров и состояния флага CLFS_USE_RESERVATION. В следующей таблице приведены общие сценарии.

Значения параметров и флагов Действия, выполненные
cWriteEntries = 0.

rgWriteEntries = NULL.

plsn = NULL.

Резервирует пространство для набора записей, но не добавляет записи в область маршаллинга. Параметр rgcbReservation предоставляет размер части данных каждой записи, требующей зарезервированного места.
cWriteEntries > 0.

rgWriteEntries не NULL.

plsn не NULL.

cReserveRecords = 0.

rgcbReservationNULL.

CLFS_USE_RESERVATION задано.

Добавляет запись в область маршаллинга с помощью пространства, которое уже зарезервировано. Уменьшает количество зарезервированных записей на один.
cWriteEntries > 0.

rgWriteEntries не NULL.

plsn не NULL.

cReserveRecords = 0.

rgcbReservationNULL.

CLFS_USE_RESERVATION очищается.

Добавляет запись в область маршаллинга, резервируя новое пространство. Остается без изменений количество зарезервированных пространств записей.
cWriteEntries > 0.

rgWriteEntries не NULL.

plsn не NULL.

cReserveRecords> 0.

rgcbReservation не NULL.

CLFS_USE_RESERVATION флаг очищается.

Добавляет запись в область маршаллинга, резервируя новое пространство. Кроме того, резервирует место для набора записей, которые в настоящее время не добавляются. Параметр rgcbReservation предоставляет размер каждой записи, требующей зарезервированного места. Увеличивает количество зарезервированных записей по значению cReserveRecords.
 

Описание концепций и терминологии CLFS см. в common Log File System.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows Server 2003 R2, Windows Vista и более поздних версиях Windows.
целевая платформа Настольный
заголовка wdm.h (include Wdm.h)
библиотеки Clfs.lib
DLL Clfs.sys
IRQL <= APC_LEVEL

См. также

CLFS_LSN

CLFS_WRITE_ENTRY

ClfsCreateMarshallingArea

ClfsReserveAndAppendLog