SmKmStoreTerminateWorker
VOID __stdcall SmKmStoreTerminateWorker(PVOID Parameter){
int v2;
unsigned int v3;
int v4;
struct _EX_RUNDOWN_REF *v5;
int v6;
EVENT_DATA_DESCRIPTOR *UserData;
UINT64 *v8;
INT64 v9;
struct _EX_RUNDOWN_REF *v10;
UINT64 Size;
__int64 v12;
__int64 v13;
INT64 *v14;
UINT64 UserDataCount;
INT64 a1[2];
int v17;
int v18;
int v19;
int v20;
int v21;
INT64 *v22;
int v23;
int v24;
_DWORD v25[20];
INT64 result[2];
unsigned int v27;
int v28[276];
EVENT_DATA_DESCRIPTOR v29;
__int64 v30;
__int64 v31;
memset((INT64)result, 0i64);
memset((INT64)&v29, 0i64);
memset((INT64)v25, 0i64);
v25[0] = 1;
if( (int)ZwQuerySystemInformation() >= 0
&& (memset((INT64)result + 4, 0i64), v2 = 0, LODWORD(result[0]) = 259, (v25[0] & 0xFF00) != 0) )
{
while( 1 )
{
HIDWORD(result[0]) = v25[v2 + 1];
if( (int)ZwQuerySystemInformation() >= 0 )
{
v3 = 0;
if( v27 )
break;
}
LABEL_9:
if( ++v2 >= (unsigned int)BYTE1(v25[0]) )
goto LABEL_10;
}
v4 = v28[16];
while( !_bittest(&v4, v3) != *((_DWORD *)Parameter + 13) || v28[v3] != *((_DWORD *)Parameter + 12) )
{
if( ++v3 >= v27 )
goto LABEL_9;
}
v6 = 0;
UserData = &v29;
a1[1] = (INT64)result;
a1[0] = (INT64)&v29;
v18 = 6;
v20 = 1036;
v8 = SmEtwEnabled(2i64);
if( v8 )
{
if( Parameter != (PVOID)-56i64 )
LOBYTE(result[0]) = *((_BYTE *)Parameter + 56);
v29.Ptr = (unsigned __int64)result;
*(_QWORD *)&v29.Size = 1i64;
if( Parameter != (PVOID)-60i64 )
*(_DWORD *)((char *)result + 1) = *((_DWORD *)Parameter + 15);
v30 = (__int64)result + 1;
v31 = 4i64;
v9 = *((_QWORD *)Parameter + 5);
v17 = 2;
v19 = 5;
SmKmEtwAppendProductName((INT64)a1, v9);
SmKmEtwAppendObjectName((INT64)a1, *(_QWORD *)(v9 + 8));
v6 = v17;
UserData = (EVENT_DATA_DESCRIPTOR *)a1[0];
}
v10 = (struct _EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(
*((_QWORD *)Parameter + 4),
*((_DWORD *)Parameter + 12) & 0x3FF);
ExReleaseRundownProtection(v10 + 1);
if( (int)ZwSetSystemInformation() >= 0 )
{
if( v8 )
{
LODWORD(UserDataCount) = v6;
EtwWriteEx(*v8, (EVENT_DESCRIPTOR *)&SmEventCacheTermination, 0i64, 0i64, 0i64, 0i64, UserDataCount, UserData);
if( !*((_DWORD *)Parameter + 14) )
{
Size = UserData[3].Size;
memmove((UINT8 *)result, (UINT8 *)UserData[3].Ptr, Size);
v21 = 2;
v14 = result;
v23 = 1;
*((_WORD *)result + (Size >> 1)) = 0;
if( !LOWORD(result[0]) )
v14 = (INT64 *)L"(null)";
v22 = v14;
v24 = *((_DWORD *)Parameter + 15);
SmKmSqmAddToStream(*v8, v12, v13, &v21);
}
}
}
}
else
{
LABEL_10:
v5 = (struct _EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(
*((_QWORD *)Parameter + 4),
*((_DWORD *)Parameter + 12) & 0x3FF);
ExReleaseRundownProtection(v5 + 1);
}
ExFreePoolWithTag(Parameter, 0);
}Referenced by:
No references.