SdbOpenDatabaseEx

_DB *__stdcall SdbOpenDatabaseEx(WCHAR *pwszPath){
  _DB *v1; 
  WCHAR *v3; 
  VOID *v4; 
  INT64 v5; 
  _DB *v6; 
  _KEXCEPTION_VERIFY *v7; 
  INT64 v8; 
  INT64 v9; 
  INT64 v10; 
  INT8 *v11; 
  UINT64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  INT64 v16; 
  int v17; 
  INT64 v19; 
  INT64 v20; 
  INT64 pBuffer; 
  INT64 a8; 
  _DB *v23; 

  v23 = v1;
  pBuffer = 0i64;
  LODWORD(a8) = 0;
  v3 = pwszPath;
  if( !pwszPath )
    v3 = (WCHAR *)&word_14001B020;
  v20 = (INT64)v3;
  AslLogCallPrintf(3ui64, (INT8 *)"SdbOpenDatabaseEx", 0x382ui64, (INT8 *)"Flags:%d; DatabasePath:%ws");
  v6 = (_DB *)AslAlloc(v4, 1408, v5);
  v23 = v6;
  v7 = v6;
  if( v6 )
  {
    memset(v6, 0i64, 0x580u);
    if( AslFileMappingCreate((WCHAR ***)v7, pwszPath, 0i64, 0i64, 0i64) >= 0 )
    {
      v13 = *(_QWORD *)(*(_QWORD *)v7 + 24i64);
      if( (unsigned __int64)(v13 - 42) > 0x7FFFFFD5 )
      {
        v11 = (INT8 *)"Failed to open SDB - File size too large or small.";
        v12 = 926i64;
        goto LABEL_23;
      }
      if( AslFileMappingEnsureMappedAs(*(_QWORD *)v7, v8, v9, v10, v19, v20, pBuffer, a8) >= 0 )
      {
        v7[4] = 0;
        v7[5] = v13;
        v14 = *(_QWORD *)v7;
        if( *(_QWORD *)v7 )
          v14 = *(_QWORD *)(v14 + 32);
        *((_QWORD *)v7 + 1) = v14;
        if( SdbpReadMappedData(v7, 0i64, &pBuffer, 0xCui64) )
        {
          if( (_DWORD)a8 == 1717724275 )
          {
            SdbpValidateAndApplyCompatFlags(v7);
            if( !v17 )
              goto LABEL_24;
          }
          else
          {
            if( (_DWORD)a8 != 1717724282 )
            {
              v11 = "Magic does not match a valid value: 0x%lx";
              v12 = 958i64;
              goto LABEL_23;
            }
            if( !(unsigned int)SdbpOpenCompressedDatabase(&v23, v15, v16) )
            {
              AslLogCallPrintf(
                1ui64,
                (INT8 *)"SdbOpenDatabaseEx",
                0x3C4ui64,
                (INT8 *)"SdbpOpenCompressedDatabase failed to open compressed database.");
              v7 = v23;
              goto LABEL_24;
            }
            return v23;
          }
          return v7;
        }
        v11 = "Failed to read database header";
        v12 = 945i64;
      }
      else
      {
        v11 = "Failed to map SDB [%x]";
        v12 = 932i64;
      }
    }
    else
    {
      v11 = (INT8 *)"Failed to create file mapping [%x]";
      v12 = 917i64;
    }
LABEL_23:
    AslLogCallPrintf(1ui64, (INT8 *)"SdbOpenDatabaseEx", v12, v11);
LABEL_24:
    if( v7 )
    {
      AslFileMappingDelete(*(_QWORD *)v7);
      ExFreePoolWithTag(v7, 0x74705041u);
    }
    return 0i64;
  }
  AslLogCallPrintf(1ui64, (INT8 *)"SdbOpenDatabaseEx", 0x38Aui64, (INT8 *)"Failed to allocate DB structure");
  return 0i64;
}

Referenced by:

SdbpOpenLocalDatabaseEx