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

스트림의 열린 instance 나타내는 LOG_FILE_OBJECT 구조체에 대한 포인터를 수신하는 변수에 대한 포인터입니다.

[in] puszLogFileName

스트림의 이름 또는 기본 물리적 로그를 제공하는 UNICODE_STRING 구조체에 대한 포인터입니다.

스트림이 이미 있고 전용 로그의 유일한 스트림인 경우 이름에는 로그:물리적 로그 이름 양식이 있습니다. 여기서 실제 로그 이름은 스트림의 레코드를 포함하는 기존 실제 로그의 경로 이름입니다.

스트림이 아직 존재하지 않고 전용 로그의 유일한 스트림이 되는 경우(아직 존재하지 않는) 이름에는 로그:물리적 로그 이름이 있으며, 여기서 물리적 로그 이름은 스트림의 레코드를 보관하기 위해 만들어질 실제 로그의 경로 이름입니다.

스트림이 멀티플렉싱된 로그의 스트림 중 하나인 경우 이름에는 로그:물리적 로그 이름::stream 이름이 있습니다. 여기서 실제 로그 이름은 스트림의 레코드를 보유하는 실제 로그의 경로 이름이며 스트림 이름은 해당 실제 로그를 공유하거나 공유할 스트림의 이름입니다.

현재 스트림이 없는 멀티플렉싱 로그를 만들려면 실제 로그 이름이 만들 실제 로그의 경로 이름인 log:physical log name::형식의 이름을 사용합니다.

다음 목록에서는 유효한 이름의 몇 가지 예를 제공합니다.

  • "Log:c:\myLog"는 전용 로그와 하나의 스트림을 만들거나 엽니다.
  • "Log:c:\myCommonLog::"는 아직 스트림이 없는 멀티플렉싱 로그를 만듭니다.
  • "Log:c:\myCommonLog::Stream1"은 멀티플렉싱된 로그의 스트림(Stream1) 중 하나를 만들거나 엽니다.

[in] fDesiredAccess

클라이언트가 가질 액세스 유형을 제공하는 ACCESS_MASK ( pplfoLog에서 반환된 포인터 사용)를 스트림에 제공합니다. 이 매개 변수가 0인 경우 클라이언트는 해당 특성에 대해 스트림을 쿼리할 수 있지만 스트림에서 읽거나 스트림에 쓸 수 없습니다. 이 매개 변수는 0이거나 다음 플래그의 조합일 수 있습니다.

플래그 의미
GENERIC_READ 클라이언트는 스트림에 대한 읽기 권한이 있습니다.
GENERIC_WRITE 클라이언트는 스트림에 대한 쓰기 권한이 있습니다.
DELETE 클라이언트는 삭제할 스트림을 표시할 수 있습니다.

[in] dwShareMode

0(공유되지 않음) 또는 다음 플래그의 조합일 수 있는 스트림의 공유 모드입니다.

플래그 의미
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

스트림을 만들거나 열 때 적용할 옵션을 지정하는 플래그 집합입니다. 이 매개 변수는 0이거나 다음 플래그의 호환 가능한 조합일 수 있습니다.

플래그 의미
FILE_NO_INTERMEDIATE_BUFFERING 스트림의 레코드는 드라이버의 내부 버퍼에 캐시할 수 없습니다.
FILE_SYNCHRONOUS_IO_ALERT 스트림의 모든 작업은 동기적으로 수행됩니다. 호출자를 대신하여 대기하는 모든 대기는 경고에서 조기 종료될 수 있습니다. 이 플래그가 설정되면 FILE_SYNCHRONOUS_IO_NONALERT 플래그를 지워야 합니다.
FILE_SYNCHRONOUS_IO_NONALERT 스트림의 모든 작업은 동기적으로 수행됩니다. I/O 큐와 완료를 동기화하는 시스템의 대기에는 경고가 적용되지 않습니다. 이 플래그가 설정되면 FILE_SYNCHRONOUS_IO_ALERT 플래그를 지워야 합니다.

[in] fFlagsAndAttributes

일반 또는 읽기 전용 액세스를 위해 스트림이 열리는지 여부를 지정하는 값입니다. 이 매개 변수는 중 하나로 설정해야 합니다.

FILE_ATTRIBUTE_NORMAL 또는 FILE_ATTRIBUTE_READONLY.

[in] fLogOptionFlag

CLFS와 스트림을 만들거나 여는 구성 요소 간의 관계에 대한 힌트입니다. 이 매개 변수는 다음 값 중 하나로 설정해야 합니다.

의미
CLFS_FLAG_NO_FLAGS CLFS 및 생성 구성 요소에는 표준 정상 관계가 있습니다. 커널 모드 구성 요소는 이 표에 나열된 세 가지 다른 범주 중 하나에 속하지 않는 한 이 값을 사용합니다. pvContextNULL이 아닌 경우 CLFS는 cbContext가 0보다 큰지 확인합니다. 그렇지 않으면 pvContextcbContext 가 무시됩니다.
CLFS_FLAG_REENTRANT_FILE_SYSTEM 만들기 구성 요소는 CLFS에 대한 기본 스토리지를 제공하는 파일 시스템입니다. CLFS는 컨테이너를 할당하기 위해 파일 시스템을 사용하고 파일 시스템은 CLFS 스트림을 사용합니다. 이 경우 파일 시스템에서 CLFS를 호출하고 CLFS가 동일한 스레드 또는 다른 스레드의 파일 시스템에 다시 호출할 수 있습니다. pvContextNULL이 아닌 경우 CLFS는 cbContext가 0보다 큰지 확인합니다. 그렇지 않으면 pvContextcbContext 가 무시됩니다.
CLFS_FLAG_NON_REENTRANT_FILTER 만들기 구성 요소는 모든 CLFS I/O를 필터 스택의 지정된 수준 아래로 보내는 파일 시스템 필터 드라이버입니다. 이 옵션을 사용하면 필터 드라이버가 자체 로깅 I/O를 보지 않고 CLFS 로그를 만들 수 있습니다. 호출자는 cbContext가 적절한 크기로 설정된 pvContext 매개 변수에서 NULL이 아닌 대상 디바이스 개체를 전달합니다. CLFS는 IoCreateFileSpecifyDeviceObjectHint 루틴을 사용하여 디바이스 개체에 지정된 I/O 필터 스택의 대상 수준에서 컨테이너를 만듭니다.
CLFS_FLAG_REENTRANT_FILTER 만들기 구성 요소는 모든 CLFS I/O를 필터 스택의 맨 위로 보내는 파일 시스템 필터 드라이버입니다. 필터는 CLFS가 해당 컨테이너에서 파일 시스템 작업을 수행할 때 자체 로깅 I/O를 필터링하기 때문에 CLFS와 재귀 관계를 맺습니다. pvContext 매개 변수는 필터 스택에 로그 I/O가 제공되므로 필터가 인식 가능한 컨텍스트를 CLFS 컨테이너와 연결할 수 있는 수단을 제공합니다. cbContext 매개 변수는 불투명 컨텍스트의 크기를 바이트 단위로 지정합니다.
CLFS_FLAG_MINIFILTER_LEVEL 만들기 구성 요소는 모든 CLFS I/O를 필터 스택의 지정된 수준 아래로 보내는 파일 시스템 미니필터 드라이버입니다. 이 옵션을 사용하면 미니필터가 자체 로깅 I/O를 보지 않고도 CLFS 로그를 만들 수 있습니다. 호출자는 cbContext가 적절한 크기로 설정된 pvContext 매개 변수에서 NULL이 아닌 미니필터 컨텍스트 개체를 전달합니다. CLFS는 IoCreateFileSpecifyDeviceObjectHint 루틴을 사용하여 필터 관리자의 미니필터 스택에서 고도(미니필터 컨텍스트 내에서 지정됨)에 컨테이너를 만듭니다.

[in, optional] pvContext

컨텍스트에 대한 포인터입니다. 컨텍스트가 해석되는 방식은 fLogOptionsFlag에 전달된 값에 따라 달라집니다.

[in] cbContext

pvContext가 가리키는 컨텍스트의 크기(바이트)입니다. pvContextNULL이 아닌 경우 이 매개 변수는 0보다 커야 합니다.

반환 값

ClfsCreateLogFile 은 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 Ntstatus.h에 정의된 오류 코드 중 하나를 반환합니다.

설명

CLFS 스트림을 만들 때 기본 물리적 CLFS 로그에 의해 백업됩니다. 기본 로그는 전용(하나의 스트림만 백업) 또는 멀티플렉싱(여러 스트림을 백업)할 수 있습니다. 전용 로그는 멀티플렉싱 로그로 변환할 수 없으며 멀티플렉싱된 로그는 전용 로그로 변환할 수 없습니다.

실제 CLFS 로그 이름에는 .blf 확장이 포함되지 않습니다.

CLFS 개념 및 용어에 대한 설명은 공통 로그 파일 시스템을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Server 2003 R2, Windows Vista 및 이후 버전의 Windows에서 사용할 수 있습니다.
대상 플랫폼 데스크톱
머리글 wdm.h(Wdm.h 포함)
라이브러리 Clfs.lib
DLL Clfs.sys
IRQL <= APC_LEVEL

추가 정보

ClfsCloseAndResetLogFile

ClfsCloseLogFileObject

ClfsDeleteLogByPointer

ClfsDeleteLogFile