SmcProcessCreateRequest
__int64 __fastcall SmcProcessCreateRequest(__int64 a1, unsigned __int64 a2, int a3, char a4){
INT64 *v8;
int Prepare;
unsigned __int64 v10;
_OWORD *v11;
INT64 *p_result;
__int64 v13;
INT64 NonPaged;
INT64 v16[4];
INT64 result;
char v18[8];
__int64 v19;
WCHAR v20[512];
v16[2] = a1;
v8 = 0i64;
LODWORD(v16[0]) = -1;
memset((INT64)&result, 0i64);
if( a3 == 1056 )
{
if( a4 )
{
if( (a2 & 7) != 0 )
ExRaiseDatatypeMisalignment();
v10 = a2;
if( a2 >= 0x7FFFFFFF0000i64 )
v10 = 0x7FFFFFFF0000i64;
*(_BYTE *)v10 = *(_BYTE *)v10;
*(_BYTE *)(v10 + 1055) = *(_BYTE *)(v10 + 1055);
}
v11 = (_OWORD *)a2;
p_result = &result;
v13 = 8i64;
do
{
*(_OWORD *)p_result = *v11;
*((_OWORD *)p_result + 1) = v11[1];
*((_OWORD *)p_result + 2) = v11[2];
*((_OWORD *)p_result + 3) = v11[3];
*((_OWORD *)p_result + 4) = v11[4];
*((_OWORD *)p_result + 5) = v11[5];
*((_OWORD *)p_result + 6) = v11[6];
p_result += 16;
*((_OWORD *)p_result - 1) = v11[7];
v11 += 8;
--v13;
}
while( v13 );
*(_OWORD *)p_result = *v11;
*((_OWORD *)p_result + 1) = v11[1];
if( (_BYTE)result != 3 || (result & 0xFFFFFF00) != 0 || HIDWORD(v19) )
{
Prepare = -1073741811;
}
else
{
Prepare = SmcCacheCreatePrepare(a1);
if( Prepare >= 0 )
{
NonPaged = SSHSupportAllocateNonPaged(0x428ui64, 0x61436D73u);
v8 = (INT64 *)NonPaged;
if( NonPaged )
{
SmcCacheInitialize(NonPaged);
v20[511] = 0;
Prepare = SmcCacheStart((__int64)v8, (__int64)v18, v20);
if( Prepare >= 0 )
{
Prepare = SmcCacheAdd(a1, v8, v16);
if( Prepare >= 0 )
{
v8 = 0i64;
HIDWORD(v16[0]) = 1;
Prepare = 0;
*(_DWORD *)(a2 + 4) = v16[0];
}
}
}
else
{
Prepare = -1073741670;
}
}
}
}
else
{
Prepare = -1073741306;
}
if( LODWORD(v16[0]) != -1 )
ExReleaseRundownProtection((PEX_RUNDOWN_REF)(a1 + 32i64 * (v16[0] & 0xF) + 8));
if( v8 )
{
SmcCacheCleanup((__int64)v8);
CmSiFreeMemory((PPRIVILEGE_SET)v8);
}
return(unsigned int)Prepare;
}Referenced by:
SmSetStoreInformation