KiSaveCurrentEtwTraceBuffer
VOID __stdcall KiSaveCurrentEtwTraceBuffer(){
__int64 v0;
__int64 v1;
VOID *v2;
__int64 v3;
__int64 v4;
VOID *v5;
_ETW_BUFFER_INFORMATION BufferInfo[4];
*(_OWORD *)BufferInfo = 0i64;
if( EtwGetProcessorBuffer(2ui64, KeGetCurrentPrcb()->Number, BufferInfo) >= 0 )
{
v0 = 0x2000i64;
v1 = *(_QWORD *)BufferInfo + (unsigned int)BufferInfo[3];
KiCurrentEtwBufferBase = *(_QWORD *)BufferInfo;
KiCurrentEtwBufferOffset = v1;
if( (unsigned int)BufferInfo[3] >= 0x2000ui64 )
{
v2 = (VOID *)(v1 - 0x2000);
}
else
{
v0 = (unsigned int)(v1 - BufferInfo[0]);
v2 = *(VOID **)BufferInfo;
}
IoAddTriageDumpDataBlock(v2, (_BYTE *)v0);
IoAddTriageDumpDataBlock(&KiCurrentEtwBufferBase, (_BYTE *)8);
IoAddTriageDumpDataBlock(&KiCurrentEtwBufferOffset, (_BYTE *)8);
}
if( *(&stru_140C452E0 + 612)
&& EtwGetProcessorBuffer((unsigned __int16)TraceHandle, KeGetCurrentPrcb()->Number, BufferInfo) >= 0 )
{
v3 = 4096i64;
v4 = *(_QWORD *)BufferInfo + (unsigned int)BufferInfo[3];
KiCurrentErrLogBufferBase = *(_QWORD *)BufferInfo;
KiCurrentErrLogBufferOffset = v4;
if( (unsigned int)BufferInfo[3] >= 0x1000ui64 )
{
v5 = (VOID *)(v4 - 4096);
}
else
{
v3 = (unsigned int)(v4 - BufferInfo[0]);
v5 = *(VOID **)BufferInfo;
}
IoAddTriageDumpDataBlock(v5, (_BYTE *)v3);
IoAddTriageDumpDataBlock(&KiCurrentErrLogBufferBase, (_BYTE *)8);
IoAddTriageDumpDataBlock(&KiCurrentErrLogBufferOffset, (_BYTE *)8);
}
}Referenced by:
KeBugCheck2