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 | 압축되지 않은 버퍼 버퍼는 데이터 압축과 성능 간의 균형을 제공하는 알고리즘을 사용하여 압축됩니다. 이 값은 COMPRESSION_ENGINE_MAXIMUM 사용할 수 없습니다. |
COMPRESSION_ENGINE_MAXIMUM | UncompressedBuffer 버퍼는 최대 데이터 압축을 제공하지만 성능은 상대적으로 느린 알고리즘을 사용하여 압축됩니다. 이 값은 COMPRESSION_ENGINE_STANDARD 사용할 수 없습니다. |
COMPRESSION_ENGINE_HIBER | 이 함수에서 지원되지 않습니다. |
[in] UncompressedBuffer
압축할 데이터를 포함하는 호출자 할당 버퍼(페이징된 풀 또는 페이징되지 않은 풀에서 할당됨)에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.
[in] UncompressedBufferSize
UncompressedBuffer 버퍼의 크기(바이트)입니다.
[out] CompressedBuffer
압축된 데이터를 수신하는 호출자 할당 버퍼(페이징된 풀 또는 페이징되지 않은 풀에서 할당됨)에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.
[in] CompressedBufferSize
CompressedBuffer 버퍼의 크기(바이트)입니다.
[in] UncompressedChunkSize
압축 해제 버퍼 버퍼를 압축할 때 사용할 청크 크기입니다. 이 매개 변수는 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 | 압축된 버퍼가 너무 작아서 압축된 데이터를 보관할 수 없습니다. 즉, FinalCompressedSize CompressedBufferSize 보다 큽니다. |
발언
RtlCompressBuffer 함수는 압축되지 않은 버퍼를 입력으로 사용하고 압축된 데이터가 지정된 대상 버퍼 내에 맞는 경우 해당 압축된 버퍼를 생성합니다.
WorkSpace 매개 변수에 대한 올바른 버퍼 크기를 확인하려면 RtlGetCompressionWorkSpaceSize 함수를 사용합니다.
압축된 버퍼의 압축을 해제하려면 RtlDecompressBuffer 함수를 사용합니다.
압축된 버퍼에서 압축되지 않은 조각을 추출하려면 RtlDecompressFragment 함수를 사용합니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP |
대상 플랫폼 | 보편적 |
헤더 | ntifs.h(Fltkernel.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |