SmProcessListRequest

INT64 __fastcall SmProcessListRequest(INT64 a1, UINT64 a2, UINT64 a3, UINT64 *a4, CHAR a5){
  unsigned int v6; 
  unsigned int v9; 
  INT64 NonPaged; 
  INT64 v11; 
  int StoreList; 
  UINT64 v13; 
  v6 = a3;
  v9 = 4228;
  NonPaged = SSHSupportAllocateNonPaged(0x1084ui64, 0x524C6D73u);
  v11 = NonPaged;
  if( NonPaged )
  {
    memset(NonPaged, 0i64);
    if( v6 < 0x84 )
      goto LABEL_4;
    if( a5 )
    {
      if( (a2 & 3) != 0 )
        ExRaiseDatatypeMisalignment();
      v13 = 0x7FFFFFFF0000i64;
      if( a2 < 0x7FFFFFFF0000i64 )
        v13 = a2;
      *(_BYTE *)v13 = *(_BYTE *)v13;
      *(_BYTE *)(v13 + 131) = *(_BYTE *)(v13 + 131);
    }
    *(_OWORD *)v11 = *(_OWORD *)a2;
    *(_OWORD *)(v11 + 16) = *(_OWORD *)(a2 + 16);
    *(_OWORD *)(v11 + 32) = *(_OWORD *)(a2 + 32);
    *(_OWORD *)(v11 + 48) = *(_OWORD *)(a2 + 48);
    *(_OWORD *)(v11 + 64) = *(_OWORD *)(a2 + 64);
    *(_OWORD *)(v11 + 80) = *(_OWORD *)(a2 + 80);
    *(_OWORD *)(v11 + 96) = *(_OWORD *)(a2 + 96);
    *(_OWORD *)(v11 + 112) = *(_OWORD *)(a2 + 112);
    *(_DWORD *)(v11 + 128) = *(_DWORD *)(a2 + 128);
    if( (*(_DWORD *)v11 & 0x10000) != 0 )
    {
      if( a5 )
        ProbeForWrite((VOID *)a2, 0x1084ui64, 4ui64);
    }
    else
    {
      v9 = 132;
    }
    if( v6 == v9 )
    {
      if( __PAIR16__(*(_BYTE *)(v11 + 1), *(_DWORD *)v11) == 2 && *(_DWORD *)v11 < 0x20000u )
      {
        StoreList = SmKmGetStoreList(a1);
        if( StoreList >= 0 )
        {
          if( (*(_DWORD *)v11 & 0x10000) == 0 || (StoreList = SmProcessListRequestExtended(a1, v11), StoreList >= 0) )
          {
            memmove((UINT8 *)a2, (UINT8 *)v11, v9);
            *(_DWORD *)a4 = v9;
          }
        }
      }
      else
      {
        StoreList = -1073741811;
      }
    }
    else
    {
LABEL_4:
      StoreList = -1073741306;
    }
  }
  else
  {
    StoreList = -1073740716;
  }
  if( v11 )
    CmSiFreeMemory((PPRIVILEGE_SET)v11);
  return(unsigned int)StoreList;
}

Referenced by:

SmQueryStoreInformation