RtlCompressBuffer 함수(ntifs.h)

RtlCompressBuffer 함수는 버퍼를 압축하고 파일 시스템 드라이버에서 파일 압축을 쉽게 구현하는 데 사용할 수 있습니다.

구문

NT_RTL_COMPRESS_API NTSTATUS RtlCompressBuffer(
  [in]  USHORT CompressionFormatAndEngine,
  [in]  PUCHAR UncompressedBuffer,
  [in]  ULONG  UncompressedBufferSize,
  [out] PUCHAR CompressedBuffer,
  [in]  ULONG  CompressedBufferSize,
  [in]  ULONG  UncompressedChunkSize,
  [out] PULONG FinalCompressedSize,
  [in]  PVOID  WorkSpace
);

매개 변수

[in] CompressionFormatAndEngine

압축 형식 및 엔진 유형을 지정하는 비트 마스크입니다. 이 매개 변수는 하나의 형식 형식과 하나의 엔진 형식의 유효한 비트 OR 조합으로 설정해야 합니다. 예를 들어 COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.

이러한 의미 및 기타 관련 값은 다음과 같습니다.

의미
COMPRESSION_FORMAT_NONE 이 함수에서 지원되지 않습니다.
COMPRESSION_FORMAT_DEFAULT 이 함수에서 지원되지 않습니다.
COMPRESSION_FORMAT_LZNT1 함수는 LZ 압축을 수행합니다.
COMPRESSION_FORMAT_XPRESS 함수는 Xpress 압축을 수행합니다.
COMPRESSION_FORMAT_XPRESS_HUFF 함수는 Xpress Huffman 압축을 수행합니다.
COMPRESSION_ENGINE_STANDARD UncompressedBuffer 버퍼는 데이터 압축과 성능 간의 균형을 제공하는 알고리즘을 사용하여 압축됩니다. 이 값은 COMPRESSION_ENGINE_MAXIMUM 사용할 수 없습니다.
COMPRESSION_ENGINE_MAXIMUM UncompressedBuffer 버퍼는 최대 데이터 압축을 제공하지만 성능이 상대적으로 느린 알고리즘을 사용하여 압축됩니다. 이 값은 COMPRESSION_ENGINE_STANDARD 사용할 수 없습니다.
COMPRESSION_ENGINE_HIBER 이 함수에서 지원되지 않습니다.

[in] UncompressedBuffer

압축할 데이터를 포함하는 호출자 할당 버퍼(페이징된 풀 또는 페이징되지 않은 풀에서 할당됨)에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] UncompressedBufferSize

압축되지 않은 버퍼의 크기(바이트)입니다.

[out] CompressedBuffer

압축된 데이터를 수신하는 호출자가 할당한 버퍼(페이징된 풀 또는 페이징되지 않은 풀에서 할당됨)에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] CompressedBufferSize

CompressedBuffer 버퍼의 크기(바이트)입니다.

[in] UncompressedChunkSize

UncompressedBuffer 버퍼를 압축할 때 사용할 청크 크기입니다. 이 매개 변수는 512, 1024, 2048 또는 4096 값 중 하나여야 합니다. 운영 체제는 4096을 사용하며 이 매개 변수에 권장되는 값도 4096입니다.

[out] FinalCompressedSize

CompressedBuffer에 저장된 압축 데이터의 크기(바이트)를 수신하는 호출자가 할당한 변수에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] WorkSpace

압축 중에 RtlCompressBuffer 함수에서 사용하는 호출자가 할당한 작업 공간 버퍼에 대한 포인터입니다. RtlGetCompressionWorkSpaceSize 함수를 사용하여 올바른 작업 공간 버퍼 크기를 확인합니다.

반환 값

RtlCompressBuffer는 다음 중 하나와 같은 적절한 오류 상태 값을 반환합니다.

반환 코드 설명
STATUS_SUCCESS UncompressedBuffer 버퍼가 성공적으로 압축되었습니다.
STATUS_BUFFER_ALL_ZEROS UncompressedBuffer 버퍼가 성공적으로 압축되었지만 이 버퍼에는 0만 포함됩니다.
STATUS_INVALID_PARAMETER CompressionFormat 매개 변수를 통해 잘못된 압축 형식을 지정했습니다. CompressionFormat이 COMPRESSION_FORMAT_NONE 또는 COMPRESSION_FORMAT_DEFAULT(둘 다 아님)인 경우 이 값이 반환됩니다.
STATUS_UNSUPPORTED_COMPRESSION CompressionFormat 매개 변수를 통해 잘못된 압축 형식을 지정했습니다. CompressionFormat이 다음 중 하나가 아닌 경우 STATUS_UNSUPPORTED_COMPRESSION 반환됩니다. COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUFF
STATUS_NOT_SUPPORTED CompressionFormatAndEngine 매개 변수를 통해 잘못된 압축 엔진을 지정했습니다. CompressionFormatAndEngine이 COMPRESSION_ENGINE_STANDARD 또는 COMPRESSION_ENGINE_MAXIMUM(둘 다 아님)이 아닌 경우 이 값이 반환됩니다.
STATUS_BUFFER_TOO_SMALL 압축된 버퍼가 너무 작아서 압축된 데이터를 보관할 수 없습니다. 즉, FinalCompressedSizeCompressedBufferSize보다 큽니다.

설명

RtlCompressBuffer 함수는 압축되지 않은 버퍼를 입력으로 사용하고 압축된 데이터가 지정된 대상 버퍼 내에 맞는 경우 압축된 해당 버퍼를 생성합니다.

WorkSpace 매개 변수에 대한 올바른 버퍼 크기를 확인하려면 RtlGetCompressionWorkSpaceSize 함수를 사용합니다.

압축된 버퍼의 압축을 풀려면 RtlDecompressBuffer 함수를 사용합니다.

압축된 버퍼에서 압축되지 않은 조각을 추출하려면 RtlDecompressFragment 함수를 사용합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP
대상 플랫폼 유니버설
헤더 ntifs.h(Fltkernel.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

추가 정보

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize