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 v14; 
  __int64 v15; 
  __int16 v17; 
  UINT64 SpinCount; 
  UINT64 v19; 
  __int64 v20; 
  __int64 v21; 

  LODWORD(v19) = 0;
  KeGetCurrentIrql();
  CurrentIrql = KeGetCurrentIrql();
  v21 = CurrentIrql;
  __writecr8(0xFui64);
  v3 = v17;
  _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(&v19);
  }
  else
  {
    *(_DWORD *)Argument = v7 | *((_DWORD *)Argument + 1);
    v20 = *(_QWORD *)(v4 + 24);
    v8 = 8 * ((KiSpeculationFeatures & 0x2000000) == 0);
    if( KeIsNmiCallbackRegistered() )
    {
      v9 = -1073741637;
      goto LABEL_13;
    }
    v10 = 0;
    v11 = (*(_DWORD *)(v4 + 40) >> 12) + ((*(_DWORD *)(v4 + 40) & 0xFFF) != 0);
    if( v11 )
    {
      v12 = v20;
      v13 = 56i64;
      do
      {
        v14 = *((_QWORD *)Argument + 4);
        v15 = *(_QWORD *)(v13 + v14);
        if( v15
          && (*((_BYTE *)&MmGetPteBase()->u.Long + ((((unsigned __int64)(v10 << 12) + v12) >> 9) & 0x7FFFFFFFF8i64)) & 1) != 0 )
        {
          MiApplyRetpolineFixups((v10 << 12) + v12, v14, v15, v10 << 12, v14, v15, v8);
        }
        ++v10;
        v13 += 8i64;
      }
      while( v10 < v11 );
      LOBYTE(CurrentIrql) = v21;
    }
    _InterlockedIncrement((volatile signed __int32 *)Argument + 2);
  }
  v9 = 0;
LABEL_13:
  if( v5 )
    _enable();
  __writecr8((unsigned __int8)CurrentIrql);
  return v9;
}

Referenced by:

No references.