MiFreePatchTableProtos

NTSTATUS __stdcall MiFreePatchTableProtos(PVOID P){
  unsigned __int64 v1; 
  unsigned __int64 *v3; 
  _BOOL4 v4; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int64 Long; 
  int v8; 

  v1 = 0i64;
  v3 = (unsigned __int64 *)P;
  v4 = (dword_140C4C9F0 & 0xFFF) != 0;
  v5 = ((unsigned int)dword_140C4C9F0 >> 12) + v4;
  if( ((unsigned int)dword_140C4C9F0 >> 12) + v4 )
  {
    do
    {
      LODWORD(v6) = MI_READ_PTE_LOCK_FREE((INT64)v3);
      if( !v6 )
        break;
      Long = ZeroPte.u.Long;
      LOBYTE(v8) = MiPteInShadowRange((UINT64)v3);
      if( v8 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
        Long = ZeroPte.u.Long | 0x8000000000000000ui64;
      *v3++ = Long;
      --v5;
    }
    while( v5 );
  }
  if( 8 * v5 )
  {
    do
    {
      MiUnlockPagedAddress((char *)P + v1);
      v1 += 4096i64;
    }
    while( v1 < 8 * v5 );
  }
  return(unsigned int)ExFreePoolWithTag(P, 0);
}

Referenced by:

MmLoadSystemImageEx