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