SmcStoreCreate
__int64 __fastcall SmcStoreCreate(__int64 a1, int a2, _DWORD *a3, unsigned int a4, int *a5){
struct _PRIVILEGE_SET *v9;
__int64 v10;
__int64 Count;
int v12;
ULONG v13;
__int64 v14;
int v15;
__int128 v16;
unsigned __int16 v17;
int v18;
int v19;
int v20;
int v21;
unsigned int v22;
struct _PRIVILEGE_SET *NonPaged;
__int64 v24;
int v25;
int v27;
SIZE_T NumberOfBytes;
__int128 v29;
__int128 v30;
int v31;
int v32;
int v33;
int v34;
struct _PRIVILEGE_SET *v35;
unsigned int v36;
int v37;
INT64 *v38;
__int64 v39;
__int128 *v40;
INT64 result[4];
__int128 v42;
__int64 v43;
int v44;
int v45;
char v46;
v46 = a4;
memset((INT64)result, 0i64);
NumberOfBytes = 0i64;
v32 = 0;
v29 = 0i64;
v34 = 0;
v9 = 0i64;
v37 = 0;
v27 = 0;
Count = SmcCacheReference(a1, a4).Count;
if( !Count )
return(unsigned int)-1073741672;
v13 = a3[3];
if( !v13 )
{
v12 = -1073741811;
goto LABEL_23;
}
if( *(_DWORD *)(Count + 24) != a3[2] || (unsigned __int8)*a3 != 1 )
{
v12 = -1073741637;
goto LABEL_23;
}
v14 = SmcStoreSlotReserve(Count, v10, v13);
if( v14 )
{
v15 = *(_DWORD *)(Count + 8);
v16 = *(_OWORD *)a3;
v17 = (unsigned __int16)*(_DWORD *)(Count + 28) << 13;
v30 = v16;
HIDWORD(v30) = v15;
v18 = v16 ^ ((unsigned __int16)v16 ^ v17) & 0x6000;
v33 = *(_DWORD *)(Count + 4);
v19 = *(_DWORD *)(Count + 32);
v45 = 0;
v31 = v19;
v42 = 0i64;
result[0] = *(_QWORD *)(Count + 40);
result[1] = *(_QWORD *)(Count + 48);
result[2] = *(_QWORD *)(Count + 56);
result[3] = *(_QWORD *)(Count + 64);
v43 = *(_QWORD *)(Count + 88);
v44 = *(_DWORD *)(Count + 96);
v38 = result;
LODWORD(v30) = v18;
LOBYTE(v20) = SmKmRegParamsLoad((__int64)&NumberOfBytes);
v12 = v20;
if( v20 >= 0 )
{
if( (*(_DWORD *)(Count + 28) & 1) == 0 )
{
v21 = BYTE4(NumberOfBytes) & 3;
if( v21 == 2 || v21 == 1 && (v18 & 0x800) != 0 )
{
v22 = 0;
goto LABEL_19;
}
}
v22 = NumberOfBytes;
NonPaged = (struct _PRIVILEGE_SET *)SSHSupportAllocateNonPaged((unsigned int)NumberOfBytes, 0x4B456D73u);
v9 = NonPaged;
if( NonPaged )
{
v12 = SmKmKeyGenGenerate(a1 + 512, (unsigned __int16 *)(Count + 552), NonPaged, v22);
if( v12 >= 0 )
{
LABEL_19:
v24 = *(_QWORD *)(v14 + 8);
LODWORD(v29) = *(_DWORD *)(Count + 8);
v40 = &v29;
*((_QWORD *)&v29 + 1) = v24;
v39 = Count + 104;
v35 = v9;
v36 = v22;
v12 = SmStoreCreate(a2, (__int64)&v30, &v27);
if( v12 >= 0 )
{
v25 = v27;
SmcStoreSlotCommit(Count, v14, v27, a2);
v14 = 0i64;
v12 = 0;
*a5 = v25;
}
}
}
else
{
v12 = -1073741670;
}
}
if( v14 )
SmcStoreSlotAbort(Count, v14, 0);
goto LABEL_23;
}
v12 = -1073741697;
LABEL_23:
ExReleaseRundownProtection((PEX_RUNDOWN_REF)(32i64 * (v46 & 0xF) + a1 + 8));
if( v9 )
CmSiFreeMemory(v9);
return(unsigned int)v12;
}Referenced by:
SmcProcessStoreCreateRequest