Недокументированные функции NTDLL



RtlCompressBuffer

NTSYSAPI 
NTSTATUS
NTAPI

RtlCompressBuffer(

IN ULONG CompressionFormat, IN PVOID SourceBuffer, IN ULONG SourceBufferLength, OUT PVOID DestinationBuffer, IN ULONG DestinationBufferLength, IN ULONG Unknown, OUT PULONG pDestinationSize, IN PVOID WorkspaceBuffer );


Функция для сжатия (компрессии) буфера.
CompressionFormat
Поддерживаются только 2 младших байта. Старшие байты означают движок компрессии. Младшие байты означают формат компрессии.
  • Compression format (0-15). Биты 4-7 не используются. В NT 4.0 sp6 поддерживается только LZNT1. #define COMPRESSION_FORMAT_NONE (0x0000) // [result:STATUS_INVALID_PARAMETER] #define COMPRESSION_FORMAT_DEFAULT (0x0001) // [result:STATUS_INVALID_PARAMETER] #define COMPRESSION_FORMAT_LZNT1 (0x0002) #define COMPRESSION_FORMAT_NS3 (0x0003) // STATUS_NOT_SUPPORTED #define ... // STATUS_NOT_SUPPORTED #define COMPRESSION_FORMAT_NS15 (0x000F) // STATUS_NOT_SUPPORTED #define COMPRESSION_FORMAT_SPARSE (0x4000) // ??? [result:STATUS_INVALID_PARAMETER]
  • Compression engine. Уровень сжатия. Большее значение означает большую компрессию, но более длинное время процесса сжатия. #define COMPRESSION_ENGINE_STANDARD (0x0000) // Standart compression #define COMPRESSION_ENGINE_MAXIMUM (0x0100) // Maximum (slowest but better) #define COMPRESSION_ENGINE_HIBER (0x0200) // STATUS_NOT_SUPPORTED
  • Unknown
    Здесь указывается 0x1000. Это, возможно, размер страницы.
    pDestinationSize
    Размер данных после сжатия.
    WorkspaceBuffer
    См. RtlGetCompressionWorkSpaceSize.


    Зависимости:
    Библиотека: ntdll.lib




    См. также:
    RtlDecompressBuffer
    RtlGetCompressionWorkSpaceSize