SMKM_STORE::SmStStart

void __fastcall SMKM_STORE::SmStStart(__int64 a1, int **rdx0){
  int *v2; 
  int v5; 
  int v6; 
  int v7; 
  int v8; 
  char v9; 
  char v10; 
  VOID **v11; 
  int v12; 
  int v13; 
  UINT64 v14; 
  VOID **PoolWithTag; 
  int v16; 
  __int128 v17; 
  int v18; 
  int started; 
  NTSTATUS v20; 
  __int64 a2[2]; 
  __int128 v22; 
  int v23; 
  int v24; 
  __int64 v25; 
  int *v26; 
  int v27; 
  int v28; 
  int *v29; 
  __int64 v30; 

  v2 = *rdx0;
  v24 = 0;
  v28 = 0;
  v30 = 0i64;
  v5 = *v2;
  if( (unsigned __int8)*v2 >= 2u )
    return;
  if( v2[5] )
    return;
  if( (unsigned int)(v2[3] - 1) > 0x3FFFF )
    return;
  v6 = v2[2];
  if( !v6 || ((v6 - 1) & v6) != 0 || (unsigned __int8)*v2 == 1 && (v5 & 0x100) != 0 )
    return;
  v7 = v5 & 0xA0000;
  if( (v5 & 0x40000) == 0 )
  {
    if( v7 )
      return;
  }
  if( v7 == 655360 || (v5 & 0x100000) != 0 && (v5 & 0x40000) == 0 )
    return;
  *(_QWORD *)(a1 + 6720) = rdx0[4];
  v8 = *((_DWORD *)rdx0 + 14);
  if( !v8 )
    v8 = 7;
  *(_DWORD *)(a1 + 6728) = v8;
  *(_BYTE *)(a1 + 6020) = *(_BYTE *)v2;
  *(_BYTE *)(a1 + 6021) ^= (*(_BYTE *)(a1 + 6021) ^ (4 * ((unsigned int)*v2 >> 18))) & 4;
  v9 = *(_BYTE *)(a1 + 6021) ^ (*(_BYTE *)(a1 + 6021) ^ (8 * ((unsigned int)*v2 >> 17))) & 8;
  *(_BYTE *)(a1 + 6021) = v9;
  v10 = v9 ^ (v9 ^ (32 * ((unsigned int)*v2 >> 19))) & 0x20;
  *(_BYTE *)(a1 + 6021) = v10;
  *(_DWORD *)(a1 + 6208) = v2[2];
  if( *(_BYTE *)v2 )
  {
    SmKmFileInfoInit((_SMKM_FILE_INFO *)(a1 + 6216));
    *(_DWORD *)(a1 + 6212) = v2[3];
    v13 = v2[6];
    v20 = SmKmFileInfoDuplicate((_SMKM_FILE_INFO *)(a1 + 6216), *((_SMKM_FILE_INFO **)v2 + 6));
    goto LABEL_41;
  }
  if( (v10 & 4) == 0 )
  {
LABEL_21:
    v12 = v2[3];
    *(_DWORD *)(a1 + 6212) = v12;
    v13 = 0;
    v14 = (unsigned int)(8 * v12);
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v14, 1733455219i64);
    if( !PoolWithTag )
      return;
    *(_QWORD *)(a1 + 6216) = PoolWithTag;
    memset(PoolWithTag, 0i64, v14);
    if( (*(_BYTE *)(a1 + 6021) & 4) != 0 )
      goto LABEL_23;
    LODWORD(a2[0]) = ((*(_DWORD *)(a1 + 6208) >> 8) ^ 0x100005) & 0xFFFF0 ^ 0x100005;
    v20 = SmFpPreAllocate((INT64 *)(a1 + 6608), (UINT64 *)a2, 1ui64);
LABEL_41:
    if( v20 < 0 )
      return;
LABEL_23:
    v16 = *(_DWORD *)(a1 + 6212);
    v24 = 0;
    v28 = 0;
    v30 = 0i64;
    v17 = *(_OWORD *)v2;
    v23 = v13;
    v25 = a1;
    v22 = v17;
    HIDWORD(v22) = v16;
    v29 = rdx0[3];
    if( *(_BYTE *)v2 )
      v30 = *((_QWORD *)v2 + 8);
    v26 = rdx0[1];
    v27 = *((_DWORD *)rdx0 + 4);
    LODWORD(v22) = v22 & 0xFFFFF7FF | (v27 == 0 ? 0x800 : 0);
    ST_STORE::StStart(a1, (__int64)&v22);
    if( v18 >= 0 )
    {
      if( (*(_BYTE *)(a1 + 6021) & 4) == 0 )
        goto LABEL_30;
      started = SMKM_STORE::SmStWorkerThreadStartThread(
                  a1,
                  rdx0[6],
                  (KSTART_ROUTINE *)SMKM_STORE::SmStReadThread,
                  (PVOID *)(a1 + 6488));
      if( started >= 0 )
        started = 0;
      if( started >= 0 )
LABEL_30:
        SMKM_STORE::SmStWorkerThreadStartThread(
          a1,
          rdx0[6],
          (KSTART_ROUTINE *)SMKM_STORE::SmStWorkerThread,
          (PVOID *)(a1 + 6200));
    }
    return;
  }
  memset((VOID *)(a1 + 6232), 0i64, 0x80u);
  *(_WORD *)(a1 + 6240) = 0;
  *(_QWORD *)(a1 + 6256) = a1 + 6248;
  *(_QWORD *)(a1 + 6248) = a1 + 6248;
  *(_DWORD *)(a1 + 6244) = 0;
  *(_BYTE *)(a1 + 6242) = 6;
  *(_WORD *)(a1 + 6264) = 0;
  *(_DWORD *)(a1 + 6268) = 0;
  *(_BYTE *)(a1 + 6266) = 6;
  *(_QWORD *)(a1 + 6280) = a1 + 6272;
  *(_QWORD *)(a1 + 6272) = a1 + 6272;
  memset((VOID *)(a1 + 6360), 0i64, 0x80u);
  *(_BYTE *)(a1 + 6370) = 6;
  *(_WORD *)(a1 + 6368) = 0;
  *(_DWORD *)(a1 + 6372) = 0;
  *(_QWORD *)(a1 + 6384) = a1 + 6376;
  *(_QWORD *)(a1 + 6376) = a1 + 6376;
  *(_WORD *)(a1 + 6392) = 0;
  *(_DWORD *)(a1 + 6396) = 0;
  *(_BYTE *)(a1 + 6394) = 6;
  *(_QWORD *)(a1 + 6408) = a1 + 6400;
  *(_QWORD *)(a1 + 6400) = a1 + 6400;
  memset((VOID *)(a1 + 6488), 0i64, 0x50u);
  *(_BYTE *)(a1 + 6498) = 6;
  *(_QWORD *)(a1 + 6512) = a1 + 6504;
  *(_QWORD *)(a1 + 6504) = a1 + 6504;
  *(_WORD *)(a1 + 6496) = 0;
  *(_DWORD *)(a1 + 6500) = 0;
  *(_QWORD *)(a1 + 6536) = a1 + 6528;
  *(_QWORD *)(a1 + 6528) = a1 + 6528;
  *(_WORD *)(a1 + 6520) = 0;
  *(_DWORD *)(a1 + 6524) = 0;
  *(_BYTE *)(a1 + 6522) = 6;
  *(_QWORD *)(a1 + 6552) = a1 + 6544;
  *(_QWORD *)(a1 + 6544) = 0i64;
  *(_QWORD *)(a1 + 6560) = 0i64;
  *(_QWORD *)(a1 + 6584) = rdx0[5];
  if( SmKmStoreHelperStart((_SMKM_STORE_HELPER *)(a1 + 6232), rdx0[6]) >= 0
    && SmKmStoreHelperStart((_SMKM_STORE_HELPER *)(a1 + 6360), rdx0[6]) >= 0 )
  {
    if( (*(_BYTE *)(a1 + 6021) & 8) != 0 )
      *(_QWORD *)(a1 + 6344) = &unk_140D233F8;
    *(_QWORD *)(a1 + 6480) = &qword_140D23410;
    v11 = ExAllocatePoolWithTag(0x200ui64, 0x50ui64, 1817341299i64);
    *(_QWORD *)(a1 + 6224) = v11;
    if( v11 )
    {
      memset(v11, 0i64, 0x50u);
      if( (unsigned int)SmAcquireReleaseCharges(*(unsigned int *)(a1 + 6208), 1ui64, 0i64) )
      {
        *(_BYTE *)(a1 + 6021) |= 0x10u;
        goto LABEL_21;
      }
    }
  }
}

Referenced by:

No references.