LZNT1DecompressChunkNewThread
NTSTATUS __stdcall LZNT1DecompressChunkNewThread(
_ASYNC_DECOMPRESS_CONTEXT *AsyncDecompressContext,
UINT8 *UncompressedBuffer,
UINT8 *EndOfUncompressedBufferPlus1,
UINT8 *CompressedBuffer,
UINT8 *EndOfCompressedBufferPlus1,
UINT64 ExplicitChunkSize){
_WORK_QUEUE_ITEM *v10;
_WORK_QUEUE_ITEM *v11;
UINT8 *v12;
int v13;
INT32 FinalUncompressedChunkSize;
FinalUncompressedChunkSize = 0;
if( (unsigned __int64)UncompressedBuffer <= 0x7FFFFFFF0000i64 )
return LZNT1DecompressChunk(
UncompressedBuffer,
EndOfUncompressedBufferPlus1,
CompressedBuffer,
(INT64)EndOfCompressedBufferPlus1,
&FinalUncompressedChunkSize);
if( (unsigned __int64)CompressedBuffer <= 0x7FFFFFFF0000i64 )
return LZNT1DecompressChunk(
UncompressedBuffer,
EndOfUncompressedBufferPlus1,
CompressedBuffer,
(INT64)EndOfCompressedBufferPlus1,
&FinalUncompressedChunkSize);
if( EndOfUncompressedBufferPlus1 - UncompressedBuffer < (int)ExplicitChunkSize )
return LZNT1DecompressChunk(
UncompressedBuffer,
EndOfUncompressedBufferPlus1,
CompressedBuffer,
(INT64)EndOfCompressedBufferPlus1,
&FinalUncompressedChunkSize);
v10 = (_WORK_QUEUE_ITEM *)ExAllocateFromNPagedLookasideList((_NPAGED_LOOKASIDE_LIST *)((char *)&WheapErrorSourceTable
+ 680));
v11 = v10;
if( !v10 )
return LZNT1DecompressChunk(
UncompressedBuffer,
EndOfUncompressedBufferPlus1,
CompressedBuffer,
(INT64)EndOfCompressedBufferPlus1,
&FinalUncompressedChunkSize);
v10->List.Flink = 0i64;
v12 = EndOfCompressedBufferPlus1;
v10->WorkerRoutine = (void(__fastcall *)(void *))LZNT1DecompressChunkWorkItem;
v10->Parameter = v10;
v10[1].Parameter = v12;
v10[2].List.Flink = (_LIST_ENTRY *)&v10[2].List.Blink;
v10[1].List.Flink = (_LIST_ENTRY *)UncompressedBuffer;
v10[1].List.Blink = (_LIST_ENTRY *)EndOfUncompressedBufferPlus1;
v10[1].WorkerRoutine = (void(__fastcall *)(void *))CompressedBuffer;
v10[2].WorkerRoutine = (void(__fastcall *)(void *))AsyncDecompressContext;
_InterlockedIncrement((volatile signed __int32 *)&AsyncDecompressContext[1]);
KeQueryPriorityThread((_ETHREAD *)KeGetCurrentThread());
ExQueueWorkItem(v11, (_WORK_QUEUE_TYPE)(v13 + 32));
return 0;
}Referenced by:
RtlDecompressBufferLZNT1
RtlDecompressFragmentLZNT1