MiCopyOnWriteCheckConditions

VOID __stdcall MiCopyOnWriteCheckConditions(INT64 a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  _EPROCESS *Process; 
  _ETHREAD *ForkInProgress; 

  if( (_DWORD)a2 == -1073740748 )
  {
    if( (*(_BYTE *)(a1 + 184) & 7) == 0 )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      Process = CurrentThread->Tcb.ApcState.Process;
      ForkInProgress = Process->ForkInProgress;
      if( ForkInProgress )
      {
        if( ForkInProgress != CurrentThread )
        {
          --CurrentThread->Tcb.SpecialApcDisable;
          ExAcquirePushLockExclusiveEx(&Process->AddressCreationLock, 0i64);
          CurrentThread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 |= 1u;
          UNLOCK_ADDRESS_SPACE(CurrentThread, Process);
        }
      }
    }
  }
  else if( (_DWORD)a2 == -1073741801
         && KeGetCurrentIrql() < 2u
         && (*(_DWORD *)&KeGetCurrentThread()[1].gapD8[12] & 0xC) == 0 )
  {
    MiWaitForFreePage(*(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8i64 * *(unsigned __int16 *)(a1 + 174)), a2);
  }
}

Referenced by:

MiCopyToUserVa
MiLockAweVadsShared
MiLockCode
MiLockDriverPageRange
MiLockPagedAddress
MiMakeProtoPrivate
MiPrepareImagePagesForHotPatch
MiProbeLeafPteAccess
MiSetProtectionOnSection
MiSplitPrivatePage
MiSplitReducedCommitClonePage
MiSystemFault
MiWalkVaRange
MmAccessFault
MmProtectPool
MmReplaceImportEntry