IoAdjustStackSizeForRedirection

NTSTATUS __stdcall IoAdjustStackSizeForRedirection(
        _DEVICE_OBJECT *SourceDevice,
        _DEVICE_OBJECT *TargetDevice,
        PSTR ExtraStackLocations){
  NTSTATUS v4; 
  UINT8 v7; 
  char v8; 
  KIRQL v9; 
  char v10; 
  CHAR v11; 
  __int64 v12; 
  __int64 v13; 
  v4 = 0;
  v7 = KeAcquireQueuedSpinLock(0xAui64);
  v8 = *((_BYTE *)SourceDevice + 76);
  v9 = v7;
  v10 = *((_BYTE *)TargetDevice + 76);
  if( v8 < v10 )
  {
    v11 = v10 - v8;
    IoGetAttachedDevice(SourceDevice);
    v13 = v12;
    if( (unsigned __int16)v11 + (unsigned int)(unsigned __int16)*(char *)(v12 + 76) < 0x7D )
    {
      if( (_DEVICE_OBJECT *)v12 != SourceDevice )
      {
        do
        {
          *(_BYTE *)(v13 + 76) += v11;
          v13 = *(_QWORD *)(*(_QWORD *)(v13 + 312) + 48i64);
        }
        while( (_DEVICE_OBJECT *)v13 != SourceDevice );
        v8 = *((_BYTE *)SourceDevice + 76);
      }
      *((_BYTE *)SourceDevice + 76) = v11 + v8;
    }
    else
    {
      v4 = -1073741811;
    }
  }
  else
  {
    v11 = 0;
  }
  KeReleaseQueuedSpinLock(0xAui64, v9);
  if( v4 >= 0 && ExtraStackLocations )
    *ExtraStackLocations = v11;
  return v4;
}

Referenced by:

No references.