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.