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