ExpSvmServicePageFault

NTSTATUS __stdcall ExpSvmServicePageFault(UINT64 FaultStatus, PVOID FaultingVa, UINT64 Asid){
  unsigned int v3; 
  char v5; 
  _EPROCESS *Process; 
  _EPROCESS *v7; 
  char v8; 
  NTSTATUS v9; 
  UINT64 v10; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  _KAPC_STATE ApcState; 

  v3 = Asid;
  memset(&ApcState, 0, sizeof(ApcState));
  v5 = FaultStatus;
  memset(&LockHandle, 0, sizeof(LockHandle));
  Process = KeGetCurrentThread()->ApcState.Process;
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&WheapDeferredInternalLogsEventLock + 291, &LockHandle);
  v7 = *(_EPROCESS **)(*(&WheapDeferredInternalLogsEventLock + 290) + 16i64 * v3);
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  v8 = 0;
  if( Process != v7 )
  {
    KiStackAttachProcess(v7, 0i64, &ApcState);
    v8 = 1;
  }
  if( (v5 & 8) != 0 )
  {
    v9 = -1073741819;
  }
  else
  {
    v10 = v5 & 2 | 0x10i64;
    if( (v5 & 4) == 0 )
      v10 = v5 & 2;
    v9 = MmAccessFault(v10, FaultingVa, 1, 0i64);
  }
  if( v8 )
    KiUnstackDetachProcess(&ApcState, 0i64);
  return v9;
}

Referenced by:

No references.