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

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

Синтаксис

CLFSUSER_API NTSTATUS ClfsCreateMarshallingArea(
  [in]           PLOG_FILE_OBJECT   plfoLog,
  [in]           POOL_TYPE          ePoolType,
  [in, optional] PALLOCATE_FUNCTION pfnAllocBuffer,
  [in, optional] PFREE_FUNCTION     pfnFreeBuffer,
  [in]           ULONG              cbMarshallingBuffer,
  [in]           ULONG              cMaxWriteBuffers,
  [in]           ULONG              cMaxReadBuffers,
  [out]          PVOID              *ppvMarshalContext
);

Параметры

[in] plfoLog

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

[in] ePoolType

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

[in, optional] pfnAllocBuffer

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

PVOID
(*PALLOCATE_FUNCTION) (
    IN POOL_TYPE PoolType,
    IN SIZE_T NumberOfBytes,
    IN ULONG Tag
    );

Возвращаемое значение функции выделения является указателем на только что выделенный блок ввода-вывода журнала.

[in, optional] pfnFreeBuffer

Значение NULL или указатель на функцию, предоставляемую вызывающим объектом, которая освобождает блок ввода-вывода журнала, который ранее был выделен pfnAllocBuffer. Функция имеет следующий прототип:

VOID
(*PFREE_FUNCTION) (
    IN PVOID Buffer
    );

[in] cbMarshallingBuffer

Размер (в байтах) отдельных блоков ввода-вывода журнала, которые использует новая область маршалинга. Это значение должно быть кратно размеру сектора на стабильном носителе хранилища. Размер сектора — это значение lpBytesPerSector, возвращаемое из GetDiskFreeSpace.

[in] cMaxWriteBuffers

Максимальное количество блоков ввода-вывода, которые можно выделить одновременно для операций записи. Этот параметр влияет на частоту очистки данных. Если вам не нужно управлять частотой очистки данных, задайте для этого параметра значение INFINITE.

[in] cMaxReadBuffers

Максимальное количество блоков ввода-вывода журнала, которые можно выделить одновременно для операций чтения.

[out] ppvMarshalContext

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

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

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

Комментарии

Параметры pfnAllocBuffer и pfnFreeBuffer должны указывать на функции, выделенные вызывающим объектом, или иметь значение NULL. Если они оба имеют значение NULL, CLFS предоставляет функции по умолчанию для выделения и освобождения блоков ввода-вывода журнала.

Перед вызовом ClfsCreateMarshallingArea необходимо добавить по крайней мере два контейнера в базовый журнал, вызвав ClfsAddLogContainer или ClfsAddLogContainerSet.

Описание основных понятий и терминологии CLFS см. в разделе Common Log File System.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h)
Библиотека Clfs.lib
DLL Clfs.sys
IRQL IRQL <= APC_LEVEL

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

ClfsAddLogContainer

ClfsAddLogContainerSet

ClfsCreateLogFile

ClfsDeleteMarshallingArea

LOG_FILE_OBJECT

POOL_TYPE