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