IoWithinStackLimits

UINT64 __stdcall IoWithinStackLimits(UINT64 RegionStart, UINT64 RegionSize){
  _ETHREAD *CurrentThread; 
  UINT64 v3; 
  UINT64 v5; 
  _QWORD *v6; 
  unsigned __int64 v8; 
  __int128 v9; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = RegionStart + RegionSize;
  if( (*((_BYTE *)KeGetPcr() + 12972) & 1) == 0 || CurrentThread == *((_ETHREAD **)KeGetCurrentPrcb() + 3) )
  {
    *(_QWORD *)&v9 = *((_QWORD *)CurrentThread + 7);
    v5 = *((_QWORD *)CurrentThread + 6);
    v6 = (_QWORD *)*((_QWORD *)CurrentThread + 5);
    while( RegionStart < v5 || v3 > (unsigned __int64)v9 )
    {
      if( !v6[2] )
        return 0i64;
      v9 = *((_OWORD *)v6 + 1);
      v5 = v6[3];
      v6 = (_QWORD *)v6[5];
    }
  }
  else
  {
    v8 = *((_QWORD *)KeGetPcr() + 1618) + 80i64;
    if( v3 > v8 || RegionStart < v8 - (unsigned int)KeKernelStackSize )
      return 0i64;
  }
  return 1i64;
}

Referenced by:

No references.