Функция RtlDecompressFragment (ntifs.h)
Функция RtlDecompressFragment используется для распаковки части сжатого буфера (то есть буфера "фрагмент").
Синтаксис
NT_RTL_COMPRESS_API NTSTATUS RtlDecompressFragment(
[in] USHORT CompressionFormat,
[out] PUCHAR UncompressedFragment,
[in] ULONG UncompressedFragmentSize,
[in] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[in] ULONG FragmentOffset,
[out] PULONG FinalUncompressedSize,
[in] PVOID WorkSpace
);
Параметры
[in] CompressionFormat
Битовая маска, задающая формат сжатия сжатого буфера. Для этого параметра необходимо задать значение COMPRESSION_FORMAT_LZNT1. Значение этого и других связанных значений формата сжатия выглядит следующим образом:
Значение | Значение |
---|---|
COMPRESSION_FORMAT_NONE | Эта функция не поддерживается. |
COMPRESSION_FORMAT_DEFAULT | Эта функция не поддерживается. |
COMPRESSION_FORMAT_LZNT1 | Указывает, что должно выполняться сжатие. Это значение обязательно. |
[out] UncompressedFragment
Указатель на буфер, выделенный вызывающим объектом (выделенный из страничного или нестраничного пула), получающий распакованные данные из CompressedBuffer. Этот параметр является обязательным и не может иметь значение NULL.
[in] UncompressedFragmentSize
Размер буфера UncompressedFragment (в байтах).
[in] CompressedBuffer
Указатель на буфер, содержащий данные для распаковки. Этот параметр является обязательным и не может иметь значение NULL.
[in] CompressedBufferSize
Размер буфера CompressedBuffer (в байтах).
[in] FragmentOffset
Отсчитываемое от нуля смещение в байтах, из которого извлекается несжатый фрагмент. Это значение смещения — это позиция в исходном несжатом буфере.
[out] FinalUncompressedSize
Указатель на переменную, выделенную вызывающим объектом, которая получает размер в байтах распакованных данных, хранящихся в UncompressedFragment. Этот параметр является обязательным и не может иметь значение NULL.
[in] WorkSpace
Указатель на буфер рабочего пространства, выделенный вызывающим объектом, используемый функцией RtlDecompressFragment во время распаковки. Используйте функцию RtlGetCompressionWorkSpaceSize , чтобы определить правильный размер буфера рабочего пространства.
Возвращаемое значение
RtlDecompressFragmentвозвращает соответствующий код NTSTATUS, например один из следующих:
Код возврата | Описание |
---|---|
STATUS_SUCCESS | Буфер CompressedBuffer успешно распаковывается в UncompressedFragment. |
STATUS_INVALID_PARAMETER | Недопустимый формат сжатия был указан с помощью параметра CompressionFormat . Если значение CompressionFormat равно COMPRESSION_FORMAT_NONE или COMPRESSION_FORMAT_DEFAULT (но не одновременно), возвращается это значение. |
STATUS_UNSUPPORTED_COMPRESSION | Недопустимый формат сжатия был указан с помощью параметра CompressionFormat . Если CompressionFormat не является одним из следующих значений, возвращается STATUS_UNSUPPORTED_COMPRESSION: COMPRESSION_FORMAT_LZNT1 |
STATUS_BAD_COMPRESSION_BUFFER | UncompressedFragment недостаточно велик, чтобы содержать несжатые данные. |
Комментарии
Относительно функции RtlDecompressBufferRtlDecompressFragment используется для распаковки части данных из сжатого буфера (в отличие от всего буфера).
Чтобы определить правильный размер буфера для параметра WorkSpace , используйте функцию RtlGetCompressionWorkSpaceSize (то есть значение, возвращаемое параметром RtlGetCompressionWorkSpaceSize ).
Чтобы сжать несжатый буфер, используйте функцию RtlCompressBuffer .
Чтобы распаковать весь сжатый буфер, используйте функцию RtlDecompressBuffer .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Fltkernel.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по