ExpQueryChannelInformation

INT64 __stdcall ExpQueryChannelInformation(VOID *Buffer, UINT64 BufferSize, UINT64 *ReturnSize){
  UINT64 v4; 
  UINT16 ProcessPartitionId; 
  int ChannelInformation; 
  UINT64 v8; 
  _DWORD a2[9]; 
  void *Src; 
  v4 = (unsigned int)BufferSize;
  *(_QWORD *)&a2[1] = 0i64;
  Src = 0i64;
  if( (unsigned int)BufferSize < 4 )
  {
    ChannelInformation = -1073741306;
  }
  else
  {
    a2[0] = *(_DWORD *)Buffer;
    ProcessPartitionId = MmGetProcessPartitionId(*((_QWORD *)KeGetCurrentThread() + 23));
    ChannelInformation = MmGetChannelInformation(ProcessPartitionId, a2[0], (UINT8 **)&Src, (UINT64 *)&a2[1]);
    if( ChannelInformation >= 0 )
    {
      v8 = *(_QWORD *)&a2[1];
      *(_DWORD *)ReturnSize = a2[1];
      if( v8 > 0xFFFFFFFF )
      {
        ChannelInformation = -1073741670;
      }
      else if( v4 < v8 )
      {
        ChannelInformation = -1073741789;
      }
      else
      {
        memmove((UINT8 *)Buffer, (UINT8 *)Src, v8);
        ChannelInformation = 0;
      }
    }
  }
  if( Src )
    ExFreePoolWithTag(Src, 0);
  return(unsigned int)ChannelInformation;
}

Referenced by:

ExpQuerySystemInformation