MiZeroSectionObjectPointer

_MI_CONTROL_AREA_WAIT_BLOCK *__stdcall MiZeroSectionObjectPointer(
        _FILE_OBJECT *File,
        _CONTROL_AREA *ControlArea,
        UINT64 AllocationAttributes){
  _SECTION_OBJECT_POINTERS *SectionObjectPointer; 
  unsigned __int8 v5; 
  _MI_CONTROL_AREA_WAIT_BLOCK *WaitList; 
  unsigned __int64 v7; 

  SectionObjectPointer = File->SectionObjectPointer;
  if( (AllocationAttributes & 0x1000000) != 0 )
    SectionObjectPointer = (_SECTION_OBJECT_POINTERS *)((char *)SectionObjectPointer + 16);
  KeAbPostRelease(SectionObjectPointer);
  v5 = ExAcquireSpinLockExclusive((INT64 *)&ControlArea->ControlAreaLock);
  WaitList = ControlArea->WaitList;
  ControlArea->WaitList = 0i64;
  v7 = v5;
  ExAcquireSpinLockExclusiveAtDpcLevel(&SpinLock);
  SectionObjectPointer->DataSectionObject = 0i64;
  ExReleaseSpinLockExclusiveFromDpcLevel(&SpinLock);
  ControlArea->u.LongFlags |= 0xC0000u;
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&ControlArea->ControlAreaLock);
  __writecr8(v7);
  return WaitList;
}

Referenced by:

MiCreateImageOrDataSection