KiOpPatchCode

__int64 __fastcall KiOpPatchCode(__int64 a1, unsigned __int64 a2, char a3){
  NTSTATUS v5; 
  INT64 v6; 
  INT64 v7; 
  _BYTE *v8; 
  UINT64 *OldProtect; 
  UINT64 Priority; 
  UINT64 NewProtectWin32; 
  UINT64 RegionSize; 
  VOID *BaseAddress; 
  INT64 v15; 
  __int16 v16; 
  __int16 v17; 
  _BYTE v18[20]; 
  unsigned __int64 v19; 
  int v20; 
  char v21[12]; 

  memset(v18, 0, sizeof(v18));
  *(_QWORD *)&v21[4] = 0i64;
  LODWORD(NewProtectWin32) = 0;
  BaseAddress = (VOID *)a2;
  RegionSize = 1i64;
  ExAcquireFastMutex(&KiUserCodePatchMutex);
  v5 = ZwProtectVirtualMemory((VOID *)0xFFFFFFFFFFFFFFFFi64, &BaseAddress, &RegionSize, 0x40ui64, &NewProtectWin32);
  if( v5 >= 0 )
  {
    memset(v18, 0, sizeof(v18));
    *(_DWORD *)&v21[8] = 0;
    v15 = 0i64;
    v16 = 8 * (((unsigned __int16)((a2 & 0xFFF) + 4096) >> 12) + 6);
    v17 = 0;
    v19 = a2 & 0xFFFFFFFFFFFFF000ui64;
    *(_QWORD *)v21 = a2 & 0xFFF;
    v20 = 1;
    v5 = 0;
    MiProbeAndLockPages((INT64)&v15, 1, 1i64);
    if( (v17 & 5) != 0 )
    {
      v8 = *(_BYTE **)&v18[12];
    }
    else
    {
      LODWORD(Priority) = 1073741840;
      LODWORD(OldProtect) = 0;
      v8 = MmMapLockedPagesSpecifyCache((_MDL *)&v15, 0, MmCached, 0i64, (UINT64)OldProtect, Priority);
    }
    if( v8 )
      *v8 = a3;
    else
      v5 = -1073741670;
    MmUnlockPages((INT64)&v15, v6, v7);
    ZwProtectVirtualMemory(
      (VOID *)0xFFFFFFFFFFFFFFFFi64,
      &BaseAddress,
      &RegionSize,
      (unsigned int)NewProtectWin32,
      &NewProtectWin32);
  }
  KeReleaseGuardedMutex(&KiUserCodePatchMutex);
  return(unsigned int)v5;
}

Referenced by:

KiOp_MOVAPS
KiOp_MOVDQA