VrpInitializeNamespaceNodeList

NTSTATUS __stdcall VrpInitializeNamespaceNodeList(_VRP_JOB_CONTEXT *JobContext){
  unsigned __int64 v2; 
  NTSTATUS v3; 
  __int64 v4; 
  __int64 v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  VOID *v11; 
  VOID **PoolWithTag; 
  VOID **v13; 
  void *v14; 

  *((_OWORD *)JobContext + 2) = 0i64;
  *((_OWORD *)JobContext + 3) = 0i64;
  *((_OWORD *)JobContext + 4) = 0i64;
  *((_QWORD *)JobContext + 6) = 0i64;
  *((_QWORD *)JobContext + 7) = 0i64;
  *((_QWORD *)JobContext + 9) = 0i64;
  *((_QWORD *)JobContext + 8) = 16i64;
  *((_QWORD *)JobContext + 5) = 8i64;
  v2 = *((_QWORD *)JobContext + 7);
  if( v2 < 0x14 )
  {
    v4 = *((_QWORD *)JobContext + 8);
    v5 = v4 - 1;
    v6 = v4 + 19;
    if( v6 < 0x14 )
    {
      v3 = -2147483637;
      goto LABEL_22;
    }
    v7 = *((_QWORD *)JobContext + 5);
    v8 = v6 & ~v5;
    v9 = v2 * v7;
    if( !is_mul_ok(v2, v7) || (v10 = v8 * v7, !is_mul_ok(v8, v7)) )
    {
      v3 = -2147483637;
      goto LABEL_19;
    }
    v11 = (VOID *)*((_QWORD *)JobContext + 9);
    PoolWithTag = ExAllocatePoolWithTag(1ui64, v8 * v7, 1918981202i64);
    v13 = PoolWithTag;
    if( v11 )
    {
      if( PoolWithTag )
        memset(PoolWithTag, 0i64, v10);
      if( !v13 )
        goto LABEL_18;
      if( v9 >= v10 )
        LODWORD(v9) = v10;
      memmove(v13, v11, v9);
      ExFreePoolWithTag(v11, 0x72615452u);
    }
    else if( PoolWithTag )
    {
      memset(PoolWithTag, 0i64, v10);
    }
    if( v13 )
    {
      *((_QWORD *)JobContext + 9) = v13;
      v3 = 0;
      *((_QWORD *)JobContext + 7) = v8;
      goto LABEL_19;
    }
LABEL_18:
    v3 = -2147024882;
LABEL_19:
    if( !v3 )
      return v3;
    goto LABEL_22;
  }
  v3 = -2147024809;
LABEL_22:
  v14 = (void *)*((_QWORD *)JobContext + 9);
  if( v14 )
    ExFreePoolWithTag(v14, 0x72615452u);
  *((_OWORD *)JobContext + 2) = 0i64;
  *((_OWORD *)JobContext + 3) = 0i64;
  *((_OWORD *)JobContext + 4) = 0i64;
  return v3;
}

Referenced by:

VrpHandleIoctlInitializeJobForVreg