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