AslpFileLargeEnsureLargeFileMapping

INT64 __fastcall AslpFileLargeEnsureLargeFileMapping(INT64 a1, INT64 rdx0, INT64 a3){
  _DWORD *v6; 
  int i; 
  int FileKind; 
  _QWORD *v9; 
  int ChecksumAttributes; 
  __int64 v11; 
  __int64 v12; 
  int v13; 
  _QWORD *a2; 
  if( *(_QWORD *)(rdx0 + 24) < 0x100000ui64 )
    return 3221225712i64;
  a2 = 0i64;
  v6 = (_DWORD *)(a1 + 24);
  for( i = 0; i < 33; ++i )
  {
    if( i < 0 || i > 19 && i != 22 && i != 24 && (unsigned int)(i - 26) > 5 )
      *v6 |= 2u;
    v6 += 8;
  }
  FileKind = AslpFileLargeMapCreate(&a2, rdx0 + 8, a3);
  if( FileKind >= 0 )
  {
    v9 = a2;
    ChecksumAttributes = AslpFileLargeGetChecksumAttributes(a1, a2);
    if( ChecksumAttributes < 0 )
    {
      v13 = ChecksumAttributes;
      AslLogCallPrintf(
        1ui64,
        "AslpFileLargeEnsureLargeFileMapping",
        0xF8ui64,
        "AslpFileLargeGetChecksumAttributes failed to get checksum attributes [%x]",
        v13);
    }
    if( v9 )
    {
      *(_QWORD *)(rdx0 + 16) = v9[1];
      *(_BYTE *)(rdx0 + 57) = 1;
      v11 = v9[5];
      v9[1] = 0i64;
      *(_QWORD *)(rdx0 + 48) = v11;
      v12 = v9[2];
      v9[5] = 0i64;
      *(_QWORD *)(rdx0 + 32) = v12;
      *(_QWORD *)(rdx0 + 40) = v9[3];
      *(_WORD *)(rdx0 + 58) = 1;
      *(_DWORD *)(rdx0 + 84) = 1;
      v9[2] = 0i64;
      v9[3] = 0i64;
      AslpFileLargeMapDelete(&a2);
      FileKind = AslpFileMappingGetFileKind((_QWORD *)(rdx0 + 8), (int *)(rdx0 + 64));
    }
    else
    {
      FileKind = -1073741584;
    }
  }
  AslpFileLargeMapDelete(&a2);
  return(unsigned int)FileKind;
}

Referenced by:

AslFileAllocAndGetAttributes