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