SmcProcessCreateRequest

NTSTATUS __stdcall SmcProcessCreateRequest(
        _SMC_CACHE_MANAGER *CacheMgr,
        VOID *UserData,
        UINT64 UserDataLength,
        INT8 RequestorMode){
  int v5; 
  _PRIVILEGE_SET *v8; 
  UINT64 v9; 
  int Prepare; 
  __int64 v11; 
  _OWORD *v12; 
  _OWORD *v13; 
  _SMC_CACHE *v14; 
  INT64 v15; 
  UINT64 CacheIdOut[2]; 
  VOID *v18; 
  VOID *v19; 
  _QWORD v20[132]; 

  v5 = UserDataLength;
  v18 = CacheMgr;
  v8 = 0i64;
  LODWORD(CacheIdOut[0]) = -1;
  memset(v20, 0i64, sizeof(v20));
  if( v5 == 1056 )
  {
    if( RequestorMode )
    {
      if( ((unsigned __int8)UserData & 7) != 0 )
        ExRaiseDatatypeMisalignment();
      v11 = (__int64)UserData;
      if( (unsigned __int64)UserData >= 0x7FFFFFFF0000i64 )
        v11 = 0x7FFFFFFF0000i64;
      *(_BYTE *)v11 = *(_BYTE *)v11;
      *(_BYTE *)(v11 + 1055) = *(_BYTE *)(v11 + 1055);
    }
    v12 = UserData;
    v13 = v20;
    v9 = 8i64;
    do
    {
      *v13 = *v12;
      v13[1] = v12[1];
      v13[2] = v12[2];
      v13[3] = v12[3];
      v13[4] = v12[4];
      v13[5] = v12[5];
      v13[6] = v12[6];
      v13 += 8;
      *(v13 - 1) = v12[7];
      v12 += 8;
      --v9;
    }
    while( v9 );
    *v13 = *v12;
    v13[1] = v12[1];
    if( LOBYTE(v20[0]) != 3 || (v20[0] & 0xFFFFFF00) != 0 || HIDWORD(v20[2]) )
    {
      Prepare = -1073741811;
    }
    else
    {
      Prepare = SmcCacheCreatePrepare(CacheMgr);
      if( Prepare >= 0 )
      {
        LODWORD(v14) = SSHSupportAllocateNonPaged(1064, 0x61436D73u);
        v8 = (_PRIVILEGE_SET *)v14;
        if( v14 )
        {
          SmcCacheInitialize(v14);
          HIWORD(v20[131]) = 0;
          Prepare = SmcCacheStart(
                      (_SMC_CACHE *)v8,
                      (_SMC_CACHE_PARAMETERS *)&v20[1],
                      &v20[4],
                      v15,
                      CacheIdOut[0],
                      (INT64 *)CacheIdOut[1],
                      v18,
                      v19);
          if( Prepare >= 0 )
          {
            Prepare = SmcCacheAdd(CacheMgr, (_SMC_CACHE *)v8, CacheIdOut);
            if( Prepare >= 0 )
            {
              v8 = 0i64;
              HIDWORD(CacheIdOut[0]) = 1;
              Prepare = 0;
              *((_DWORD *)UserData + 1) = CacheIdOut[0];
            }
          }
        }
        else
        {
          Prepare = -1073741670;
        }
      }
    }
  }
  else
  {
    Prepare = -1073741306;
  }
  if( LODWORD(CacheIdOut[0]) != -1 )
    ExReleaseRundownProtection((_EX_RUNDOWN_REF *)&CacheMgr[8 * (CacheIdOut[0] & 0xF) + 2]);
  if( v8 )
  {
    SmcCacheCleanup((_SMC_CACHE *)v8, v9);
    CmSiFreeMemory(v8);
  }
  return Prepare;
}

Referenced by:

SmSetStoreInformation