SmcProcessListRequest

NTSTATUS __stdcall SmcProcessListRequest(
        _SMC_CACHE_MANAGER *CacheMgr,
        VOID *UserData,
        UINT64 UserDataLength,
        UINT64 *ReturnLength,
        INT8 RequestorMode){
  int v6; 
  NTSTATUS v9; 
  __int64 v10; 
  unsigned int v11; 
  unsigned int i; 
  __int128 v14[5]; 

  v6 = UserDataLength;
  memset(v14, 0i64, 0x44u);
  if( v6 != 68 )
    return -1073741306;
  v9 = 0;
  if( RequestorMode )
  {
    if( ((unsigned __int8)UserData & 3) != 0 )
      ExRaiseDatatypeMisalignment();
    v10 = (__int64)UserData;
    if( (unsigned __int64)UserData >= 0x7FFFFFFF0000i64 )
      v10 = 0x7FFFFFFF0000i64;
    *(_BYTE *)v10 = *(_BYTE *)v10;
    *(_BYTE *)(v10 + 67) = *(_BYTE *)(v10 + 67);
  }
  v14[0] = *(_OWORD *)UserData;
  v14[1] = *((_OWORD *)UserData + 1);
  v14[2] = *((_OWORD *)UserData + 2);
  v14[3] = *((_OWORD *)UserData + 3);
  LODWORD(v14[4]) = *((_DWORD *)UserData + 16);
  if( LOBYTE(v14[0]) != 1 || (v14[0] & 0xFF00) != 0 || (v14[0] & 0xFFFF0000) != 0 )
    return -1073741811;
  v11 = 0;
  for( i = 0; i < 0x10; ++i )
  {
    if( *(_QWORD *)CacheMgr )
      *((_DWORD *)v14 + ++v11) = i | (16 * (CacheMgr[6] & 0xFFF));
    CacheMgr += 8;
  }
  LODWORD(v14[0]) ^= (LODWORD(v14[0]) ^ (v11 << 8)) & 0xFF00;
  *(_OWORD *)UserData = v14[0];
  *((_OWORD *)UserData + 1) = v14[1];
  *((_OWORD *)UserData + 2) = v14[2];
  *((_OWORD *)UserData + 3) = v14[3];
  *((_DWORD *)UserData + 16) = v14[4];
  *(_DWORD *)ReturnLength = 68;
  return v9;
}

Referenced by:

SmQueryStoreInformation