Функция ClfsCreateLogFile (wdm.h)
подпрограмма ClfsCreateLogFile создает или открывает поток CLFS. При необходимости ClfsCreateLogFile также создает базовый физический журнал, содержащий записи потока.
Синтаксис
CLFSUSER_API NTSTATUS ClfsCreateLogFile(
[out] PPLOG_FILE_OBJECT pplfoLog,
[in] PUNICODE_STRING puszLogFileName,
[in] ACCESS_MASK fDesiredAccess,
[in] ULONG dwShareMode,
[in, optional] PSECURITY_DESCRIPTOR psdLogFile,
[in] ULONG fCreateDisposition,
[in] ULONG fCreateOptions,
[in] ULONG fFlagsAndAttributes,
[in] ULONG fLogOptionFlag,
[in, optional] PVOID pvContext,
[in] ULONG cbContext
);
Параметры
[out] pplfoLog
Указатель на переменную, которая получает указатель на структуру LOG_FILE_OBJECT, представляющую открытый экземпляр потока.
[in] puszLogFileName
Указатель на UNICODE_STRING структуру, которая предоставляет имя потока или основного физического журнала.
Если поток уже существует и является единственным потоком выделенного журнала, имя имеет журнал формы:имя физического журнала, где имя физического журнала — имя пути в базовой файловой системе, существующего физического журнала, содержащего записи потока.
Если поток еще не существует и должен стать единственным потоком выделенного журнала (который еще не существует), имя имеет журнал формы:имя физического журнала, где имя физического журнала — имя пути в базовой файловой системе, созданного для хранения записей потока.
Если поток является (или стать) одним из потоков мультиплексированного журнала, Имя имеет журнал формы:имя физического журнала::имя потока, где имя физического журнала — это имя пути в базовой файловой системе, в физической системе, в котором хранятся записи потока, а имя потока — это имя потока, который предоставляет общий доступ (или будет предоставлять общий доступ).
Если вы хотите создать мультиплексированные журналы, в которых нет потоков в данный момент, используйте имя журнала формы:имя физического журнала::, где имя физического журнала — имя пути в базовой файловой системе.
В следующем списке приведены некоторые примеры допустимых имен.
- Log:c:\myLog создает или открывает выделенный журнал и один поток.
- Log:c:\myCommonLog::" создает мультиплексированные журналы, которые еще не имеют потоков.
- "Log:c:\myCommonLog::Stream1" создает или открывает один из потоков (Stream1) мультиплексированного журнала.
[in] fDesiredAccess
ACCESS_MASK, предоставляющий тип доступа, который будет иметь клиент (с помощью указателя, возвращенного в pplfoLog) в поток. Если этот параметр равен нулю, клиенты могут запрашивать поток для его атрибутов, но не могут считывать из потока или записывать их в поток. Этот параметр может быть нулевым или любым сочетанием следующих флагов:
Флаг | Значение |
---|---|
GENERIC_READ | Клиент имеет доступ на чтение к потоку. |
GENERIC_WRITE | Клиент имеет доступ на запись к потоку. |
УДАЛИТЬ | Клиент может пометить поток для удаления. |
[in] dwShareMode
Режим общего доступа потока, который может быть нулевым (не общим) или любым сочетанием следующих флагов:
Флаг | Значение |
---|---|
FILE_SHARE_DELETE | Последующие запросы на открытие потока с доступом к удалению будут выполнены успешно. |
FILE_SHARE_READ | Последующие запросы на открытие потока с доступом на чтение будут выполнены успешно. |
FILE_SHARE_WRITE | Последующие запросы на открытие потока с доступом на запись будут выполнены успешно. |
[in, optional] psdLogFile
Указатель на структуру SECURITY_DESCRIPTOR, которая предоставляет атрибуты безопасности для потока. Этот параметр может быть NULL.
[in] fCreateDisposition
Действие, которое необходимо выполнить, зависит от того, существует ли поток. Этот параметр должен иметь одно из следующих значений:
Ценность | Значение |
---|---|
CREATE_NEW | Создайте новый поток, если поток еще не завершает работу. Сбой, если поток уже существует. |
OPEN_EXISTING | Откройте существующий поток. Сбой, если поток еще не существует. |
OPEN_ALWAYS | Откройте существующий поток. Создайте поток, если он еще не существует. |
[in] fCreateOptions
Набор флагов, определяющих параметры, применяемые при создании или открытии потока. Этот параметр может быть нулевым или совместимым сочетанием следующих флагов:
Флаг | Значение |
---|---|
FILE_NO_INTERMEDIATE_BUFFERING | Записи потока нельзя кэшировать во внутренних буферах драйвера. |
FILE_SYNCHRONOUS_IO_ALERT | Все операции в потоке выполняются синхронно. Любое ожидание от имени вызывающего абонента подлежит преждевременному прекращению от оповещений. Если этот флаг задан, необходимо очистить флаг FILE_SYNCHRONOUS_IO_NONALERT. |
FILE_SYNCHRONOUS_IO_NONALERT | Все операции в потоке выполняются синхронно. Ожидание в системе, которая синхронизирует очередь ввода-вывода и завершение, не распространяется на оповещения. Если этот флаг задан, необходимо очистить флаг FILE_SYNCHRONOUS_IO_ALERT. |
[in] fFlagsAndAttributes
Значение, указывающее, открыт ли поток для обычного или доступ только для чтения. Этот параметр должен иметь значение
FILE_ATTRIBUTE_NORMAL или FILE_ATTRIBUTE_READONLY.
[in] fLogOptionFlag
Указание о связи между CLFS и компонентом, создающий или открывающий поток. Этот параметр должен иметь одно из следующих значений:
Ценность | Значение |
---|---|
CLFS_FLAG_NO_FLAGS | CLFS и компонент создания имеют стандартную, нормальную связь. Компоненты режима ядра используют это значение, если они не попадают в одну из трех других категорий, перечисленных в этой таблице. Если pvContext не NULL, CLFS проверяет, что cbContext больше нуля. В противном случае pvContext и cbContext игнорируются. |
CLFS_FLAG_REENTRANT_FILE_SYSTEM | Компонент создания — это файловая система, которая предоставляет базовое хранилище для CLFS. CLFS использует файловую систему для выделения контейнеров, а файловая система использует потоки CLFS. В этом случае файловая система может вызывать CLFS и ДЛЯ CLFS вызовы обратно в файловую систему в одном потоке или разных потоках. Если pvContext не NULL, CLFS проверяет, что cbContext больше нуля. В противном случае pvContext и cbContext игнорируются. |
CLFS_FLAG_NON_REENTRANT_FILTER | Компонент создания — это драйвер фильтра файловой системы, который отправляет все его операции ввода-вывода CLFS на указанный уровень ниже в стеке фильтров. Этот параметр позволяет драйверу фильтра создавать журнал CLFS без просмотра собственного ввода-вывода журнала. Вызывающий объект передает объект устройства, отличный отNULL, целевого устройства в параметре pvContext с cbContext для соответствующего размера. CLFS использует подпрограмму IoCreateFileSpecifyDeviceObjectHint для создания контейнеров на целевом уровне в стеке фильтров ввода-вывода, заданном объектом устройства. |
CLFS_FLAG_REENTRANT_FILTER | Компонент создания — это драйвер фильтра файловой системы, который отправляет все его операции ввода-вывода CLFS в верхнюю часть стека фильтров. Фильтр имеет рекурсивную связь с CLFS, так как фильтрует собственные операции ввода-вывода журнала, когда CLFS выполняет любую операцию файловой системы в своих контейнерах. Параметр pvContext предоставляет средства для фильтрации для связывания распознаваемого контекста с контейнерами CLFS, так как журнал ввода-вывода попадает в стек фильтров. Параметр cbContext указывает размер непрозрачного контекста в байтах. |
CLFS_FLAG_MINIFILTER_LEVEL | Компонент создания — это драйвер мини-фильтра файловой системы, который отправляет все его операции ввода-вывода CLFS на указанный уровень ниже в стеке фильтров. Этот параметр позволяет мини-фильтру создавать журнал CLFS без просмотра собственного ввода-вывода журнала. Вызывающий объект передает объект контекстаnull, отличный от NULL, в параметре pvContext с cbContext задать соответствующий размер. CLFS использует подпрограмму IoCreateFileSpecifyDeviceObjectHint для создания контейнеров на высоте (указанной в контексте минифильтратора) в стеке минифильтратора диспетчера фильтров. |
[in, optional] pvContext
Указатель на контекст. Способ интерпретации контекста зависит от значения, переданного fLogOptionsFlag.
[in] cbContext
Размер в байтах контекста, на который указывает pvContext. Если pvContext не NULL, этот параметр должен быть больше нуля.
Возвращаемое значение
ClfsCreateLogFile возвращает STATUS_SUCCESS в случае успешного выполнения; в противном случае возвращается один из кодов ошибок, определенных в Ntstatus.h.
Замечания
При создании потока CLFS он поддерживается базовым физическим журналом CLFS. Базовый журнал может быть выделенным (поддерживает только один поток) или мультиплексирован (поддерживает несколько потоков). Выделенный журнал нельзя преобразовать в мультиплексируемый журнал, а многократный журнал нельзя преобразовать в выделенный журнал.
Имя физического журнала CLFS не включает расширение BLF.
Описание концепций и терминологии 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 |