RtlCSparseBitmapStart

NTSTATUS __stdcall RtlCSparseBitmapStart(INT64 a1, UINT64 a2, UINT8 a3, INT64 a4){
  UINT64 v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  _KAPC_STATE **v8; 
  NTSTATUS result; 
  unsigned __int64 v10; 
  _KAPC_STATE *v11; 
  UINT64 v12; 
  UINT64 v13; 
  INT64 v14; 
  INT64 v15; 
  INT64 v16; 
  INT64 v17; 
  INT64 v18; 
  INT64 v19; 
  INT64 v20; 
  INT64 v21; 
  unsigned __int64 v22; 
  INT64 v23; 
  int v24; 

  v24 = 0;
  *(_QWORD *)(a1 + 24) = 0i64;
  *(_QWORD *)(a1 + 40) = 0i64;
  *(_BYTE *)(a1 + 49) = a3;
  *(_BYTE *)(a1 + 50) = a4;
  *(_QWORD *)(a1 + 16) = a2;
  *(_BYTE *)(a1 + 48) = (_DWORD)a4 != 0;
  if( a2 > 0x7FFFFFFFFFFFFFFFi64 )
    return -2147483643;
  v5 = (((a2 + 7) >> 3) + 4095) & 0xFFFFFFFFFFFFF000ui64;
  v6 = ((((v5 >> 12) + 7) >> 3) + 4095) & 0xFFFFFFFFFFFFF000ui64;
  v7 = *(unsigned int *)(a1 + 52);
  v23 = v6;
  if( ((v6 >> 12) + 7) >> 3 > v7 )
    return -2147483643;
  LODWORD(v20) = 0;
  v8 = (_KAPC_STATE **)(a1 + 8);
  v22 = v6 + v5;
  LODWORD(v16) = (unsigned __int8)a4;
  LODWORD(v14) = a3;
  LODWORD(v12) = 4;
  result = RtlpHpEnvAllocVA((INT64 *)(a1 + 8), (INT64 *)&v22, 0i64, 1056768i64, v12, v14, v16, v18, v20);
  if( result >= 0 )
  {
    _BitScanForward64(&v10, v22);
    v11 = *v8;
    *(_BYTE *)(a1 + 51) = v10;
    result = RtlpEnvRegisterFaultRange(v11, (_KAPC_STATE *)v5);
    if( result >= 0 )
    {
      *(_QWORD *)a1 = (char *)*v8 + v5;
      if( v6 <= 0x1000 )
      {
        LODWORD(v21) = 0;
        LODWORD(v17) = *(unsigned __int8 *)(a1 + 50);
        LODWORD(v15) = *(unsigned __int8 *)(a1 + 49);
        LODWORD(v13) = 4;
        result = RtlpHpEnvAllocVA((INT64 *)a1, &v23, 0i64, 1073745920i64, v13, v15, v17, v19, v21);
        if( result < 0 )
          return result;
        *(_QWORD *)(a1 + 56) = 1i64;
      }
      return 0;
    }
  }
  return result;
}

Referenced by:

RtlHpHeapManagerStart
RtlpHpVaMgrCtxStart