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.