Функция 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 |