SmKmStoreHelperWorker
VOID __stdcall SmKmStoreHelperWorker(VOID *Parameter){
_ETHREAD *CurrentThread;
char v3;
_SMKM_STORE_HELPER_COMMAND v4;
__int128 v5;
__int128 v6;
_SMKM_STORE_HELPER_PARAMS Params[4];
__int128 v8;
__int128 v9;
*(_OWORD *)Params = 0i64;
v8 = 0i64;
v9 = 0i64;
KeSetActualBasePriorityThread(KeGetCurrentThread(), 25i64);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
CurrentThread->SameThreadPassiveFlags |= 2u;
while( 1 )
{
KeWaitForSingleObject((UINT64)Parameter + 8, 0, 0, 0, 0i64);
KeResetEvent((_KEVENT *)((char *)Parameter + 8));
v4 = *((unsigned __int16 *)Parameter + 29);
if( v4 == SmKmHelperStop )
break;
SmKmStoreHelperCommandProcess(
(_SMKM_STORE_HELPER *)Parameter,
(_SMKM_STORE_HELPER_COMMAND)*((unsigned __int16 *)Parameter + 29),
(_SMKM_STORE_HELPER_PARAMS *)Parameter + 16);
_m_prefetchw((char *)Parameter + 56);
v3 = _InterlockedOr((volatile signed __int32 *)Parameter + 14, 1u);
if( (v3 & 2) != 0 )
{
v5 = *((_OWORD *)Parameter + 5);
*(_OWORD *)Params = *((_OWORD *)Parameter + 4);
v6 = *((_OWORD *)Parameter + 6);
v8 = v5;
v9 = v6;
if( v4 == SmKmHelperLock )
{
SmKmStoreHelperCommandCleanup((_SMKM_STORE_HELPER *)Parameter, SmKmHelperLock, Params);
v3 &= ~2u;
}
}
KeSetEvent((PRKEVENT)((char *)Parameter + 32), 0, 0);
if( (v3 & 2) != 0 )
SmKmStoreHelperCommandCleanup((_SMKM_STORE_HELPER *)Parameter, v4, Params);
}
}Referenced by:
No references.