MmUpdateSectionIoAttribution

VOID __stdcall MmUpdateSectionIoAttribution(
        _SECTION_OBJECT_POINTERS *SectionObjectPointers,
        VOID *IoAttributionContext){
  VOID *v3; 
  _CONTROL_AREA *v4; 
  _CONTROL_AREA *v5; 
  __int64 bf_0; 
  UINT8 OldIrql; 

  OldIrql = 0;
  v3 = 0i64;
  v4 = MiLockSectionControlArea((_MI_SECTION_OBJECT_POINTERS *)SectionObjectPointers, 1ui64, &OldIrql);
  v5 = v4;
  if( v4 )
  {
    if( IoAttributionContext != (VOID *)(8 * v4->u3._bf_0) )
    {
      if( _InterlockedIncrement64((volatile signed __int64 *)IoAttributionContext + 4) <= 1 )
        __fastfail(0xEu);
      bf_0 = v4->u3._bf_0;
      v3 = (VOID *)(8 * bf_0);
      v5->u3._bf_0 = ((unsigned __int64)IoAttributionContext >> 3) | bf_0 & 0xE000000000000000ui64;
    }
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&v5->ControlAreaLock);
    __writecr8(OldIrql);
    if( v3 )
      IoDiskIoAttributionDereference(v3);
  }
}

Referenced by:

CcMapAndCopyInToCache