SdbpOpenCompressedDatabase

INT64 __fastcall SdbpOpenCompressedDatabase(PVOID *a1, INT64 a2, INT64 a3){
  PVOID v3; 
  unsigned int v4; 
  _QWORD *v5; 
  __m128i *v7; 
  UINT64 v8; 
  VOID *v9; 
  INT64 v10; 
  _QWORD *v11; 
  INT64 result; 
  INT64 v13; 
  LODWORD(v13) = a3;
  v3 = *a1;
  v4 = 0;
  LODWORD(v13) = 0;
  v5 = 0i64;
  if( g_ExpandCallback )
  {
    if( *((_DWORD *)v3 + 5) >= 0x14u )
    {
      v7 = (__m128i *)*((_QWORD *)v3 + 1);
      v8 = v7[1].m128i_u32[0];
      if( _mm_cvtsi128_si32(_mm_srli_si128(*v7, 8)) == 1717724282 )
      {
        if( HIDWORD(*(unsigned __int128 *)v7) == g_ExpectedAlgorithm )
        {
          LODWORD(v13) = v7[1].m128i_i32[0];
          v9 = AslAlloc((VOID *)v8, v8, a3);
          if( v9 )
          {
            if( (unsigned int)((__int64(__fastcall *)(VOID *, INT64 *, __int64, _QWORD))g_ExpandCallback)(
                                 v9,
                                 &v13,
                                 *((_QWORD *)v3 + 1) + 20i64,
                                 (unsigned int)(*((_DWORD *)v3 + 5) - 20)) )
            {
              v11 = SdbpOpenDatabaseInMemory(v9, (unsigned int)v13, v10);
              v5 = v11;
              if( v11 )
              {
                *((_DWORD *)v11 + 6) |= 0xCu;
                v9 = 0i64;
                LODWORD(v13) = 0;
                v4 = 1;
              }
            }
            else
            {
              AslLogCallPrintf(1ui64, "SdbpOpenCompressedDatabase", 0xC1ui64, "Expand callback failed to expand SDB");
            }
            if( v9 )
            {
              ExFreePoolWithTag(v9, 0x74705041u);
              LODWORD(v13) = 0;
              if( v5 )
                v5[1] = 0i64;
            }
            if( !v4 && v5 )
            {
              SdbCloseDatabaseRead(v5);
              v5 = 0i64;
            }
          }
          else
          {
            AslLogCallPrintf(
              1ui64,
              "SdbpOpenCompressedDatabase",
              0xB7ui64,
              "SdbpOpenCompressedDatabase failed to allocate expanded buffer - out of memory");
          }
        }
        else
        {
          AslLogCallPrintf(
            1ui64,
            "SdbpOpenCompressedDatabase",
            0xA4ui64,
            "SDB compression algorithm does not match callback algorithm.");
        }
      }
      else
      {
        AslLogCallPrintf(1ui64, "SdbpOpenCompressedDatabase", 0x9Fui64, "SDB is not compressed");
      }
    }
    else
    {
      AslLogCallPrintf(1ui64, "SdbpOpenCompressedDatabase", 0x98ui64, "SDB file too small to be valid");
    }
  }
  else
  {
    AslLogCallPrintf(
      1ui64,
      "SdbpOpenCompressedDatabase",
      0x93ui64,
      "No expand callback method set. Cannot expand ZDB file.");
  }
  SdbCloseDatabaseRead(*a1);
  result = v4;
  *a1 = v5;
  return result;
}

Referenced by:

SdbOpenDatabaseEx