다음을 통해 공유


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

CLFS 스트림을 나타내는 LOG_FILE_OBJECT 구조체에 대한 포인터입니다. 호출자는 이전에 ClfsCreateLogFile을 호출하여 이 포인터를 얻었습니다.

[in] ePoolType

마샬링 영역이 로그 I/O 블록에 사용할 메모리 유형(예: 페이징되지 않은) 형식을 지정하는 POOL_TYPE 값입니다.

[in, optional] pfnAllocBuffer

NULL 또는 마샬링 영역에 대한 로그 I/O 블록을 할당하는 호출자 제공 함수에 대한 포인터입니다. 할당 함수에는 다음과 같은 프로토타입이 있습니다.

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

할당 함수의 반환 값은 새로 할당된 로그 I/O 블록에 대한 포인터입니다.

[in, optional] pfnFreeBuffer

NULL 또는 이전에 pfnAllocBuffer에 의해 할당된 로그 I/O 블록을 해제하는 호출자 제공 함수에 대한 포인터입니다. 함수에는 다음과 같은 프로토타입이 있습니다.

VOID
(*PFREE_FUNCTION) (
    IN PVOID Buffer
    );

[in] cbMarshallingBuffer

새 마샬링 영역에서 사용하는 개별 로그 I/O 블록의 크기(바이트)입니다. 안정적인 스토리지 매체의 섹터 크기의 배수여야 합니다. 섹터 크기는 GetDiskFreeSpace에서 반환된 lpBytesPerSector 값입니다.

[in] cMaxWriteBuffers

쓰기 작업에 한 번에 할당할 수 있는 최대 I/O 블록 수입니다. 이 매개 변수는 데이터 플러시 빈도에 영향을 줍니다. 데이터 플러시 빈도를 제어할 필요가 없는 경우 이 매개 변수를 INFINITE로 설정합니다.

[in] cMaxReadBuffers

읽기 작업을 위해 한 번에 할당할 수 있는 최대 로그 I/O 블록 수입니다.

[out] ppvMarshalContext

새 마샬링 영역을 나타내는 불투명 컨텍스트에 대한 포인터를 수신하는 변수에 대한 포인터입니다.

반환 값

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

설명

pfnAllocBufferpfnFreeBuffer 매개 변수는 둘 다 호출자가 할당한 함수를 가리키거나 둘 다 NULL이어야 합니다. 둘 다 NULL인 경우 CLFS는 로그 I/O 블록을 할당하고 해제하기 위한 기본 함수를 제공합니다.

ClfsCreateMarshallingArea를 호출하기 전에 ClfsAddLogContainer 또는 ClfsAddLogContainerSet를 호출하여 내부 로그에 컨테이너를 두 개 이상 추가해야 합니다.

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

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 wdm.h(Wdm.h 포함)
라이브러리 Clfs.lib
DLL Clfs.sys
IRQL IRQL <= APC_LEVEL

추가 정보

ClfsAddLogContainer

ClfsAddLogContainerSet

ClfsCreateLogFile

ClfsDeleteMarshallingArea

LOG_FILE_OBJECT

POOL_TYPE