RtlCompressChunks
NTSTATUS __stdcall RtlCompressChunks(
UINT8 *UncompressedBuffer,
UINT64 UncompressedBufferSize,
UINT8 *CompressedBuffer,
UINT64 CompressedBufferSize,
_COMPRESSED_DATA_INFO *CompressedDataInfo,
UINT64 CompressedDataInfoLength,
VOID *WorkSpace){
_COMPRESSED_DATA_INFO *v7;
NTSTATUS v8;
unsigned int v9;
UINT8 *v10;
unsigned int v11;
_COMPRESSED_DATA_INFO *CompressedChunkSizes;
unsigned int v13;
__int64 v15;
NTSTATUS v16;
unsigned int v17;
UINT64 CompressedBufferSizea;
UINT64 UncompressedChunkSize;
UINT8 *Src;
UINT64 FinalCompressedSize;
Src = UncompressedBuffer;
v7 = CompressedDataInfo;
v8 = 0;
v9 = UncompressedBufferSize;
LODWORD(FinalCompressedSize) = 0;
v10 = UncompressedBuffer;
v11 = 1 << CompressedDataInfo->ChunkShift;
CompressedChunkSizes = (_COMPRESSED_DATA_INFO *)CompressedDataInfo->CompressedChunkSizes;
v13 = v9 - (v9 >> 4);
CompressedDataInfo->NumberOfChunks = 0;
CompressedDataInfo = (_COMPRESSED_DATA_INFO *)v7->CompressedChunkSizes;
while( 1 )
{
v15 = v9;
if( v9 >= v11 )
v15 = v11;
LODWORD(UncompressedChunkSize) = v11;
LODWORD(CompressedBufferSizea) = v13;
v16 = RtlCompressBuffer(
v7->CompressionFormatAndEngine,
v10,
(unsigned int)v15,
CompressedBuffer,
CompressedBufferSizea,
UncompressedChunkSize,
&FinalCompressedSize,
WorkSpace);
if( v16 == 279 )
{
v17 = 0;
LODWORD(FinalCompressedSize) = 0;
}
else if( v16 >= 0 )
{
v17 = FinalCompressedSize;
}
else
{
if( v13 < v11 )
return -1073741789;
memmove(CompressedBuffer, Src, v15);
if( v11 > (unsigned int)v15 )
memset(&CompressedBuffer[v15], 0i64, v11 - v15);
CompressedChunkSizes = CompressedDataInfo;
v17 = v11;
LODWORD(FinalCompressedSize) = v11;
}
*(_DWORD *)&CompressedChunkSizes->CompressionFormatAndEngine = v17;
CompressedChunkSizes = (_COMPRESSED_DATA_INFO *)((char *)CompressedChunkSizes + 4);
++v7->NumberOfChunks;
v10 = &Src[(unsigned int)v15];
CompressedDataInfo = CompressedChunkSizes;
Src = v10;
if( (unsigned int)v15 > v9 )
break;
v13 -= v17;
CompressedBuffer += v17;
v9 -= v15;
if( !v9 )
return v8;
}
return -1073741246;
}Referenced by:
No references.