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.