MmRemoveImportOptimizationWorker

NTSTATUS __stdcall MmRemoveImportOptimizationWorker(PVOID Argument){
  __int64 CurrentIrql; 
  __int16 v3; 
  __int64 v4; 
  bool v5; 
  signed __int32 v6; 
  unsigned int v7; 
  int v8; 
  NTSTATUS v9; 
  unsigned int v10; 
  unsigned int v11; 
  __int64 v12; 
  __int64 v13; 
  INT64 a5; 
  INT64 a6; 
  INT64 a7; 
  __int16 v18; 
  UINT64 SpinCount; 
  UINT64 v20; 
  __int64 v21; 
  __int64 v22; 
  LODWORD(v20) = 0;
  KeGetCurrentIrql();
  CurrentIrql = KeGetCurrentIrql();
  v22 = CurrentIrql;
  __writecr8(0xFui64);
  v3 = v18;
  _disable();
  v4 = *((_QWORD *)Argument + 3);
  v5 = (v3 & 0x200) != 0;
  LODWORD(SpinCount) = 0;
  v6 = _InterlockedDecrement((volatile signed __int32 *)Argument);
  v7 = ~v6 & 0x80000000;
  if( (v6 & 0x7FFFFFFF) != 0 )
  {
    while( (*(_DWORD *)Argument & 0x80000000) != v7 )
      KeYieldProcessorEx(&SpinCount);
    while( *((_DWORD *)Argument + 2) )
      KeYieldProcessorEx(&v20);
  }
  else
  {
    *(_DWORD *)Argument = v7 | *((_DWORD *)Argument + 1);
    v21 = *(_QWORD *)(v4 + 24);
    v8 = 8 * ((KiSpeculationFeatures & 0x2000000) == 0);
    if( (unsigned int)KeIsNmiCallbackRegistered() )
    {
      v9 = -1073741637;
      goto LABEL_13;
    }
    v10 = 0;
    v11 = (*(_DWORD *)(v4 + 40) >> 12) + ((*(_DWORD *)(v4 + 40) & 0xFFF) != 0);
    if( v11 )
    {
      v12 = v21;
      v13 = 56i64;
      do
      {
        a5 = *((_QWORD *)Argument + 4);
        a6 = *(_QWORD *)(v13 + a5);
        if( a6
          && (*((_BYTE *)MmGetPteBase() + ((((unsigned __int64)(v10 << 12) + v12) >> 9) & 0x7FFFFFFFF8i64)) & 1) != 0 )
        {
          LODWORD(a7) = v8;
          MiApplyRetpolineFixups((v10 << 12) + v12, a5, a6, v10 << 12, a5, a6, a7);
        }
        ++v10;
        v13 += 8i64;
      }
      while( v10 < v11 );
      LOBYTE(CurrentIrql) = v22;
    }
    _InterlockedIncrement((volatile signed __int32 *)Argument + 2);
  }
  v9 = 0;
LABEL_13:
  if( v5 )
    _enable();
  __writecr8((unsigned __int8)CurrentIrql);
  return v9;
}

Referenced by:

No references.