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.