SMKM_STORE_MGR::SmIoCtxPrepareToQueue
__int64 __fastcall SMKM_STORE_MGR::SmIoCtxPrepareToQueue(
VOID *Context,
__int64 a2,
__int64 a3,
unsigned __int64 a4,
__int64 a5){
int v5;
__int128 *v6;
VOID *v7;
_MDL *v8;
unsigned __int64 v9;
__int128 v12;
unsigned int v13;
int v15;
int v16;
_DWORD *v17;
UINT64 DontFail;
__int128 v19;
v5 = *(_DWORD *)a4;
v6 = &v19;
v7 = 0i64;
*((_QWORD *)&v19 + 1) = &v19;
*(_QWORD *)&v19 = 0i64;
v8 = 0i64;
v9 = a4;
if( (v5 & 7) == 2 )
{
v15 = *(_DWORD *)(a2 + 1840);
v8 = *(_MDL **)(a4 + 16);
if( (v15 & 2) != 0 )
{
v16 = 0;
if( (v15 & 1) != 0 && v8->ByteCount <= 0x1000 )
v16 = 1;
LODWORD(DontFail) = v16;
v7 = SmFpAllocate((_SM_FORWARD_PROGRESS_CTX *)(a2 + 1536), SmFpResourceMapping, Context, v8, DontFail);
if( !v7 )
{
v13 = -1073741670;
goto LABEL_18;
}
v6 = (__int128 *)*((_QWORD *)&v19 + 1);
}
}
*(_QWORD *)v9 = *(_DWORD *)v9 & 7 | ((*(_QWORD *)v6 & 0xFFFFFFFFFFFFFFF8ui64) + 8);
*(_QWORD *)v6 = v9 | *(_DWORD *)v6 & 7;
*((_QWORD *)&v19 + 1) = v9;
if( (__int128 *)v9 != &v19 )
{
v12 = v19;
*(_QWORD *)&v19 = 0i64;
v9 = (unsigned __int64)&v19;
*((_QWORD *)&v19 + 1) = &v19;
*(_OWORD *)a5 = v12;
}
if( v7 )
*(_QWORD *)(a5 + 16) = v8;
*(_QWORD *)(a5 + 24) = Context;
v13 = 0;
while( (__int128 *)v9 != &v19 )
{
v17 = (_DWORD *)v19;
*(_QWORD *)&v19 = *(_QWORD *)v19 & 0xFFFFFFFFFFFFFFF8ui64;
if( v17 == (_DWORD *)v9 )
{
*(_QWORD *)&v19 = 0i64;
*((_QWORD *)&v19 + 1) = &v19;
}
else
{
*(_QWORD *)v9 = *(_QWORD *)v9 & 7i64 | (8i64 * (*(_QWORD *)v9 >> 3) - 8);
}
SMKM_STORE_MGR::SmWorkItemFreeResource(a2, v17, Context);
LABEL_18:
v9 = *((_QWORD *)&v19 + 1);
}
return v13;
}
Referenced by:
No references.