SmKmStoreHelperWorker
VOID __stdcall SmKmStoreHelperWorker(PVOID Parameter){
_ETHREAD *CurrentThread;
char v3;
UINT64 v4;
UINT8 v5;
UINT8 v6;
unsigned int v7;
__int128 v8;
__int128 v9;
IRP *v10;
INT64 v11[2];
__int128 v12;
__int128 v13;
*(_OWORD *)v11 = 0i64;
v12 = 0i64;
v13 = 0i64;
KeSetActualBasePriorityThread((__int64)KeGetCurrentThread(), 25);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
*((_DWORD *)CurrentThread + 325) |= 2u;
while( 1 )
{
KeWaitForSingleObject((char *)Parameter + 8, Executive, 0, 0, 0i64);
KeResetEvent((char *)Parameter + 8, v4, v5, v6, v10);
v7 = *((unsigned __int16 *)Parameter + 29);
if( v7 == 1 )
break;
SmKmStoreHelperCommandProcess((INT64)Parameter, *((unsigned __int16 *)Parameter + 29), (INT64)Parameter + 64);
_m_prefetchw((char *)Parameter + 56);
v3 = _InterlockedOr((volatile signed __int32 *)Parameter + 14, 1u);
if( (v3 & 2) != 0 )
{
v8 = *((_OWORD *)Parameter + 5);
*(_OWORD *)v11 = *((_OWORD *)Parameter + 4);
v9 = *((_OWORD *)Parameter + 6);
v12 = v8;
v13 = v9;
if( v7 == 4 )
{
SmKmStoreHelperCommandCleanup((INT64)Parameter, 4i64, (INT64)v11);
v3 &= ~2u;
}
}
KeSetEvent((PRKEVENT)((char *)Parameter + 32), 0);
if( (v3 & 2) != 0 )
SmKmStoreHelperCommandCleanup((INT64)Parameter, v7, (INT64)v11);
}
}Referenced by:
No references.