SdbpOpenLocalDatabaseEx

NTSTATUS __stdcall SdbpOpenLocalDatabaseEx(VOID *hSDB, VOID *pDatabaseID, _DB **pPDB, UINT64 *pdwLocalDBMask){
  NTSTATUS v4; 
  unsigned int v8; 
  INT8 *v9; 
  UINT64 v10; 
  int v11; 
  UINT64 v12; 
  _DB *v13; 
  __int64 v14; 
  __int128 v15; 
  __int16 pwszPath[264]; 
  UINT64 *pdwLocalDBMaska; 

  v4 = 0;
  v8 = *(_DWORD *)pdwLocalDBMaska >> 28;
  if( (*(_DWORD *)pdwLocalDBMaska & 0xF0000000) == 0 )
    v8 = *(_DWORD *)pdwLocalDBMaska;
  if( v8 >= 0x10 )
  {
    v9 = "Bad index 0x%lx";
    v10 = 1019i64;
LABEL_18:
    v12 = 1i64;
    goto LABEL_19;
  }
  SdbpCloseLocalDatabaseEx(hSDB, (UINT64)pDatabaseID);
  SdbResolveDatabaseEx();
  if( (unsigned int)(v11 - 1) > 0x102 )
  {
    v9 = (INT8 *)"Cannot resolve database, the path length is 0x%lx";
    v10 = 1053i64;
    goto LABEL_18;
  }
  if( *((_WORD *)hSDB + 288) != 0x7FFF )
  {
    v10 = 1074i64;
    v9 = "Database \"%ws\" is not of the same type as the main EXE";
    v12 = 3i64;
LABEL_19:
    AslLogCallPrintf(v12, (INT8 *)"SdbpOpenLocalDatabaseEx", v10, v9);
    return v4;
  }
  v13 = SdbOpenDatabaseEx((WCHAR *)pwszPath);
  if( v13 )
  {
    v14 = 32i64 * v8;
    *(_QWORD *)((char *)hSDB + v14 + 48) = v13;
    *(_DWORD *)((char *)hSDB + v14 + 56) = 2;
    *((_DWORD *)hSDB + 7) |= 1 << v8;
    if( pDatabaseID )
    {
      v15 = *(_OWORD *)pDatabaseID;
      *(_DWORD *)((char *)hSDB + v14 + 56) |= 1u;
      *(_OWORD *)((char *)hSDB + v14 + 32) = v15;
    }
    else
    {
      *(_OWORD *)((char *)hSDB + v14 + 32) = 0i64;
    }
    v4 = 1;
    if( v8 == 1 )
      *((_QWORD *)hSDB + 2) = v13;
    *(_DWORD *)pdwLocalDBMaska = v8 << 28;
    if( pdwLocalDBMask )
      *pdwLocalDBMask = (UINT64)v13;
  }
  else
  {
    AslLogCallPrintf(1ui64, (INT8 *)"SdbpOpenLocalDatabaseEx", 0x442ui64, (INT8 *)"Failed to open database");
  }
  return v4;
}

Referenced by:

SdbTagRefToTagID