SmKmStoreTerminateWorker
VOID __stdcall SmKmStoreTerminateWorker(VOID *Parameter){
int v2;
unsigned int v3;
__int64 v4;
int v5;
unsigned int v6;
int v7;
_EX_RUNDOWN_REF *v8;
ULONG UserDataCount;
_EVENT_DATA_DESCRIPTOR *UserData;
_KEY_VALUE_FULL_INFORMATION **v11;
REGHANDLE *v12;
__int64 v13;
_EX_RUNDOWN_REF *v14;
int v15;
_SQM_STREAM_ENTRY *v16;
int *v17;
size_t Size;
__int64 SystemInformation;
int *v20;
__int64 v21;
__int64 v22;
__int64 v23[2];
ULONG v24;
int v25;
int v26;
int v27;
int v28;
int *v29;
int v30;
int v31;
int v32[20];
int v33[284];
_EVENT_DATA_DESCRIPTOR v34[6];
memset(v33, 0i64, 0x468u);
v22 = 0i64;
memset(v34, 0i64, sizeof(v34));
memset(v32, 0i64, 0x44u);
v21 = 68i64;
v20 = v32;
SystemInformation = 0x800000001i64;
v32[0] = 1;
ZwQuerySystemInformation();
if( v2 >= 0
&& (SystemInformation = 0xD00000001i64,
v20 = v33,
LODWORD(v21) = 1128,
memset(&v33[1], 0i64, 0x464u),
v3 = 0,
v33[0] = 259,
(v32[0] & 0xFF00) != 0) )
{
while( 1 )
{
v4 = v3;
v33[1] = v32[v3 + 1];
ZwQuerySystemInformation();
if( v5 >= 0 )
{
v6 = 0;
if( v33[4] )
break;
}
LABEL_9:
if( ++v3 >= BYTE1(v32[0]) )
goto LABEL_10;
}
v7 = v33[24];
while( !_bittest(&v7, v6) != *((_DWORD *)Parameter + 13) || v33[v6 + 8] != *((_DWORD *)Parameter + 12) )
{
if( ++v6 >= v33[4] )
goto LABEL_9;
}
UserDataCount = 0;
UserData = v34;
v23[1] = (__int64)v33;
v23[0] = (__int64)v34;
v25 = 6;
v27 = 1036;
v12 = (REGHANDLE *)SmEtwEnabled(SmEtwKeywordStoreDiag);
if( v12 )
{
if( Parameter != (VOID *)-56i64 )
LOBYTE(v33[0]) = *((_BYTE *)Parameter + 56);
v34[0].Ptr = (unsigned __int64)v33;
*(_QWORD *)&v34[0].Size = 1i64;
if( Parameter != (VOID *)-60i64 )
*(int *)((char *)v33 + 1) = *((_DWORD *)Parameter + 15);
v34[1].Ptr = (unsigned __int64)v33 + 1;
*(_QWORD *)&v34[1].Size = 4i64;
v13 = *((_QWORD *)Parameter + 5);
v24 = 2;
v26 = 5;
SmKmEtwAppendProductName(v23, v13, 1i64, v11);
SmKmEtwAppendObjectName((__int64)v23, *(_DEVICE_OBJECT **)(v13 + 8));
UserDataCount = v24;
UserData = (_EVENT_DATA_DESCRIPTOR *)v23[0];
}
v14 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(*((_QWORD *)Parameter + 4), *((_DWORD *)Parameter + 12) & 0x3FF);
ExReleaseRundownProtection(v14 + 1);
SystemInformation = 0xA00000001i64;
v20 = (int *)&v22;
v15 = v32[v4 + 1];
LODWORD(v21) = 8;
LODWORD(v22) = 1;
HIDWORD(v22) = v15;
if( ZwSetSystemInformation(SystemStoreInformation, &SystemInformation, 0x18ui64) >= 0 )
{
if( v12 )
{
EtwWriteEx(*v12, &SmEventCacheTermination, 0i64, 0, 0, 0, UserDataCount, UserData);
if( !*((_DWORD *)Parameter + 14) )
{
Size = UserData[3].Size;
memmove(v33, (const VOID *)UserData[3].Ptr, Size);
v28 = 2;
v17 = v33;
v30 = 1;
*((_WORD *)v33 + ((unsigned __int64)Size >> 1)) = 0;
if( !LOWORD(v33[0]) )
v17 = (int *)L"(null)";
v29 = v17;
v31 = *((_DWORD *)Parameter + 15);
SmKmSqmAddToStream(*v12, v16);
}
}
}
}
else
{
LABEL_10:
v8 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(*((_QWORD *)Parameter + 4), *((_DWORD *)Parameter + 12) & 0x3FF);
ExReleaseRundownProtection(v8 + 1);
}
ExFreePoolWithTag(Parameter, 0);
}Referenced by:
No references.