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