MiCopyHeaderIfResident

NTSTATUS __stdcall MiCopyHeaderIfResident(_FILE_OBJECT *File, ULONG_PTR ImagePageFrameNumber){
  UINT64 v2; 
  unsigned __int64 v4; 
  _SECTION_OBJECT_POINTERS *SectionObjectPointer; 
  INT64 *DataSectionObject; 
  UINT64 v8; 
  INT64 v9; 
  int v10; 
  UINT64 v11; 
  unsigned __int64 v12; 
  int v13; 
  __int64 v14; 
  _MMPFN *v15; 
  UINT64 v16; 
  __int64 ProtoPagePfn; 

  v2 = *(_QWORD *)&ImagePageFrameNumber;
  ProtoPagePfn = 0i64;
  v16 = 0i64;
  while( 1 )
  {
    v4 = (unsigned __int8)ExAcquireSpinLockExclusive(&SpinLock);
    SectionObjectPointer = File->SectionObjectPointer;
    if( !SectionObjectPointer || (DataSectionObject = (INT64 *)SectionObjectPointer->DataSectionObject) == 0i64 )
    {
      ExReleaseSpinLockExclusiveFromDpcLevel(&SpinLock);
LABEL_5:
      __writecr8(v4);
      return 0;
    }
    if( (unsigned int)ExTryAcquireSpinLockExclusiveAtDpcLevel(DataSectionObject + 9) )
      break;
    ExReleaseSpinLockExclusiveFromDpcLevel(&SpinLock);
    __writecr8(v4);
  }
  ExReleaseSpinLockExclusiveFromDpcLevel(&SpinLock);
  if( (DataSectionObject[7] & 3) != 0
    || (v9 = DataSectionObject[17]) == 0
    || (int)MiTryLockProtoPoolPageAtDpc((_MMPTE *)DataSectionObject[17], v8) < 0 )
  {
    ExReleaseSpinLockExclusiveFromDpcLevel(DataSectionObject + 9);
    goto LABEL_5;
  }
  if( (MEMORY[0x22] & 0x20) != 0 )
    goto LABEL_28;
  if( (MEMORY[0x22] & 0xC0) != 64 )
    goto LABEL_28;
  if( (MEMORY[0x23] & 0x40) != 0 )
    goto LABEL_28;
  LOBYTE(v10) = MiIsPageOnBadList(0i64);
  if( v10 )
    goto LABEL_28;
  LODWORD(v11) = MI_READ_PTE_LOCK_FREE(v9);
  v16 = v11;
  v12 = v11;
  if( (v11 & 1) != 0 )
  {
    MiPteInShadowRange((UINT64)&v16);
    v13 = 0;
  }
  else
  {
    if( *(&stru_140C4DB30 + 42) )
    {
      if( (v11 & 0x10) != 0 )
        v12 = v11 & 0xFFFFFFFFFFFFFFEFui64;
      else
        v12 = ~*(&stru_140C4DB30 + 42) & v11;
    }
    v13 = 1;
  }
  v14 = (v12 >> 12) & 0xFFFFFFFFFi64;
  v15 = &MmGetPfnDb()[v2];
  if( _interlockedbittestandset64((volatile signed __int32 *)&v15->u2, 0x3Fui64) )
  {
LABEL_28:
    ExReleaseSpinLockExclusiveFromDpcLevel(DataSectionObject + 9);
    __writecr8(2ui64);
    _InterlockedAnd64((volatile signed __int64 *)0x18, 0x7FFFFFFFFFFFFFFFui64);
    MiUnlockProtoPoolPage(ProtoPagePfn, v4);
    return 0;
  }
  MiCopyPage(v2, v14, 0i64, 4ui64);
  ExReleaseSpinLockExclusiveFromDpcLevel(DataSectionObject + 9);
  __writecr8(2ui64);
  if( v13 == 1 )
    MiUpdatePageAttributeStamp(0i64);
  _InterlockedAnd64(&v15->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  _InterlockedAnd64((volatile signed __int64 *)0x18, 0x7FFFFFFFFFFFFFFFui64);
  MiUnlockProtoPoolPage(ProtoPagePfn, v4);
  return 1;
}

Referenced by:

MiCreateImageFileMap