SmcProcessStatsRequest

NTSTATUS __stdcall SmcProcessStatsRequest(
        _SMC_CACHE_MANAGER *CacheMgr,
        VOID *UserData,
        UINT64 UserDataLength,
        UINT64 *ReturnLength,
        INT8 RequestorMode){
  int v6; 
  BOOL v9; 
  _DRIVE_LAYOUT_INFORMATION **v10; 
  int CacheStats; 
  __int64 v12; 
  _OWORD *v13; 
  char *v14; 
  __int64 v15; 
  __int64 v16; 
  char *v17; 
  char SectorSize[1136]; 

  v6 = UserDataLength;
  memset(SectorSize, 0i64, 0x468u);
  if( v6 != 1128 )
    return -1073741306;
  if( RequestorMode )
  {
    if( ((unsigned __int8)UserData & 7) != 0 )
      ExRaiseDatatypeMisalignment();
    v12 = (__int64)UserData;
    if( (unsigned __int64)UserData >= 0x7FFFFFFF0000i64 )
      v12 = 0x7FFFFFFF0000i64;
    *(_BYTE *)v12 = *(_BYTE *)v12;
    *(_BYTE *)(v12 + 1127) = *(_BYTE *)(v12 + 1127);
  }
  v13 = UserData;
  v14 = SectorSize;
  v15 = 8i64;
  v16 = 8i64;
  do
  {
    *(_OWORD *)v14 = *v13;
    *((_OWORD *)v14 + 1) = v13[1];
    *((_OWORD *)v14 + 2) = v13[2];
    *((_OWORD *)v14 + 3) = v13[3];
    *((_OWORD *)v14 + 4) = v13[4];
    *((_OWORD *)v14 + 5) = v13[5];
    *((_OWORD *)v14 + 6) = v13[6];
    v14 += 128;
    *((_OWORD *)v14 - 1) = v13[7];
    v13 += 8;
    --v16;
  }
  while( v16 );
  *(_OWORD *)v14 = *v13;
  *((_OWORD *)v14 + 1) = v13[1];
  *((_OWORD *)v14 + 2) = v13[2];
  *((_OWORD *)v14 + 3) = v13[3];
  *((_OWORD *)v14 + 4) = v13[4];
  *((_OWORD *)v14 + 5) = v13[5];
  *((_QWORD *)v14 + 12) = *((_QWORD *)v13 + 12);
  if( SectorSize[0] != 3 )
    return -1073741811;
  CacheStats = SmcGetCacheStats((PDEVICE_OBJECT)CacheMgr, (ULONG)SectorSize, v9, v10);
  if( CacheStats >= 0 )
  {
    v17 = SectorSize;
    do
    {
      *(_OWORD *)UserData = *(_OWORD *)v17;
      *((_OWORD *)UserData + 1) = *((_OWORD *)v17 + 1);
      *((_OWORD *)UserData + 2) = *((_OWORD *)v17 + 2);
      *((_OWORD *)UserData + 3) = *((_OWORD *)v17 + 3);
      *((_OWORD *)UserData + 4) = *((_OWORD *)v17 + 4);
      *((_OWORD *)UserData + 5) = *((_OWORD *)v17 + 5);
      *((_OWORD *)UserData + 6) = *((_OWORD *)v17 + 6);
      UserData = (char *)UserData + 128;
      *((_OWORD *)UserData - 1) = *((_OWORD *)v17 + 7);
      v17 += 128;
      --v15;
    }
    while( v15 );
    *(_OWORD *)UserData = *(_OWORD *)v17;
    *((_OWORD *)UserData + 1) = *((_OWORD *)v17 + 1);
    *((_OWORD *)UserData + 2) = *((_OWORD *)v17 + 2);
    *((_OWORD *)UserData + 3) = *((_OWORD *)v17 + 3);
    *((_OWORD *)UserData + 4) = *((_OWORD *)v17 + 4);
    *((_OWORD *)UserData + 5) = *((_OWORD *)v17 + 5);
    *((_QWORD *)UserData + 12) = *((_QWORD *)v17 + 12);
    *(_DWORD *)ReturnLength = 1128;
  }
  return CacheStats;
}

Referenced by:

SmQueryStoreInformation