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